Yw.WpfUI.Hydro.L3d.Core/01-network/02-visual/VisualL3d.cs
@@ -16,16 +16,6 @@ public VisualL3d(VisualL3d rhs) : base(rhs) { } /// <summary> /// ç®åæ ·å¼ /// </summary> public SimpleVisualL3dStyle SimpleStyle { get { return _simpleStyle; } set { _simpleStyle = value; } } protected SimpleVisualL3dStyle _simpleStyle; /// <summary> /// è·åä½ç½® /// </summary> public abstract List<PointL3d> GetPositions(); Yw.WpfUI.Hydro.L3d.Core/01-network/03-node/00-core/NodeL3d.cs
@@ -10,7 +10,7 @@ /// </summary> public NodeL3d() { this.SimpleStyle = new SimpleNodeL3dStyle("#E94242", 0.5d); } /// <summary> @@ -25,16 +25,6 @@ /// ä½ç½® /// </summary> public PointL3d Position { get; set; } /// <summary> /// ç®åæ ·å¼ /// </summary> public new SimpleNodeL3dStyle SimpleStyle { get { return _simpleStyle as SimpleNodeL3dStyle; } set { _simpleStyle = value; } } /// <summary> Yw.WpfUI.Hydro.L3d.Core/01-network/04-link/00-core/LinkL3d.cs
@@ -10,7 +10,7 @@ /// </summary> public LinkL3d() { this.SimpleStyle = new SimpleLinkL3dStyle("#0000FF", 0.5d); } /// <summary> @@ -31,15 +31,6 @@ /// 䏿¸¸ä½ç½® /// </summary> public PointL3d EndPosition { get; set; } /// <summary> /// ç®åæ ·å¼ /// </summary> public new SimpleLinkL3dStyle SimpleStyle { get { return _simpleStyle as SimpleLinkL3dStyle; } set { _simpleStyle = value; } } /// <summary> /// è·åä½ç½® Yw.WpfUI.Hydro.L3d.Core/01-network/05-style/SimpleLinkL3dStyle.cs
ÎļþÒÑɾ³ý Yw.WpfUI.Hydro.L3d.Core/01-network/05-style/SimpleNodeL3dStyle.cs
ÎļþÒÑɾ³ý Yw.WpfUI.Hydro.L3d.Core/01-network/05-style/SimpleVisualL3dStyle.cs
ÎļþÒÑɾ³ý Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalEditManager.cs
@@ -1,4 +1,6 @@ namespace Yw.WpfUI.Hydro using HelixToolkit.Wpf; namespace Yw.WpfUI.Hydro { /// <summary> /// æ½è±¡ç¼è¾ç®¡çå¨ @@ -154,6 +156,36 @@ } } 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); @@ -203,16 +235,19 @@ { 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; @@ -238,16 +273,46 @@ 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; @@ -273,6 +338,7 @@ UpdateVisual(pump); } } _visual = null; _logicalMode = eLogicalEditMode.None; } break; @@ -298,6 +364,7 @@ UpdateVisual(valve); } } _visual = null; _logicalMode = eLogicalEditMode.None; } break; @@ -326,6 +393,7 @@ break; case eLogicalEditMode.AddPipe: { base.OnMouseMove(e); var pipe = _visual as PipeL3d; if (pipe != null) { @@ -339,8 +407,41 @@ } } 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) { @@ -356,6 +457,7 @@ break; case eLogicalEditMode.AddValve: { base.OnMouseMove(e); var valve = _visual as ValveL3d; if (valve != null) { @@ -434,7 +536,20 @@ 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 Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalManager.cs
@@ -1,7 +1,4 @@ using System.Windows.Controls; using System.Windows.Media.Media3D; namespace Yw.WpfUI.Hydro namespace Yw.WpfUI.Hydro { /// <summary> /// æ½è±¡ç®¡çå¨ @@ -425,7 +422,94 @@ #endregion #region è§è§ /// <summary> /// 设置ä¸è§å¾ /// </summary> public virtual void SetTopView() { if (!Initialized) { return; } var lookDirection = new Vector3D(0, 0, -1); // åä¸ç var upDirection = new Vector3D(0, 1, 0);// Yè½´æä¸ _viewport.FitView(lookDirection, upDirection); } /// <summary> /// 设置ä¸è§å¾ /// </summary> public virtual void SetBottomView() { if (!Initialized) { return; } var lookDirection = new Vector3D(0, 0, 1); // åä¸ç var upDirection = new Vector3D(0, 1, 0);// Yè½´æä¸ _viewport.FitView(lookDirection, upDirection); } /// <summary> /// 设置左è§å¾ /// </summary> public virtual void SetLeftView() { if (!Initialized) { return; } var lookDirection = new Vector3D(1, 0, 0); // åå³ç var upDirection = new Vector3D(0, 0, 1);// Zè½´æä¸ _viewport.FitView(lookDirection, upDirection); } /// <summary> /// 设置å³è§å¾ /// </summary> public virtual void SetRightView() { if (!Initialized) { return; } var lookDirection = new Vector3D(-1, 0, 0); // åå·¦ç var upDirection = new Vector3D(0, 0, 1);// Zè½´æä¸ _viewport.FitView(lookDirection, upDirection); } /// <summary> /// 设置åè§å¾ /// </summary> public virtual void SetFrontView() { if (!Initialized) { return; } var lookDirection = new Vector3D(0, 1, 0); // ååç var upDirection = new Vector3D(0, 0, 1);// Zè½´æä¸ _viewport.FitView(lookDirection, upDirection); } /// <summary> /// 设置åè§å¾ /// </summary> public virtual void SetBackView() { if (!Initialized) { return; } var lookDirection = new Vector3D(0, -1, 0); // ååç var upDirection = new Vector3D(0, 0, 1);// Zè½´æä¸ _viewport.FitView(lookDirection, upDirection); } #endregion Yw.WpfUI.Hydro.L3d.Core/03-logical/09-control/LogicalEditerL3d.xaml.cs
@@ -71,6 +71,17 @@ _manager.StartAddPipe(); } public void StartAddHorizPipe() { _manager.StartAddHorizPipe(); } public void StartAddVertPipe() { _manager.StartAddVertPipe(); } public void StartAddPump() { _manager.StartAddPump(); @@ -81,5 +92,40 @@ _manager.StartAddValve(); } #region è§è§ public void SetTopView() { _manager.SetTopView(); } public void SetBottomView() { _manager.SetBottomView(); } public void SetLeftView() { _manager.SetLeftView(); } public void SetRightView() { _manager.SetRightView(); } public void SetFrontView() { _manager.SetFrontView(); } public void SetBackView() { _manager.SetBackView(); } #endregion } } Yw.WpfUI.Test.Core/MainWindow.xaml
@@ -41,6 +41,7 @@ Content="â æ°´æ± " GroupName="Add" ToolTip="æ·»å æ°´æ± (T)" /> <Separator /> <RadioButton x:Name="rbAddPipe" Margin="5" @@ -62,6 +63,7 @@ Content="⬠åç´ç®¡" GroupName="Add" ToolTip="åç´ç®¡çº¿ (V)" /> <Separator /> <RadioButton x:Name="rbAddPump" Margin="5" @@ -76,6 +78,19 @@ Content="â éé¨" GroupName="Add" ToolTip="éé¨ (V)" /> <Separator /> <Button Content="è§è§"> <Button.ContextMenu> <ContextMenu> <MenuItem Click="TopMenuItem_Click" Header="ä¸" /> <MenuItem Click="BottomMenuItem_Click" Header="ä¸" /> <MenuItem Click="LeftMenuItem_Click" Header="å·¦" /> <MenuItem Click="RightMenuItem_Click" Header="å³" /> <MenuItem Click="FrontMenuItem_Click" Header="å" /> <MenuItem Click="BackMenuItem_Click" Header="å" /> </ContextMenu> </Button.ContextMenu> </Button> </ToolBar> <local:LogicalEditerL3d Name="editer" Grid.Row="1" /> </Grid> Yw.WpfUI.Test.Core/MainWindow.xaml.cs
@@ -15,7 +15,6 @@ { InitializeComponent(); this.Loaded += MainWindow_Loaded; //Initialize3DScene(); } private void MainWindow_Loaded(object sender, RoutedEventArgs e) @@ -23,7 +22,6 @@ var nw = LoadEpaNetwork(); var nw3d = Get3dNetwork(nw); this.editer.Initial(nw3d); //BuildSimpleNetwork(this.viewport,nw3d.Nodes,nw3d.Links); } private Yw.Epanet.Network LoadEpaNetwork() @@ -151,12 +149,12 @@ private void AddHorizPipe_Click(object sender, RoutedEventArgs e) { this.editer.StartAddHorizPipe(); } private void AddVertPipe_Click(object sender, RoutedEventArgs e) { this.editer.StartAddVertPipe(); } private void AddPump_Click(object sender, RoutedEventArgs e) @@ -168,6 +166,36 @@ { this.editer.StartAddValve(); } private void TopMenuItem_Click(object sender, RoutedEventArgs e) { this.editer.SetTopView(); } private void BottomMenuItem_Click(object sender, RoutedEventArgs e) { this.editer.SetBottomView(); } private void LeftMenuItem_Click(object sender, RoutedEventArgs e) { this.editer.SetLeftView(); } private void RightMenuItem_Click(object sender, RoutedEventArgs e) { this.editer.SetRightView(); } private void FrontMenuItem_Click(object sender, RoutedEventArgs e) { this.editer.SetFrontView(); } private void BackMenuItem_Click(object sender, RoutedEventArgs e) { this.editer.SetBackView(); } }