namespace Yw.WpfUI.Hydro
|
{
|
/// <summary>
|
/// 绘制添加辅助类
|
/// </summary>
|
internal class DrawAddHelper : IDisposable
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public DrawAddHelper
|
(
|
HelixViewport3D viewport,
|
DrawInitialHelper initialHelper
|
)
|
{
|
_viewport = viewport;
|
_initialHelper = initialHelper;
|
Attach();
|
}
|
|
private readonly HelixViewport3D _viewport = null;//三维组件
|
private readonly DrawInitialHelper _initialHelper = null;//初始化辅助类
|
private VisualStateObject _stateObject = null;//状态对象
|
private VisualDraw3D _addVisual3d = null;//添加对象
|
|
/// <summary>
|
/// 是否初始化
|
/// </summary>
|
public bool Initialized
|
{
|
get { return _initialized; }
|
private set { _initialized = value; }
|
}
|
private bool _initialized = false;
|
|
//初始化
|
private void Initialize()
|
{
|
if (!_initialHelper.Initialized)
|
{
|
return;
|
}
|
if (_stateObject == null)
|
{
|
_stateObject = new VisualStateObject();
|
_stateObject.HtmlColor = Yw.Settings.HydroL3dParasHelper.HydroL3d.Adding.HtmlColor;
|
_stateObject.Opacity = Yw.Settings.HydroL3dParasHelper.HydroL3d.Adding.Opacity;
|
_stateObject.Scale = Yw.Settings.HydroL3dParasHelper.HydroL3d.Adding.Scale;
|
_stateObject.Visible = Yw.Settings.HydroL3dParasHelper.HydroL3d.Adding.Visible;
|
}
|
_initialized = true;
|
}
|
|
/// <summary>
|
/// 添加方式
|
/// </summary>
|
public eDrawAddWay AddWay
|
{
|
get { return _addWay; }
|
set { _addWay = value; }
|
}
|
private eDrawAddWay _addWay;
|
|
/// <summary>
|
/// 添加类型
|
/// </summary>
|
public eDrawAddType AddType
|
{
|
get { return _addType; }
|
set { _addType = value; }
|
}
|
private eDrawAddType _addType;
|
|
|
//鼠标按下
|
private void OnMouseDown(object sender, MouseButtonEventArgs e)
|
{
|
if (!_initialHelper.Initialized)
|
{
|
return;
|
}
|
if (this.AddWay == eDrawAddWay.Click)
|
{
|
var pt = e.GetPosition(_viewport);
|
var np = ToWorkPanelPoint3D(pt);
|
if (!np.HasValue)
|
{
|
return;
|
}
|
switch (this.AddType)
|
{
|
case eDrawAddType.Reservoir:
|
{
|
var visual = new ReservoirL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Reservoir);
|
visual.Catalog = CatalogL3d.Reservoir;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Reservoir);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Tank:
|
{
|
var visual = new TankL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Tank);
|
visual.Catalog = CatalogL3d.Tank;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Tank);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Waterbox:
|
{
|
var visual = new WaterboxL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Tank);
|
visual.Catalog = CatalogL3d.Tank;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Tank);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Junction:
|
{
|
var visual = new JunctionL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Junction);
|
visual.Catalog = CatalogL3d.Junction;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Junction);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Blunthead:
|
{
|
var visual = new BluntheadL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Blunthead);
|
visual.Catalog = CatalogL3d.Blunthead;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Blunthead);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Elbow:
|
{
|
var visual = new ElbowL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Elbow);
|
visual.Catalog = CatalogL3d.Elbow;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Elbow);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Threelink:
|
{
|
var visual = new ThreelinkL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Threelink);
|
visual.Catalog = CatalogL3d.Threelink;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Threelink);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Fourlink:
|
{
|
var visual = new FourlinkL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Fourlink);
|
visual.Catalog = CatalogL3d.Fourlink;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Fourlink);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Meter:
|
{
|
var visual = new MeterL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Meter);
|
visual.Catalog = CatalogL3d.Meter;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Meter);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Flowmeter:
|
{
|
var visual = new FlowmeterL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Flowmeter);
|
visual.Catalog = CatalogL3d.Flowmeter;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Flowmeter);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Pressmeter:
|
{
|
var visual = new PressmeterL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Pressmeter);
|
visual.Catalog = CatalogL3d.Pressmeter;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Pressmeter);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Hydrant:
|
{
|
var visual = new HydrantL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Hydrant);
|
visual.Catalog = CatalogL3d.Hydrant;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Hydrant);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Nozzle:
|
{
|
var visual = new NozzleL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Nozzle);
|
visual.Catalog = CatalogL3d.Nozzle;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Nozzle);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Cooling:
|
{
|
var visual = new CoolingL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Cooling);
|
visual.Catalog = CatalogL3d.Cooling;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Cooling);
|
visual.Position = np.Value.ToPointL3d();
|
var visual3d = CreateVisual3D(visual);
|
visual3d.LoadState(eVisualState.Adding, _stateObject);
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
break;
|
case eDrawAddType.Pipe:
|
{
|
//不处理
|
}
|
break;
|
case eDrawAddType.HoziPipe:
|
{
|
//不处理
|
}
|
break;
|
case eDrawAddType.VertPipe:
|
{
|
//不处理
|
}
|
break;
|
case eDrawAddType.Pump:
|
{
|
//不处理
|
}
|
break;
|
case eDrawAddType.Valve:
|
{
|
//不处理
|
}
|
break;
|
case eDrawAddType.Exchanger:
|
{
|
//不处理
|
}
|
break;
|
case eDrawAddType.Compressor:
|
{
|
//不处理
|
}
|
break;
|
default: break;
|
}
|
}
|
}
|
|
//鼠标移动
|
private void OnMouseMove(object sender, MouseEventArgs e)
|
{
|
if (!_initialHelper.Initialized)
|
{
|
return;
|
}
|
if (this.AddWay == eDrawAddWay.Click)
|
{
|
var pt = e.GetPosition(_viewport);
|
var sp = _viewport.Viewport.UnProject(pt);
|
if (!sp.HasValue)
|
{
|
return;
|
}
|
var np = ToWorkPanelPoint3D(pt);
|
if (!np.HasValue)
|
{
|
return;
|
}
|
switch (this.AddType)
|
{
|
case eDrawAddType.Reservoir:
|
{
|
var visual3d = _addVisual3d as ReservoirDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Tank:
|
{
|
var visual3d = _addVisual3d as TankDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Waterbox:
|
{
|
var visual3d = _addVisual3d as WaterboxDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Junction:
|
{
|
var visual3d = _addVisual3d as JunctionDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Blunthead:
|
{
|
var visual3d = _addVisual3d as BluntheadDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Elbow:
|
{
|
var visual3d = _addVisual3d as ElbowDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Threelink:
|
{
|
var visual3d = _addVisual3d as ThreelinkDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Fourlink:
|
{
|
var visual3d = _addVisual3d as FourlinkDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Meter:
|
{
|
var visual3d = _addVisual3d as MeterDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Flowmeter:
|
{
|
var visual3d = _addVisual3d as FlowmeterDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Pressmeter:
|
{
|
var visual3d = _addVisual3d as PressmeterDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Hydrant:
|
{
|
var visual3d = _addVisual3d as HydrantDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Nozzle:
|
{
|
var visual3d = _addVisual3d as NozzleDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Cooling:
|
{
|
var visual3d = _addVisual3d as CoolingDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UpdatePosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
break;
|
case eDrawAddType.Pipe:
|
{
|
var visual3d = _addVisual3d as PipeDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
visual3d.UpdateEndPosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
case eDrawAddType.HoziPipe:
|
{
|
var visual3d = _addVisual3d as PipeDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
var endPositon = new Point3D(sp.Value.X, sp.Value.Y, startPosition.Value.Z);
|
visual3d.UpdateEndPosition(endPositon);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
case eDrawAddType.VertPipe:
|
{
|
var visual3d = _addVisual3d as PipeDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
var endPositon = new Point3D(startPosition.Value.X, startPosition.Value.Y, sp.Value.Z);
|
visual3d.UpdateEndPosition(endPositon);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
case eDrawAddType.Pump:
|
{
|
var visual3d = _addVisual3d as PumpDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
visual3d.UpdateEndPosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
case eDrawAddType.Valve:
|
{
|
var visual3d = _addVisual3d as ValveDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
visual3d.UpdateEndPosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
case eDrawAddType.Exchanger:
|
{
|
var visual3d = _addVisual3d as ExchangerDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
visual3d.UpdateEndPosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
case eDrawAddType.Compressor:
|
{
|
var visual3d = _addVisual3d as CompressorDraw3D;
|
if (visual3d != null)
|
{
|
var startPosition = visual3d.GetStartPosition();
|
if (startPosition.HasValue)
|
{
|
visual3d.UpdateEndPosition(np.Value);
|
visual3d.UpdateVisual3D();
|
}
|
}
|
}
|
break;
|
default: break;
|
}
|
}
|
}
|
|
//鼠标弹起
|
private void OnMouseUp(object sender, MouseButtonEventArgs e)
|
{
|
if (!_initialHelper.Initialized)
|
{
|
return;
|
}
|
if (this.AddWay == eDrawAddWay.Click)
|
{
|
var pt = e.GetPosition(_viewport);
|
var sp = _viewport.Viewport.UnProject(pt);
|
if (!sp.HasValue)
|
{
|
return;
|
}
|
var np = ToWorkPanelPoint3D(pt);
|
if (!np.HasValue)
|
{
|
return;
|
}
|
switch (this.AddType)
|
{
|
case eDrawAddType.Reservoir:
|
{
|
var visual3d = _addVisual3d as ReservoirDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Tank:
|
{
|
var visual3d = _addVisual3d as TankDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Waterbox:
|
{
|
var visual3d = _addVisual3d as WaterboxDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Junction:
|
{
|
var visual3d = _addVisual3d as JunctionDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Blunthead:
|
{
|
var visual3d = _addVisual3d as BluntheadDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Elbow:
|
{
|
var visual3d = _addVisual3d as ElbowDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Threelink:
|
{
|
var visual3d = _addVisual3d as ThreelinkDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Fourlink:
|
{
|
var visual3d = _addVisual3d as FourlinkDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Meter:
|
{
|
var visual3d = _addVisual3d as MeterDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Flowmeter:
|
{
|
var visual3d = _addVisual3d as FlowmeterDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Pressmeter:
|
{
|
var visual3d = _addVisual3d as PressmeterDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Hydrant:
|
{
|
var visual3d = _addVisual3d as HydrantDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Nozzle:
|
{
|
var visual3d = _addVisual3d as NozzleDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Cooling:
|
{
|
var visual3d = _addVisual3d as CoolingDraw3D;
|
if (visual3d != null)
|
{
|
visual3d.UnloadState(eVisualState.Adding);
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.Pipe:
|
{
|
var visual3d = _addVisual3d as PipeDraw3D;
|
var node3d = SnapNearestNode(pt);
|
if (visual3d == null)
|
{
|
if (node3d != null)
|
{
|
var visual = new PipeL3d();
|
visual.Id = _initialHelper.CreateId(CatalogL3d.Pipe);
|
visual.Catalog = CatalogL3d.Pipe;
|
visual.Name = _initialHelper.CreateName(CatalogL3d.Pipe);
|
visual.StartNode = node3d.Visual;
|
visual3d = CreateVisual3D(visual) as PipeDraw3D;
|
visual3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(visual3d);
|
_addVisual3d = visual3d;
|
}
|
}
|
else
|
{
|
if (node3d == null)
|
{
|
var vunction = new VunctionL3d();
|
vunction.Id = _initialHelper.CreateId(CatalogL3d.Vunction);
|
vunction.Catalog = CatalogL3d.Vunction;
|
vunction.Name = _initialHelper.CreateName(CatalogL3d.Vunction);
|
vunction.Position = np.Value.ToPointL3d();
|
var vunction3d = CreateVisual3D(vunction);
|
vunction3d.UpdateVisual3D();
|
_initialHelper.AddVisual3D(vunction3d);
|
visual3d.Visual.EndNode = vunction;
|
}
|
else
|
{
|
visual3d.Visual.EndNode = node3d.Visual;
|
}
|
visual3d.UpdateVisual3D();
|
if (!visual3d.Verify())
|
{
|
_initialHelper.RemoveVisual3D(visual3d);
|
}
|
_addVisual3d = null;
|
}
|
}
|
break;
|
case eDrawAddType.HoziPipe:
|
{
|
|
}
|
break;
|
case eDrawAddType.VertPipe:
|
{
|
|
}
|
break;
|
case eDrawAddType.Pump:
|
{
|
|
}
|
break;
|
case eDrawAddType.Valve:
|
{
|
|
}
|
break;
|
case eDrawAddType.Exchanger:
|
{
|
|
}
|
break;
|
case eDrawAddType.Compressor:
|
{
|
|
}
|
break;
|
default: break;
|
}
|
}
|
}
|
|
#region 吸附方法
|
|
//吸附最近节点
|
private NodeDraw3D SnapNearestNode(Point pt)
|
{
|
var logicalNode = _viewport.FindNearestVisual(pt) as NodeDraw3D;
|
if (logicalNode == null)
|
{
|
var sp = _viewport.Viewport.UnProject(pt);
|
if (sp.HasValue)
|
{
|
var snapDistance = Yw.Settings.HydroL3dParasHelper.HydroL3d.Snap.Distance;
|
logicalNode = _viewport.Children.OfType<NodeDraw3D>()
|
.OrderBy(x => (x.Drawer.Position.Value - sp.Value).LengthSquared)
|
.FirstOrDefault(x => (x.Drawer.Position.Value - sp.Value).Length < snapDistance);
|
}
|
}
|
|
return logicalNode;
|
}
|
|
//吸附最近节点
|
private NodeDraw3D SnapNearestNode(Point3D pt)
|
{
|
var snapDistance = Yw.Settings.HydroL3dParasHelper.HydroL3d.Snap.Distance;
|
var logicalNode = _viewport.Children.OfType<NodeDraw3D>()
|
.OrderBy(x => (x.GetPosition().Value - pt).LengthSquared)
|
.FirstOrDefault(x => (x.GetPosition().Value - pt).Length < snapDistance);
|
|
return logicalNode;
|
}
|
|
#endregion
|
|
#region 构件方法
|
|
//创建可见元素3D
|
private VisualDraw3D CreateVisual3D(VisualL3d visual)
|
{
|
if (!_initialHelper.Initialized)
|
{
|
return default;
|
}
|
var visual3d = DrawCreateHelper.Create(visual, _initialHelper.Network.DrawMode);
|
return visual3d;
|
}
|
|
#endregion
|
|
#region 事件注册
|
|
//附加
|
private void Attach()
|
{
|
_viewport.MouseDown += OnMouseDown;
|
_viewport.MouseMove += OnMouseMove;
|
_viewport.MouseUp += OnMouseUp;
|
}
|
|
//分离
|
private void Detach()
|
{
|
_viewport.MouseDown -= OnMouseDown;
|
_viewport.MouseMove -= OnMouseMove;
|
_viewport.MouseUp -= OnMouseUp;
|
}
|
|
#endregion
|
|
#region 坐标转换
|
|
//转工作面坐标
|
private Point3D? ToWorkPanelPoint3D(Point pt)
|
{
|
if (!_initialHelper.Initialized)
|
{
|
return default;
|
}
|
|
_initialHelper.InitialWorkPanel();
|
var workPanel = _initialHelper.Network.WorkPanel;
|
var ray = _viewport.Viewport.GetRay(pt);
|
return ray.PlaneIntersection(workPanel.Center.ToPoint3D(), workPanel.Normal.ToVector3D());
|
}
|
|
#endregion
|
|
/// <summary>
|
/// 释放
|
/// </summary>
|
public void Dispose()
|
{
|
Detach();
|
}
|
|
|
|
}
|
}
|