qin
2024-05-21 a15bf1762569323ebf47dd094b0f79b33829e76f
Hydraulic/Hydro.MapUI/Map/MapViewer.cs
@@ -132,6 +132,10 @@
            BackColor = Color.Transparent;
        }
        public void SetEditMode(bool isEditMode)
        {
            _IsEditMode= isEditMode;
        }
        private void MapViewer_Load(object sender, EventArgs e)
        {
            this.panel1.Visible = _showToolBar;
@@ -623,7 +627,7 @@
                }
                //移动
                if (selectedObjs.Count >= 1) //&& selectedObjs[0].isNode())
                if (_IsEditMode && selectedObjs.Count >= 1) //&& selectedObjs[0].isNode())
                {
                    List<NodeViewModel> nodes = selectedNodes;
                    foreach (NodeViewModel node in nodes)
@@ -1074,6 +1078,10 @@
                    List<PointF3D> newPositons = selectedNodes.Select(n => n.Position3D).ToList();
                    List<PointF3D> oldPositons = newPositons.Select(n => new PointF3D(n.X - dx, n.Y - dy, n.Z - dz)).ToList();
                    MapObjectExtensions.AddCommand(selectedNodes, "Position3D", oldPositons, newPositons);
                    var l = new List<IBaseViewModel>();
                    l.Add(_Network.AddPipe(_OperaNode, minNode));
                    if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                    _OperaNode = null;
                    _NewNet.Clear();
                }
@@ -1172,14 +1180,26 @@
                                //var m = ScreenToVMap(new PointF(e.X, e.Y));
                                //z = m.Y;
                                p = new PointF(wPos.X, wPos.Y);
                                var l = AddLink(new PointF( e.X,e.Y), true, p, wPos.Z);
                                var l = AddLink(new PointF( e.X,e.Y), isdoubleClick, p, wPos.Z);
                                if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                            }
                            else
                            {
                                getPointAndHeight(e, _select_junction1, out p, out z);
                                var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p, z);
                                if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                                if (mapOption.IsOrtho)
                                {
                                    var wPos = GetZZWorldPoint(_select_junction1.Position3D, _MousePosition, new Vector3(1, 1, 0));
                                    //getPointAndHeight(e, _select_junction1, out p, out z);
                                    p = new PointF(wPos.X, wPos.Y);
                                    var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p, wPos.Z);
                                    if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                                }
                                else
                                {
                                    getPointAndHeight(e, _select_junction1, out p, out z);
                                    var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p,z);
                                    if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                                }
                            }
                            
@@ -1450,8 +1470,11 @@
                    if (!isMouseMoved)
                    {
                        右键_Menu.Show(this, e.Location);
                        转换为ToolStripMenuItem.Enabled = selectedNodes.Count > 0; //(selectedObjs.Count == 1);
                        转换为ToolStripMenuItem.Enabled =  selectedNodes.Count > 0; //(selectedObjs.Count == 1);
                        删除ToolStripMenuItem.Enabled = selectedObjs.Count > 0;
                        删除ToolStripMenuItem1.Enabled = selectedObjs.Count > 0;
                    }
                    if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption);
@@ -1906,6 +1929,55 @@
        {
            _mouseState = MouseState.无;
            Cursor = Cursors.Default;
            if (_isPainting)
            {
                _select_junction1 = null;
                _isPainting = false;
                SetMapInvalidate();
            }
            else if (_isDragging)
            {
                _isDragging = false;
                SetMapInvalidate();
            }
            else if (_isPanning)
            {
                _isPanning = false;
                SetMapInvalidate();
            }
            else if (_isRotating)
            {
                Rotation = Rotation0;
                _isRotating = false;
                SetMapInvalidate();
            }
            else if (_isMovingObject)
            {
                _NewNet.Clear();
                _isMovingObject = false;
                SetMapInvalidate();
            }
            else if (_mouseState != MouseState.无)
            {
                _mouseState = MouseState.无;
                Cursor = Cursors.Default;
            }
            else if (_isInsertingObject)
            {
                _NewNet.Clear();
                _isInsertingObject = false;
                _OperaNode = null;
                SetMapInvalidate();
            }
            else
            {
                _Nodes.ForEach(o => ((NodeViewModel)o).Selected = false);
                _Links.ForEach(o => ((LinkViewModel)o).Selected = false);
                selectedObjs.Clear();
                SetMapInvalidate();
            }
        }
        public void toolStripButton_新建管线_Click(object sender, EventArgs e)
