From 86fdd2266700b4f80a2d8b05b6a79d31802a7231 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期五, 18 四月 2025 17:56:41 +0800
Subject: [PATCH] 添加编辑功能

---
 Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalEditManager.cs |   65 ++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 1 deletions(-)

diff --git a/Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalEditManager.cs b/Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalEditManager.cs
index 1396d86..7ac7fb5 100644
--- a/Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalEditManager.cs
+++ b/Yw.WpfUI.Hydro.L3d.Core/03-logical/08-manager/LogicalEditManager.cs
@@ -15,7 +15,7 @@
 
         private eLogicalEditMode _logicalMode = eLogicalEditMode.None;//缂栬緫妯″紡
         private LogicalVisual3D _addLogicalVisual;//娣诲姞鎶借薄瀵硅薄
-        private LogicalVisual3D _editLogicalVisual;//缂栬緫鎶借薄瀵硅薄
+        private LogicalNode3D _editLogicalNode;//缂栬緫鎶借薄鑺傜偣
 
 
         #region 娣诲姞鏂规硶
@@ -96,6 +96,14 @@
             _logicalMode = eLogicalEditMode.Edit;
         }
 
+        /// <summary>
+        /// 缁撴潫缂栬緫
+        /// </summary>
+        public void EndEdit()
+        {
+            _logicalMode = eLogicalEditMode.None;
+        }
+
         #endregion
 
         #region 閲嶅啓浜嬩欢
@@ -121,6 +129,7 @@
                             junction.Catalog = CatalogL3d.Junction;
                             junction.Name = _nw.CreateName(CatalogL3d.Junction);
                             junction.Position = sp.Value.ToPointL3d();
+                            _stateHelper.LoadState(junction, eLogicalState.Adding);
                             var logicalJunction = CreateLogicalVisual(junction);
                             logicalJunction.UpdateVisual();
                             AddLogicalVisual(logicalJunction);
@@ -139,6 +148,7 @@
                             reservoir.Catalog = CatalogL3d.Reservoir;
                             reservoir.Name = _nw.CreateName(CatalogL3d.Reservoir);
                             reservoir.Position = sp.Value.ToPointL3d();
+                            _stateHelper.LoadState(reservoir, eLogicalState.Adding);
                             var logicalReservoir = CreateLogicalVisual(reservoir);
                             logicalReservoir.UpdateVisual();
                             AddLogicalVisual(logicalReservoir);
@@ -157,6 +167,7 @@
                             tank.Catalog = CatalogL3d.Tank;
                             tank.Name = _nw.CreateName(CatalogL3d.Tank);
                             tank.Position = sp.Value.ToPointL3d();
+                            _stateHelper.LoadState(tank, eLogicalState.Adding);
                             var logicalTank = CreateLogicalVisual(tank);
                             logicalTank.UpdateVisual();
                             AddLogicalVisual(logicalTank);
@@ -175,6 +186,7 @@
                             pipe.Catalog = CatalogL3d.Pipe;
                             pipe.Name = _nw.CreateName(CatalogL3d.Pipe);
                             pipe.StartNode = logicalNode.Vmo;
+                            _stateHelper.LoadState(pipe, eLogicalState.Adding);
                             var logicalPipe = CreateLogicalVisual(pipe) as LogicalPipe3D;
                             logicalPipe.EndPosition = logicalNode.Position;
                             logicalPipe.UpdateVisual();
@@ -194,6 +206,7 @@
                             pipe.Catalog = CatalogL3d.Pipe;
                             pipe.Name = _nw.CreateName(CatalogL3d.Pipe);
                             pipe.StartNode = logicalNode.Vmo;
+                            _stateHelper.LoadState(pipe, eLogicalState.Adding);
                             var logicalPipe = CreateLogicalVisual(pipe) as LogicalPipe3D;
                             logicalPipe.EndPosition = logicalNode.Position;
                             logicalPipe.UpdateVisual();
@@ -213,6 +226,7 @@
                             pipe.Catalog = CatalogL3d.Pipe;
                             pipe.Name = _nw.CreateName(CatalogL3d.Pipe);
                             pipe.StartNode = logicalNode.Vmo;
+                            _stateHelper.LoadState(pipe, eLogicalState.Adding);
                             var logicalPipe = CreateLogicalVisual(pipe) as LogicalPipe3D;
                             logicalPipe.EndPosition = logicalNode.Position;
                             logicalPipe.UpdateVisual();
@@ -232,6 +246,7 @@
                             pump.Catalog = CatalogL3d.Pump;
                             pump.Name = _nw.CreateName(CatalogL3d.Pump);
                             pump.StartNode = logicalNode.Vmo;
+                            _stateHelper.LoadState(pump, eLogicalState.Adding);
                             var logicalPump = CreateLogicalVisual(pump) as LogicalPump3D;
                             logicalPump.EndPosition = logicalNode.Position;
                             logicalPump.UpdateVisual();
@@ -251,11 +266,24 @@
                             valve.Catalog = CatalogL3d.Valve;
                             valve.Name = _nw.CreateName(CatalogL3d.Valve);
                             valve.StartNode = logicalNode.Vmo;
