| | |
| | | namespace Yw.WpfUI.Hydro |
| | | using HelixToolkit.Wpf; |
| | | |
| | | namespace Yw.WpfUI.Hydro |
| | | { |
| | | /// <summary> |
| | | /// 抽象编辑管理器 |
| | |
| | | } |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddHorizPipe: |
| | | { |
| | | var pt = e.GetPosition(_viewport); |
| | | var logicalNode = SnapNearestNode(pt); |
| | | if (logicalNode != null) |
| | | { |
| | | var visual = new PipeL3d(); |
| | | visual.Id = Yw.Untity.UniqueHelper.CreateFromFirst("pipe", _nw.Pipes.Select(x => x.Id).ToList()); |
| | | visual.StartPosition = logicalNode.Position.ToPointL3d(); |
| | | visual.EndPosition = logicalNode.Position.ToPointL3d(); |
| | | AddVisual(visual); |
| | | _visual = visual; |
| | | } |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddVertPipe: |
| | | { |
| | | var pt = e.GetPosition(_viewport); |
| | | var logicalNode = SnapNearestNode(pt); |
| | | if (logicalNode != null) |
| | | { |
| | | var visual = new PipeL3d(); |
| | | visual.Id = Yw.Untity.UniqueHelper.CreateFromFirst("pipe", _nw.Pipes.Select(x => x.Id).ToList()); |
| | | visual.StartPosition = logicalNode.Position.ToPointL3d(); |
| | | visual.EndPosition = logicalNode.Position.ToPointL3d(); |
| | | AddVisual(visual); |
| | | _visual = visual; |
| | | } |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddPump: |
| | | { |
| | | var pt = e.GetPosition(_viewport); |
| | |
| | | { |
| | | case eLogicalEditMode.AddJunction: |
| | | { |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddReservoir: |
| | | { |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddTank: |
| | | { |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | |
| | | UpdateVisual(pipe); |
| | | } |
| | | } |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | | |
| | | case eLogicalEditMode.AddHorizPipe: |
| | | { |
| | | var pipe = _visual as PipeL3d; |
| | | if (pipe != null) |
| | | { |
| | | var end = pipe.EndPosition.ToPoint3D(); |
| | | var logicalNode = SnapNearestNode(end); |
| | | if (logicalNode == null) |
| | | { |
| | | var junction = new JunctionL3d(); |
| | | junction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", _nw.Junctions.Select(x => x.Id).ToList()); |
| | | junction.Position = end.ToPointL3d(); |
| | | AddVisual(junction); |
| | | } |
| | | } |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddVertPipe: |
| | | { |
| | | var pipe = _visual as PipeL3d; |
| | | if (pipe != null) |
| | | { |
| | | var end = pipe.EndPosition.ToPoint3D(); |
| | | LogicalNode3D logicalNode = SnapNearestNode(end); |
| | | if (logicalNode == null) |
| | | { |
| | | var junction = new JunctionL3d(); |
| | | junction.Id = Yw.Untity.UniqueHelper.CreateFromFirst("junction", _nw.Junctions.Select(x => x.Id).ToList()); |
| | | junction.Position = end.ToPointL3d(); |
| | | AddVisual(junction); |
| | | } |
| | | } |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | |
| | | UpdateVisual(pump); |
| | | } |
| | | } |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | |
| | | UpdateVisual(valve); |
| | | } |
| | | } |
| | | _visual = null; |
| | | _logicalMode = eLogicalEditMode.None; |
| | | } |
| | | break; |
| | |
| | | break; |
| | | case eLogicalEditMode.AddPipe: |
| | | { |
| | | base.OnMouseMove(e); |
| | | var pipe = _visual as PipeL3d; |
| | | if (pipe != null) |
| | | { |
| | |
| | | } |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddHorizPipe: |
| | | { |
| | | base.OnMouseMove(e); |
| | | var pipe = _visual as PipeL3d; |
| | | if (pipe != null) |
| | | { |
| | | var pt = e.GetPosition(_viewport); |
| | | var sp = _viewport.Viewport.UnProject(pt); |
| | | if (sp.HasValue) |
| | | { |
| | | pipe.EndPosition = new PointL3d(sp.Value.X, sp.Value.Y, pipe.StartPosition.Z); |
| | | UpdateVisual(_visual); |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddVertPipe: |
| | | { |
| | | base.OnMouseMove(e); |
| | | var pipe = _visual as PipeL3d; |
| | | if (pipe != null) |
| | | { |
| | | var pt = e.GetPosition(_viewport); |
| | | var sp = _viewport.Viewport.UnProject(pt); |
| | | if (sp.HasValue) |
| | | { |
| | | pipe.EndPosition = new PointL3d(pipe.StartPosition.X, pipe.StartPosition.Y, sp.Value.Z); |
| | | UpdateVisual(_visual); |
| | | } |
| | | } |
| | | } |
| | | break; |
| | | case eLogicalEditMode.AddPump: |
| | | { |
| | | base.OnMouseMove(e); |
| | | var pump = _visual as PumpL3d; |
| | | if (pump != null) |
| | | { |
| | |
| | | break; |
| | | case eLogicalEditMode.AddValve: |
| | | { |
| | | base.OnMouseMove(e); |
| | | var valve = _visual as ValveL3d; |
| | | if (valve != null) |
| | | { |
| | |
| | | return logicalNode; |
| | | } |
| | | |
| | | //吸附最近节点 |
| | | private LogicalNode3D SnapNearestNode(Point3D pt) |
| | | { |
| | | if (!Initialized) |
| | | { |
| | | return default; |
| | | } |
| | | var snapDistance = Yw.Settings.HydroL3dParasHelper.HydroL3d.Logical.Node.SnapDistance; |
| | | var logicalNode = _viewport.Children.OfType<LogicalNode3D>() |
| | | .OrderBy(x => (x.Position - pt).LengthSquared) |
| | | .FirstOrDefault(x => (x.Position - pt).Length < snapDistance); |
| | | |
| | | return logicalNode; |
| | | } |
| | | |
| | | #endregion |
| | | |