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