From 0767ce6e8d5a3272359916fc2c2a64ca3a1c5f02 Mon Sep 17 00:00:00 2001 From: qin <a@163.com> Date: 星期三, 22 五月 2024 11:59:05 +0800 Subject: [PATCH] 批量一键生成楼层模型 --- Hydraulic/Hydro.MapUI/Map/MapViewer.cs | 217 +++++++++++++++++++++++++++++++++-------------------- 1 files changed, 135 insertions(+), 82 deletions(-) diff --git a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs index 46a868b..ab90a46 100644 --- a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs +++ b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs @@ -119,7 +119,7 @@ //if (!showToolBar) this.panel1.Visible = false; } - public MapViewer() + public MapViewer() { this.showToolBar = false; @@ -127,15 +127,15 @@ MapCenter = PointF.Empty; zoom = 1.0f; - + SetStyle(ControlStyles.SupportsTransparentBackColor, true); BackColor = Color.Transparent; } public void SetEditMode(bool isEditMode) { - _IsEditMode= isEditMode; - } + _IsEditMode = isEditMode; + } private void MapViewer_Load(object sender, EventArgs e) { this.panel1.Visible = _showToolBar; @@ -165,9 +165,9 @@ cb_Link_Colour.SelectedIndex = 0; - map.Init(TC,new DrawDelegate[] { Draw, Draw, DrawH },new MouseDelegate[] { mapMouseDown, mapMouseMove, mapMouseUp, mapMouseWheel }); + map.Init(TC, new DrawDelegate[] { Draw, Draw, DrawH }, new MouseDelegate[] { mapMouseDown, mapMouseMove, mapMouseUp, mapMouseWheel }); - + } @@ -179,7 +179,7 @@ public bool LoadData(bool isDelCache = false) { - + if (_Template == null) return false; if (isDelCache || _Template.network == null) { @@ -256,7 +256,7 @@ bool reLoad = _Template == template; this._Template = template; this._ViewModel = viewMode; - + //if ( _Template?.Floors!=null) //{ @@ -299,7 +299,7 @@ SetMapInvalidate(); } } - + 鍒锋柊妤煎眰ToolStripMenuItem_Click(1, new EventArgs()); label_center.Text = $"center锛�({MapCenter.X.ToString("0.00")} 锛寋MapCenter.Y.ToString("0.00")}锛�"; label_zoom.Text = $"Zoom锛歿zoom.ToString("0.000")}"; @@ -381,8 +381,8 @@ #region 閲嶇粯鍑芥暟 - bool _needPaintAll - { + bool _needPaintAll + { get { return __needpaintall; @@ -495,7 +495,7 @@ // } // if (_isSettingBackGroundPictur) // { - + // var _lastMousePosition = DragStartPos; // // 缁樺埗鐭╁舰 // var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); @@ -543,11 +543,11 @@ return points; } - - - - + + + + private void timer_draw_Tick(object sender, EventArgs e) { _mouseHoverCheckFlag = true; @@ -569,13 +569,13 @@ #region 榧犳爣浜嬩欢 - + void mapMouseDown(MouseEventArgs e) { base.OnMouseDown(e); _ClickStartPos = new PointF(e.X, e.Y); - DragStartPos= ScreenToMap(new PointF(e.X, e.Y)); + DragStartPos = ScreenToMap(new PointF(e.X, e.Y)); mousePosition = _MousePosition = ScreenToMap(new PointF(e.X, e.Y)); if (e.Button == MouseButtons.Left && _isInsertingObject) { @@ -756,7 +756,7 @@ // Math.Abs((int)DragStartPos.Y - (int)MP.Y)); //DrawSelectionRect(selectionRect); needInvalidate = true; - + } else if (_isRotating) { @@ -790,7 +790,7 @@ // 閬嶅巻鎵�鏈夊璞�,鎵惧嚭鑼冨洿鍐呯殑瀵硅薄 PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); var obj = GetObj_by_ScreenPoint(clickedPoint); - if (hoveredObjs.Count > 0 && hoveredObjs[0] == obj || hoveredObjs.Count==0 && obj==null) + if (hoveredObjs.Count > 0 && hoveredObjs[0] == obj || hoveredObjs.Count == 0 && obj == null) { //needInvalidate = false; } @@ -799,18 +799,18 @@ needInvalidate = true; hoveredObjs.ForEach(o => o.Hovered = false); hoveredObjs.Clear(); - if (obj!=null) + if (obj != null) { obj.Hovered = true; hoveredObjs.Add(obj); } - - + + } - + } - + if (needInvalidate) this.SetMapInvalidate(); @@ -1011,7 +1011,7 @@ //_OperaNode = null; //_Network.Nodes.AddRange(net.Nodes); //_Network.Links.AddRange(net.Links); - + SetMapInvalidate(); return; } @@ -1081,7 +1081,7 @@ 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(); } @@ -1156,7 +1156,7 @@ case MouseState.鏂板缓閲嶅鍣�: if (_select_junction1 == null) { - if (_mouseState==MouseState.鏂板绔嬬) + if (_mouseState == MouseState.鏂板绔嬬) { var m = ScreenToVMap(new PointF(e.X, e.Y)); z = m.Y; @@ -1168,19 +1168,19 @@ getPointAndHeight(e, out p, out z); Set_junction1(e); } - + } else { if (_mouseState == MouseState.鏂板绔嬬) { //闇�瑕佹妸榧犳爣浣嶇疆杞崲涓虹珛绠$殑浣嶇疆锛岃幏鍙栭紶鏍囦綅缃殑楂樼▼ - + var wPos = GetZZWorldPoint(_select_junction1.Position3D, _MousePosition, new Vector3(0, 0, 1)); //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), isdoubleClick, 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 @@ -1195,14 +1195,14 @@ } else { - getPointAndHeight(e, _select_junction1, out p, out z); - var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p,z); + 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); } - + } - + } break; } @@ -1470,11 +1470,11 @@ if (!isMouseMoved) { 鍙抽敭_Menu.Show(this, e.Location); - - 杞崲涓篢oolStripMenuItem.Enabled = selectedNodes.Count > 0; //(selectedObjs.Count == 1); + + 杞崲涓篢oolStripMenuItem.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); @@ -1515,7 +1515,7 @@ IBaseViewModel GetObj_by_ScreenPoint(PointF clickedPoint, float DistLimit = 15f) { float minDist = float.MaxValue; - + int minIndex = -1; bool isJunction = true; IBaseViewModel obj = null; @@ -1564,9 +1564,9 @@ float minDist = float.MaxValue; int minIndex = -1; - + IBaseViewModel obj = null; - List < IBaseViewModel > objs = new List<IBaseViewModel>(); + List<IBaseViewModel> objs = new List<IBaseViewModel>(); for (int i = 0; i < _Nodes.Count; i++) { var node = _Nodes[i] as NodeViewModel; @@ -1595,7 +1595,7 @@ //float dist = Get_dist(clickedPoint, currentPoint); if (dist < minDist && dist <= DistLimit) { - + objs.Add(link); } @@ -1701,10 +1701,10 @@ } private void 榛樿瑙嗚ToolStripMenuItem_Click(object sender, EventArgs e) { - + mapOption0 = mapOption.Copy(); - + InitCenter(); RotationF = 45; Rotation = -45; @@ -1827,8 +1827,8 @@ { _Template = new Template(); _Template.network = new MapViewNetWork(); - - + + //_Template.network.use_old = false; // 鑾峰彇閫変腑鏂囦欢鐨勬枃浠惰矾寰� string filePath = openFileDialog.FileName; @@ -1918,7 +1918,7 @@ #region 缁樺浘宸ュ叿 - + public void toolStripButton_鏂板缓鑺傜偣_Click(object sender, EventArgs e) { _mouseState = MouseState.鏂板鑺傜偣; @@ -1985,7 +1985,7 @@ _mouseState = MouseState.鏂板绠$嚎; Cursor = Cursors.Cross; } - public void toolStripButton_鏂板缓绔嬬_Click(object sender,EventArgs e) + public void toolStripButton_鏂板缓绔嬬_Click(object sender, EventArgs e) { _mouseState = MouseState.鏂板绔嬬; Cursor = Cursors.Cross; @@ -2008,7 +2008,7 @@ l.Add(_select_junction2); } - if (_mouseState == MouseState.鏂板绠$嚎 || _mouseState==MouseState.鏂板绔嬬) + if (_mouseState == MouseState.鏂板绠$嚎 || _mouseState == MouseState.鏂板绔嬬) l.Add(_Network.AddPipe(_select_junction1, _select_junction2)); else if (_mouseState == MouseState.鏂板缓闃�闂�) l.Add(_Network.AddValve(_select_junction1, _select_junction2)); @@ -2520,7 +2520,7 @@ private void 缂╂斁ToolStripMenuItem_Click(object sender, EventArgs e) { - + var objs = GlobalObject.PropertyForm.selectionSet.selectedObjects; var list = objs.FindAll(o => o is NodeViewModel); //GlobalObject.PropertyForm.listBox1.SelectedItems; if (list.Count <= 0) return; @@ -2594,12 +2594,12 @@ } - + public void toolStripButton_璁$畻_Click(object sender, EventArgs e) { //LoadData(); - _Network.Calc(_Template.FullPath, GlobalPath.configPath+ "config_calc.wdb"); + _Network.Calc(_Template.FullPath, GlobalPath.configPath + "config_calc.wdb"); } public void 鍏抽榾鎼滅储ToolStripMenuItem_Click(object sender, EventArgs e) @@ -2875,7 +2875,7 @@ // } //} - private void TraversePipeNetworkALL(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null,int direction=0) + private void TraversePipeNetworkALL(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null, int direction = 0) { Queue<LinkViewModel> queue = new Queue<LinkViewModel>(); @@ -3260,6 +3260,59 @@ } } + /// <summary> + /// 鎵归噺涓�閿敓鎴愭ゼ灞傛ā鍨� + /// </summary> + public void BatchInsertNet(Template temp) + { + var nodes = _Nodes.Where(c => c.Elev > 0).Select(node => (NodeViewModel)node).ToList(); + _undoOldValue = new PointF3D(0, 0, 0); + _OperaNode = temp.network.Nodes.Find(node => node.ID == temp.Node1) as NodeViewModel; + //foreach (var item in nodes) + if (nodes.Any()) + { + for (var i = 0; i < nodes.Count(); i++) + { + var net = temp.network.DeepCopy(); + + float dx, dy, dz; + var p1 = (PointF3D)_undoOldValue; + var p2 = nodes[i].Position3D; + var dd = temp.OffSet; + dx = p2.X - p1.X; + dy = p2.Y - p1.Y; + dz = p2.Z - p1.Z; + + net.Nodes.ForEach(n => { ((NodeViewModel)n).Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); + + var list = _Network.Add(net); + + //var j = _Network.AddPipe(nodes[i], _OperaNode); + //j.Length = 0.0001f; + //list.Add(j); + _NewNet.Clear(); + + _Network.BuildRelation(); + + selectedObjs.ForEach(o => o.Selected = false); + selectedObjs.Clear(); + + //list.ForEach(m => m.Selected = true); + //selectedObjs.AddRange(list); + + MapObjectExtensions.AddCommand(_Network, "Add", null, list); + } + + _OperaNode = null; + + //_OperaNode = null; + //_Network.Nodes.AddRange(net.Nodes); + //_Network.Links.AddRange(net.Links); + + SetMapInvalidate(); + } + } + private void 浠ュ綋鍓嶈瑙掑彟瀛楾oolStripMenuItem_Click(object sender, EventArgs e) { if (_Template == null) return; @@ -3319,7 +3372,7 @@ { var objs = selectedObjs.FindAll(o => o is LinkViewModel).Select(o => o as LinkViewModel).ToList(); - if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o=>objs.AddRange(o.Links.Select(l=>l as LinkViewModel).ToList())); + if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o => objs.AddRange(o.Links.Select(l => l as LinkViewModel).ToList())); //objs鍘绘帀閲嶅鐨勫厓绱� objs = objs.Distinct().ToList(); var visitedNodes = new HashSet<NodeViewModel>(); @@ -3336,21 +3389,21 @@ { var objs = selectedObjs.FindAll(o => o is LinkViewModel).Select(o => o as LinkViewModel).ToList(); - if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o => + if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o => { - objs.AddRange(o.Links.Select(oo => oo as LinkViewModel).ToList().FindAll(oo=>oo.StartNode==o?oo.EN_FLOW>0:oo.EN_FLOW<0)); + objs.AddRange(o.Links.Select(oo => oo as LinkViewModel).ToList().FindAll(oo => oo.StartNode == o ? oo.EN_FLOW > 0 : oo.EN_FLOW < 0)); }); //objs鍘绘帀閲嶅鐨勫厓绱� objs = objs.Distinct().ToList(); var visitedNodes = new HashSet<NodeViewModel>(); - objs.ForEach(o => TraversePipeNetworkALL(o, visitedNodes,1)); + objs.ForEach(o => TraversePipeNetworkALL(o, visitedNodes, 1)); this.SetMapInvalidate(); } } public void 澶嶅埗ToolStripMenuItem_Click(object sender, EventArgs e) { - if(hoveredObjs.Count<=0 || !(hoveredObjs[0] is NodeViewModel)) + if (hoveredObjs.Count <= 0 || !(hoveredObjs[0] is NodeViewModel)) { MessageBox.Show("璇峰皢榧犳爣鎮仠鍦ㄤ竴涓妭鐐瑰璞′笂,浣滀负鍩哄噯鐐�"); return; @@ -3360,7 +3413,7 @@ MessageBox.Show("璇烽�夋嫨瑕佸鍒剁殑瀵硅薄"); return; } - + _OperaNode = hoveredObjs[0] as NodeViewModel; MapViewNetWork net = new MapViewNetWork(); @@ -3385,13 +3438,13 @@ public void 绮樿创ToolStripMenuItem1_Click(object sender, EventArgs e) { { - + var net = new MapViewNetWork(); string json = Clipboard.GetText(); net.ReadFromJson(json); if (net.StartPoint == null) return; string SID = net.StartPoint.ID; - net.StartPoint=net.Nodes.Find(n => n.ID == SID); + 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; @@ -3401,9 +3454,9 @@ net.BuildRelation(); //var basePoint = MapPointToWorldPoint(ScreenToMap(position, net.StartPoint.Elev), net.StartPoint.Elev); var mPos = _MousePosition; - if (hoveredObjs.Count>0 && hoveredObjs[0] is NodeViewModel minNode) + if (hoveredObjs.Count > 0 && hoveredObjs[0] is NodeViewModel minNode) { - + var basePoint = minNode.Position3D; net.Nodes.ForEach(obj => { @@ -3411,12 +3464,12 @@ 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); + var list = _Network.Add(net, null, false, minNode); net.BuildRelation(); //list.Add(_Network.AddPipe(Snode, minNode)); MapObjectExtensions.AddCommand(_Network, "Add", null, list); @@ -3440,7 +3493,7 @@ SetMapInvalidate(); } - + } } private void 澧為噺淇濆瓨ToolStripMenuItem_Click(object sender, EventArgs e) @@ -3467,7 +3520,7 @@ } private void 璁句负鍏抽棴ToolStripMenuItem_Click(object sender, EventArgs e) { - selectedObjs.ForEach(obj => { if (obj is LinkViewModel link) link.Status =Hydro.Core.ObjectEnum. StatusType.CLOSED; }); + selectedObjs.ForEach(obj => { if (obj is LinkViewModel link) link.Status = Hydro.Core.ObjectEnum.StatusType.CLOSED; }); SetMapInvalidate(); } private void 鏄剧ず鍏ㄩ儴妤煎眰ToolStripMenuItem_Click(object sender, EventArgs e) @@ -3781,11 +3834,11 @@ string tagstring = i.ToString() + "妤�"; if (tags.Contains(tagstring)) { - var item=ToolStripMenuItem_Floor.DropDownItems.Add(i.ToString() + "妤�"); + var item = ToolStripMenuItem_Floor.DropDownItems.Add(i.ToString() + "妤�"); item.Click += (oo, ee) => { - - + + mapobjects.ForEach(o => { if (o.Tags.Contains(tagstring)) @@ -3824,30 +3877,30 @@ { _isShowDirection = !_isShowDirection; } - bool _isShowDirection=false; + bool _isShowDirection = false; private void 棰滆壊鍒嗙骇绠$悊ToolStripMenuItem_Click(object sender, EventArgs e) { Form_Colour form_Colour = new Form_Colour(_Template.Colours); form_Colour.Show(this); } - - private bool __needpaintall=false; - - + private bool __needpaintall = false; + + + private void cb_Link_Colour_SelectedIndexChanged(object sender, EventArgs e) { if (_Template == null) return; - - var type = cb_Link_Colour.SelectedItem==null?ColourType.绠$嚎娴侀噺:(ColourType)cb_Link_Colour.SelectedItem; + + var type = cb_Link_Colour.SelectedItem == null ? ColourType.绠$嚎娴侀噺 : (ColourType)cb_Link_Colour.SelectedItem; mapOption.ColourLink = type; this.SetMapInvalidate(); } private void cb_Node_Colour_SelectedIndexChanged(object sender, EventArgs e) { if (_Template == null) return; - - var type = cb_Node_Colour.SelectedItem==null?ColourType.鑺傜偣鑷敱鍘嬪姏:(ColourType)cb_Node_Colour.SelectedItem; + + var type = cb_Node_Colour.SelectedItem == null ? ColourType.鑺傜偣鑷敱鍘嬪姏 : (ColourType)cb_Node_Colour.SelectedItem; mapOption.ColourNode = type; this.SetMapInvalidate(); } @@ -3860,7 +3913,7 @@ private void 妤煎眰绠$悊ToolStripMenuItem_Click(object sender, EventArgs e) { - if (_Template.Regions==null) + if (_Template.Regions == null) { _Template.Regions = new List<TRegion>(); } @@ -3868,9 +3921,9 @@ form_EditFloors.Show(this); } - - + + #endregion } } \ No newline at end of file -- Gitblit v1.9.3