+                            _stateHelper.LoadState(valve, eLogicalState.Adding);
                             var logicalValve = CreateLogicalVisual(valve) as LogicalValve3D;
                             logicalValve.EndPosition = logicalNode.Position;
                             logicalValve.UpdateVisual();
                             AddLogicalVisual(logicalValve);
                             _addLogicalVisual = logicalValve;
+                        }
+                    }
+                    break;
+                case eLogicalEditMode.Edit:
+                    {
+                        var pt = e.GetPosition(_viewport);
+                        var logicalNode = SnapNearestNode(pt);
+                        if (logicalNode != null)
+                        {
+                            var node = logicalNode.Vmo;
+                            _stateHelper.LoadState(logicalNode.Vmo, eLogicalState.Editing);
+                            _editLogicalNode = logicalNode;
                         }
                     }
                     break;
@@ -402,6 +430,24 @@
                         }
                     }
                     break;
+                case eLogicalEditMode.Edit:
+                    {
+                        base.OnMouseMove(e);
+                        if (_editLogicalNode != null)
+                        {
+                            var pt = e.GetPosition(_viewport);
+                            var sp = _viewport.Viewport.UnProject(pt);
+                            if (sp.HasValue)
+                            {
+                                var node = _editLogicalNode.Vmo;
+                                node.Position = sp.Value.ToPointL3d();
+                                _editLogicalNode.UpdateVisual();
+                                var links = _nw.Links.Where(x => x.StartNode == node || x.EndNode == node).ToList();
+                                links?.ForEach(x => _allVisualLogicalDict[x].UpdateVisual());
+                            }
+                        }
+                    }
+                    break;
                 default:
                     {
                         base.OnMouseMove(e);
@@ -424,6 +470,7 @@
                         var logicalJunction = _addLogicalVisual as LogicalJunction3D;
                         if (logicalJunction != null)
                         {
+                            _stateHelper.UnloadState(logicalJunction.Vmo, eLogicalState.Adding);
                             if (!logicalJunction.Verify())
                             {
                                 RemoveLogicalVisual(logicalJunction);
@@ -438,6 +485,7 @@
                         var logicalReservoir = _addLogicalVisual as LogicalReservoir3D;
                         if (logicalReservoir != null)
                         {
+                            _stateHelper.UnloadState(logicalReservoir.Vmo, eLogicalState.Adding);
                             if (!logicalReservoir.Verify())
                             {
                                 RemoveLogicalVisual(logicalReservoir);
@@ -452,6 +500,7 @@
                         var logicalTank = _addLogicalVisual as LogicalTank3D;
                         if (logicalTank != null)
                         {
+                            _stateHelper.UnloadState(logicalTank.Vmo, eLogicalState.Adding);
                             if (!logicalTank.Verify())
                             {
                                 RemoveLogicalVisual(logicalTank);
@@ -466,6 +515,7 @@
                         var logicalPipe = _addLogicalVisual as LogicalPipe3D;
                         if (logicalPipe != null)
                         {
+                            _stateHelper.UnloadState(logicalPipe.Vmo, eLogicalState.Adding);
                             var pt = e.GetPosition(_viewport);
                             var logicalNode = SnapNearestNode(pt);
                             if (logicalNode == null)
@@ -499,6 +549,7 @@
                         var logicalPipe = _addLogicalVisual as LogicalPipe3D;
                         if (logicalPipe != null)
                         {
+                            _stateHelper.UnloadState(logicalPipe.Vmo, eLogicalState.Adding);
                             var end = logicalPipe.EndPosition;
                             var logicalNode = SnapNearestNode(end);
                             if (logicalNode == null)
@@ -531,6 +582,7 @@
                         var logicalPipe = _addLogicalVisual as LogicalPipe3D;
                         if (logicalPipe != null)
                         {
+                            _stateHelper.UnloadState(logicalPipe.Vmo, eLogicalState.Adding);
                             var end = logicalPipe.EndPosition;
                             var logicalNode = SnapNearestNode(end);
                             if (logicalNode == null)
@@ -563,6 +615,7 @@
                         var logicalPump = _addLogicalVisual as LogicalPump3D;
                         if (logicalPump != null)
                         {
+                            _stateHelper.UnloadState(logicalPump.Vmo, eLogicalState.Adding);
                             var pt = e.GetPosition(_viewport);
                             var logicalNode = SnapNearestNode(pt);
                             if (logicalNode == null)
@@ -596,6 +649,7 @@
                         var logicalValve = _addLogicalVisual as LogicalValve3D;
                         if (logicalValve != null)
                         {
+                            _stateHelper.UnloadState(logicalValve.Vmo, eLogicalState.Adding);
                             var pt = e.GetPosition(_viewport);
                             var logicalNode = SnapNearestNode(pt);
                             if (logicalNode == null)
@@ -624,6 +678,15 @@
                         }
                     }
                     break;
+                case eLogicalEditMode.Edit:
+                    {
+                        if (_editLogicalNode != null)
+                        {
+                            _stateHelper.UnloadState(_editLogicalNode.Vmo, eLogicalState.Editing);
+                        }
+                        _editLogicalNode = null;
+                    }
+                    break;
                 default:
                     {
                         base.OnMouseUp(e);

--
Gitblit v1.9.3