@@ -2057,7 +2129,7 @@
            }
            if (e.KeyCode == Keys.Delete)
            if (_IsEditMode && e.KeyCode == Keys.Delete)
            {
                DeleteChoosedObj();
            }
@@ -2069,29 +2141,29 @@
                SetMapInvalidate();
            }
            if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control)
            if (_IsEditMode && e.KeyCode == Keys.C && e.Modifiers == Keys.Control)
            {
                复制ToolStripMenuItem_Click(1, new EventArgs());
            }
            if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
            if (_IsEditMode && e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
            {
                _ClickStartPos = Cursor.Position;
                粘贴ToolStripMenuItem1_Click(1, new EventArgs());
            }
            if (e.KeyCode == Keys.D1 && e.Modifiers == Keys.Control)
            if (_IsEditMode && e.KeyCode == Keys.D1 && e.Modifiers == Keys.Control)
            {
                南北对齐ToolStripMenuItem_Click(1, new EventArgs());
            }
            if (e.KeyCode == Keys.Oemtilde && e.Modifiers == Keys.Control)
            if (_IsEditMode && e.KeyCode == Keys.Oemtilde && e.Modifiers == Keys.Control)
            {
                东西对齐ToolStripMenuItem_Click(1, new EventArgs());
            }
            if (e.KeyCode == Keys.D2 && e.Modifiers == Keys.Control)
            if (_IsEditMode && e.KeyCode == Keys.D2 && e.Modifiers == Keys.Control)
            {
                竖直对齐ToolStripMenuItem_Click(1, new EventArgs());
            }
            if (e.KeyCode == Keys.D3 && e.Modifiers == Keys.Control)
            if (_IsEditMode && e.KeyCode == Keys.D3 && e.Modifiers == Keys.Control)
            {
                自动对齐ToolStripMenuItem_Click(1, new EventArgs());
            }
@@ -2101,7 +2173,7 @@
        private void MapViewer_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (ctrlPressed && e.KeyChar == 'Z' - 64)
            if (_IsEditMode && ctrlPressed && e.KeyChar == 'Z' - 64)
            {
                // 执行相应的操作
                buttonUndo_Click(sender, e);
@@ -2110,7 +2182,7 @@
                // 防止默认操作
                e.Handled = true;
            }
            if (ctrlPressed && e.KeyChar == 'Y' - 64)
            if (_IsEditMode && ctrlPressed && e.KeyChar == 'Y' - 64)
            {
                // 执行相应的操作
                buttonRedo_Click(sender, e);
@@ -2131,14 +2203,14 @@
        }
        private void MapViewer_PreKeyPress(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.Z)
            if (_IsEditMode && e.Control && e.KeyCode == Keys.Z)
            {
                ctrlPressed = true;
                // 防止默认操作
                e.IsInputKey = true;
            }
            if (e.Control && e.KeyCode == Keys.Y)
            if (_IsEditMode && e.Control && e.KeyCode == Keys.Y)
            {
                ctrlPressed = true;
                // 防止默认操作
@@ -2286,7 +2358,7 @@
        {
            _IsEditMode = !_IsEditMode;
            //toolStripComboBox_浏览模式.Text = isEditMode ? "编辑模式" : "浏览模式";
            LoadData(true);
            //LoadData(true);
        }
        private void 浏览模式ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -2294,7 +2366,7 @@
            var obj = sender as ToolStripItem;
            _IsEditMode = obj.Text == "编辑模式";
            //toolStripComboBox_浏览模式.Text = isEditMode ? "编辑模式" : "浏览模式";
            LoadData(true);
            //LoadData(true);
        }
        #endregion
@@ -3313,29 +3385,62 @@
        public void 粘贴ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            {
                var net = new MapViewNetWork();
                string json = Clipboard.GetText();
                net.ReadFromJson(json);
                PointF minPoint = new PointF(net.StartPoint.X, net.StartPoint.Y);
                if (net.StartPoint == null) return;
                string SID = net.StartPoint.ID;
                net.StartPoint=net.Nodes.Find(n => n.ID == SID);
                PointF3D minPoint = net.StartPoint.Position3D;// new PointF(net.StartPoint.X, net.StartPoint.Y);
                Point controlLocation = this.PointToScreen(new Point(0, 0));
                int offsetX = Cursor.Position.X - controlLocation.X;
                int offsetY = Cursor.Position.Y - controlLocation.Y;
                var position = new Point(offsetX, offsetY);
                net.BuildRelation();
                var basePoint = MapPointToWorldPoint(ScreenToMap(position, net.StartPoint.Elev), net.StartPoint.Elev);
                net.Nodes.ForEach(obj =>
                //var basePoint = MapPointToWorldPoint(ScreenToMap(position, net.StartPoint.Elev), net.StartPoint.Elev);
                var mPos = _MousePosition;
                if (hoveredObjs.Count>0 && hoveredObjs[0] is NodeViewModel minNode)
                {
                    obj.X = obj.X + basePoint.X - minPoint.X;
                    obj.Y = obj.Y + basePoint.Y - minPoint.Y;
                });
                selectedObjs.ForEach(o => o.Selected = false);
                selectedObjs.Clear();
                selectedObjs.AddRange(net.Nodes.Select(n => (NodeViewModel)n));
                selectedObjs.AddRange(net.Links.ViewLinks);
                var list = _Network.Add(net);
                MapObjectExtensions.AddCommand(_Network, "Add", null, list);
                SetMapInvalidate();
                    var basePoint = minNode.Position3D;
                    net.Nodes.ForEach(obj =>
                    {
                        obj.X = obj.X + basePoint.X - minPoint.X;
                        obj.Y = obj.Y + basePoint.Y - minPoint.Y;
                        obj.Elev = obj.Elev + basePoint.Z - minPoint.Z;
                    });
                    selectedObjs.ForEach(o => o.Selected = false);
                    selectedObjs.Clear();
                    selectedObjs.AddRange(net.Nodes.Select(n => (NodeViewModel)n));
                    selectedObjs.AddRange(net.Links.ViewLinks);
                    var list = _Network.Add(net,null,false,minNode);
                    net.BuildRelation();
                    //list.Add(_Network.AddPipe(Snode, minNode));
                    MapObjectExtensions.AddCommand(_Network, "Add", null, list);
                    SetMapInvalidate();
                }
                else
                {
                    var basePoint = MapPointToWorldPoint(_MousePosition, net.StartPoint.Elev);
                    net.Nodes.ForEach(obj =>
                    {
                        obj.X = obj.X + basePoint.X - minPoint.X;
                        obj.Y = obj.Y + basePoint.Y - minPoint.Y;
                    });
                    selectedObjs.ForEach(o => o.Selected = false);
                    selectedObjs.Clear();
                    selectedObjs.AddRange(net.Nodes.Select(n => (NodeViewModel)n));
                    selectedObjs.AddRange(net.Links.ViewLinks);
                    var list = _Network.Add(net);
                    net.BuildRelation();
                    MapObjectExtensions.AddCommand(_Network, "Add", null, list);
                    SetMapInvalidate();
                }
            }
        }
        private void 增量保存ToolStripMenuItem_Click(object sender, EventArgs e)