lixiaojun
2025-04-18 86fdd2266700b4f80a2d8b05b6a79d31802a7231
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);