| | |
| | | //using CloudWaterNetwork.Magnifier; |
| | | using DevExpress.XtraEditors; |
| | | using Hydro.CommonBase; |
| | | using Hydro.Core.Model; |
| | | using Hydro.Inp; |
| | | using Hydro.MapUI.WindowsForm; |
| | | //using ConfigApp; |
| | | //using DevExpress.Diagram.Core.Layout; |
| | | //using DevExpress.DirectX.NativeInterop.Direct2D; |
| | | //using DevExpress.Utils.Extensions; |
| | | //using dict_py_Inner; |
| | | using Hydro.MapView; |
| | | using Hydro.MapView.Base; |
| | | using Hydro.MapView.Common; |
| | | using Newtonsoft.Json; |
| | | //using ReflectionManager_NameSpace; |
| | |
| | | using System.Runtime.Remoting.Metadata; |
| | | using System.Security.Cryptography; |
| | | using System.Text; |
| | | using System.Threading; |
| | | using System.Threading.Tasks; |
| | | using System.Windows.Forms; |
| | | using System.Windows.Forms.DataVisualization.Charting; |
| | |
| | | |
| | | //if (!showToolBar) this.panel1.Visible = false; |
| | | } |
| | | public MapViewer() |
| | | public MapViewer() |
| | | { |
| | | |
| | | this.showToolBar = false; |
| | |
| | | |
| | | 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; |
| | |
| | | |
| | | cb_Link_Colour.SelectedIndex = 0; |
| | | |
| | | <<<<<<< HEAD |
| | | map.Init(TC,new DrawDelegate[] { Draw, Draw, DrawBackGroud, DrawH },new MouseDelegate[] { mapMouseDown, mapMouseMove, mapMouseUp, mapMouseWheel }); |
| | | ======= |
| | | map.Init(TC, new DrawDelegate[] { Draw, Draw, DrawH }, new MouseDelegate[] { mapMouseDown, mapMouseMove, mapMouseUp, mapMouseWheel }); |
| | | |
| | | >>>>>>> 0f2ff322746347b91941d936ee27067295e57c76 |
| | | |
| | | |
| | | TContainer TCCube = new TContainer(); |
| | | TCCube.template = new Template(); |
| | | TCCube.template.network = new MapViewNetWork(); |
| | | TCCube.template.network.Areas = new List<AreaViewModel>(); |
| | | Cube cb=new Cube(); |
| | | foreach (var item in cb.FacesVertices) |
| | | { |
| | | AreaViewModel area = new AreaViewModel(); |
| | | area.ID = item.Key.ToString(); |
| | | area.InnerNodes = new List<NodeViewModel>(); |
| | | //area.Name= item.Key.ToString(); |
| | | |
| | | //6个面设置不一样的颜色 |
| | | switch (item.Key) |
| | | { |
| | | case 1: |
| | | area.color = Color.Red; |
| | | area.Name = "右"; |
| | | break; |
| | | case 2: |
| | | area.color = Color.SkyBlue; |
| | | area.Name = "左"; |
| | | break; |
| | | case 3: |
| | | area.color = Color.Green; |
| | | area.Name = "后"; |
| | | break; |
| | | case 4: |
| | | area.color = Color.DarkBlue; |
| | | area.Name = "前"; |
| | | break; |
| | | case 5: |
| | | area.color = Color.Purple; |
| | | area.Name = "上"; |
| | | break; |
| | | case 6: |
| | | area.color = Color.Orange; |
| | | area.Name = "下"; |
| | | break; |
| | | default: |
| | | area.color = Color.White; |
| | | break; |
| | | } |
| | | |
| | | foreach (var p in item.Value) |
| | | { |
| | | NodeViewModel node = new NodeViewModel(); |
| | | node.X = p.X; |
| | | node.Y = p.Y; |
| | | node.Elev = p.Z; |
| | | area.InnerNodes.Add(node); |
| | | } |
| | | TCCube.template.network.Areas.Add(area); |
| | | } |
| | | CubeView.Init(TCCube, new DrawDelegate[] { Draw, Draw, DrawBackGroud, DrawH }, new MouseDelegate[] { CubeViewMouseDown, CubeViewMouseMove, CubeViewMouseUp, mapMouseWheel }); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | public bool LoadData(bool isDelCache = false) |
| | | { |
| | | |
| | | |
| | | if (_Template == null) return false; |
| | | if (isDelCache || _Template.network == null) |
| | | { |
| | |
| | | bool reLoad = _Template == template; |
| | | this._Template = template; |
| | | this._ViewModel = viewMode; |
| | | |
| | | |
| | | |
| | | //if ( _Template?.Floors!=null) |
| | | //{ |
| | |
| | | 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")}"; |
| | |
| | | |
| | | #region 重绘函数 |
| | | |
| | | bool _needPaintAll |
| | | { |
| | | bool _needPaintAll |
| | | { |
| | | get |
| | | { |
| | | return __needpaintall; |
| | |
| | | __needpaintall = value; |
| | | } |
| | | } |
| | | <<<<<<< HEAD |
| | | |
| | | ======= |
| | | //protected override void OnPaint(PaintEventArgs e) |
| | | //{ |
| | | // base.OnPaint(e); |
| | | |
| | | // if (float.IsInfinity(zoom)) return; |
| | | |
| | | // //label_center.Text = $"center:({MapCenter.X.ToString("0.00")} ,{MapCenter.Y.ToString("0.00")})"; |
| | | // //label_zoom.Text = $"Zoom:{zoom.ToString("0.000")}"; |
| | | // //toolStripStatusLabel_rotation.Text = $"Rotation:({Rotation.ToString("0")},{RotationF.ToString("0")})"; |
| | | |
| | | // //if (!_needPaintAll) |
| | | // // return; |
| | | // int heightOfBar = showToolBar ? 24 : 0; |
| | | // if (!showToolBar) heightOfBar = 0; |
| | | |
| | | |
| | | |
| | | // if (e.ClipRectangle != new Rectangle(this.Left, heightOfBar, this.map.Width, this.map.Height - heightOfBar - statusStrip1.Height)) return; |
| | | |
| | | |
| | | // _needPaintAll = false; |
| | | // if (buffer == null || buffer.Width != Width || buffer.Height != Height) |
| | | // { |
| | | // buffer?.Dispose(); |
| | | // buffer = new Bitmap(Width, Height); |
| | | // } |
| | | // // 使用缓存绘制,避免在每次重绘时重新计算所有要绘制的元素 |
| | | |
| | | // //if (bufferG == null) bufferG = Graphics.FromImage(buffer); |
| | | // using (var bufferG = Graphics.FromImage(buffer)) |
| | | // //using (var bufferG = e.Graphics) |
| | | // { |
| | | // // 先将控件的背景填充为白色 |
| | | // bufferG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; |
| | | // bufferG.Clear(Color.Transparent); |
| | | // bufferG.TranslateTransform(Width / 2, Height / 2); |
| | | // bufferG.ScaleTransform(Zoom.X, Zoom.Y); |
| | | // bufferG.TranslateTransform(-MapCenter.X, -MapCenter.Y); |
| | | |
| | | // //if (_NodeColour==null) |
| | | // //{ |
| | | // // cb_Node_Colour_SelectedIndexChanged(1, new EventArgs()); |
| | | // //} |
| | | // //if (_LinkColour==null) |
| | | // //{ |
| | | // // cb_Link_Colour_SelectedIndexChanged(1, new EventArgs()); |
| | | // //} |
| | | // //BookMark :绘制地图事件 |
| | | // Draw(bufferG, _Template); |
| | | |
| | | |
| | | |
| | | // if (_newTemplate?.network != null) Draw(bufferG, _newTemplate); |
| | | |
| | | // var r = 2f / zoom; |
| | | // if (_isDragging && DragStartPos!=new PointF(0,0) && mousePosition!=new PointF(0,0)) |
| | | // { |
| | | // label_center.Text = $"S:{DragStartPos.X}:{DragStartPos.Y} E:{mousePosition.X}:{mousePosition.Y}"; |
| | | // var _lastMousePosition = DragStartPos; |
| | | // // 绘制矩形 |
| | | // var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | // var size = new SizeF((float)Math.Abs(_lastMousePosition.X - mousePosition.X), (float)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | // if (size.Width == 0) size.Width = 0.01f; |
| | | // if (size.Height == 0) size.Height = 0.01f; |
| | | // var rectangle0 = new RectangleF(start, size); |
| | | // using (var pen = new Pen(Color.Black, 0.5f * r)) |
| | | // { |
| | | // bufferG.DrawRectangles(pen, new RectangleF[] { rectangle0 }); |
| | | // } |
| | | // } |
| | | // if (_isPainting) |
| | | // { |
| | | // if (_mouseState == MouseState.新增立管) |
| | | // { |
| | | // var wPos=GetZZWorldPoint(_select_junction1.Position3D, _MousePosition,new Vector3(0,0,1)); |
| | | // using (var pen = new Pen(Color.Black, 1 * r)) |
| | | // { |
| | | // pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; |
| | | // bufferG.DrawLine(pen, WorldPointToMapPoint(_select_junction1), WorldPointToMapPoint(wPos)); |
| | | // } |
| | | // } |
| | | // else |
| | | // { |
| | | // using (var pen = new Pen(Color.Black, 1 * r)) |
| | | // { |
| | | // pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; |
| | | // bufferG.DrawLine(pen, WorldPointToMapPoint(_select_junction1), _MousePosition); |
| | | // } |
| | | // } |
| | | // } |
| | | // if (_isDrawingPolygon && polygonPoints.Count > 0) |
| | | // { |
| | | // List<PointF> pf = polygonPoints.ToList(); |
| | | // pf.Add(new PointF(mousePosition.X, mousePosition.Y)); |
| | | // using (var pen = new Pen(Color.Black, 1 * r)) |
| | | // { |
| | | // // 绘制多边形虚线边框 |
| | | // pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; |
| | | // bufferG.DrawLines(pen, pf.ToArray()); |
| | | // } |
| | | // } |
| | | // if (_isSettingBackGroundPictur) |
| | | // { |
| | | |
| | | // var _lastMousePosition = DragStartPos; |
| | | // // 绘制矩形 |
| | | // var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | // var size = new SizeF((float)Math.Abs(_lastMousePosition.X - mousePosition.X), (float)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | // var rectangle0 = new RectangleF(start, size); |
| | | // using (var pen = new Pen(Color.Black, 1 * r)) |
| | | // { |
| | | // bufferG.DrawRectangles(pen, new RectangleF[] { rectangle0 }); |
| | | // } |
| | | // } |
| | | |
| | | // if (_isMovingObject) |
| | | // { |
| | | // var newP = _MousePosition; |
| | | // //var p = MapPointToWorldPoint(, _OperaNode.Elev); |
| | | // var oldP3D = (PointF3D)_undoOldValue; |
| | | // var oldP = WorldPointToMapPoint(new PointF(oldP3D.X, oldP3D.Y), oldP3D.Z); |
| | | // List<PointF> pf = new List<PointF> { oldP, newP }; |
| | | // using (var pen = new Pen(Color.Black, 1 * r)) |
| | | // { |
| | | // // 绘制多边形虚线边框 |
| | | // pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; |
| | | // bufferG.DrawLines(pen, pf.ToArray()); |
| | | // } |
| | | // } |
| | | |
| | | // } |
| | | // // 将生成的画布绘制到控件上 |
| | | // e.Graphics.DrawImage(buffer, 0, 0); |
| | | |
| | | //} |
| | | >>>>>>> 0f2ff322746347b91941d936ee27067295e57c76 |
| | | |
| | | PointF[] getCurclePoints(int num) |
| | | { |
| | |
| | | return points; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | private void timer_draw_Tick(object sender, EventArgs e) |
| | | { |
| | | _mouseHoverCheckFlag = true; |
| | | if (_timerDraw && map.Status==DrawingStatus.Ready) |
| | | { |
| | | this.map.Invalidate(); |
| | | this.CubeView.Invalidate(); |
| | | _timerDraw = false; |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | #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) |
| | | { |
| | |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, list); |
| | | |
| | | |
| | | |
| | | |
| | | _isInsertingObject = false; |
| | | |
| | | <<<<<<< HEAD |
| | | |
| | | |
| | | _newTemplate.network = net0; |
| | | _isInsertingObject = true; |
| | | _undoOldValue = new PointF3D(0, 0, 0); |
| | | _OperaNode = _newTemplate.network.Nodes.Find(node => node.ID == _newTemplate.Node1) as NodeViewModel; |
| | | ======= |
| | | //_OperaNode = null; |
| | | //_Network.Nodes.AddRange(net.Nodes); |
| | | //_Network.Links.AddRange(net.Links); |
| | | >>>>>>> 0f2ff322746347b91941d936ee27067295e57c76 |
| | | |
| | | SetMapInvalidate(); |
| | | return; |
| | |
| | | NodeViewModel minNode = null; |
| | | foreach (NodeViewModel node in nodes) |
| | | { |
| | | |
| | | |
| | | PointF mapPos = WorldPointToMapPoint(node); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float currentDist = 0; |
| | |
| | | IBaseViewModel GetObj_by_ScreenPoint(PointF clickedPoint, float DistLimit = 15f) |
| | | { |
| | | float minDist = float.MaxValue; |
| | | |
| | | |
| | | int minIndex = -1; |
| | | bool isJunction = true; |
| | | IBaseViewModel obj = null; |
| | |
| | | obj = link; |
| | | } |
| | | } |
| | | |
| | | return obj; |
| | | } |
| | | |
| | |
| | | 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; |
| | |
| | | //float dist = Get_dist(clickedPoint, currentPoint); |
| | | if (dist < minDist && dist <= DistLimit) |
| | | { |
| | | |
| | | |
| | | |
| | | objs.Add(link); |
| | | } |
| | |
| | | |
| | | private int _lastMouseX; |
| | | private int _lastMouseY; |
| | | #endregion |
| | | |
| | | #region CubeView鼠标事件 |
| | | void CubeViewMouseDown(MouseEventArgs e) |
| | | { |
| | | base.OnMouseDown(e); |
| | | |
| | | _ClickStartPos = 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) |
| | | { |
| | | |
| | | } |
| | | else if (e.Button == MouseButtons.Left && _mouseState == MouseState.无) |
| | | { |
| | | |
| | | } |
| | | |
| | | else if (e.Button == MouseButtons.Left && _mouseState == MouseState.设置底图范围) |
| | | { |
| | | |
| | | } |
| | | else if (e.Button == MouseButtons.Right) |
| | | { |
| | | RotaStartPos = new PointF(e.X, e.Y); |
| | | Rotation0 = Rotation; |
| | | 俯视角度_start = RotationF; |
| | | _lastCursor = this.Cursor; |
| | | |
| | | Cursor = Cursors.Hand; |
| | | mapOption0 = mapOption.Copy(); |
| | | _isRotating = true; |
| | | } |
| | | |
| | | } |
| | | void CubeViewMouseMove(MouseEventArgs e) |
| | | { |
| | | //base.OnMouseMove(e); |
| | | bool needInvalidate = false; |
| | | _MousePosition = ScreenToMap(new PointF(e.X, e.Y)); |
| | | |
| | | |
| | | if (_isRotating) |
| | | { |
| | | mousePosition = _MousePosition; |
| | | bool is下半屏幕 = RotaStartPos.Y >= this.map.Height / 2; |
| | | if (ModifierKeys != Keys.Alt) Rotation = Rotation0 + ((float)e.X - (float)RotaStartPos.X) * 180 * 2.5 / (float)this.map.Width * (is下半屏幕 ? 1 : 1); |
| | | if (ModifierKeys != Keys.Shift) RotationF = 俯视角度_start + ((float)e.Y - (float)RotaStartPos.Y) * 180 * 2.5 / (float)this.map.Height; |
| | | if (RotationF > 90) RotationF = 90; |
| | | if (RotationF < 0) RotationF = 0; |
| | | needInvalidate = true; |
| | | |
| | | } |
| | | |
| | | //else |
| | | /*判断是否触碰到对象*/ |
| | | if (_mouseHoverCheckFlag) |
| | | { |
| | | _mouseHoverCheckFlag = false; |
| | | // 遍历所有对象,找出范围内的对象 |
| | | 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) |
| | | { |
| | | //needInvalidate = false; |
| | | } |
| | | else |
| | | { |
| | | needInvalidate = true; |
| | | hoveredObjs.ForEach(o => o.Hovered = false); |
| | | hoveredObjs.Clear(); |
| | | if (obj != null) |
| | | { |
| | | obj.Hovered = true; |
| | | hoveredObjs.Add(obj); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | if (needInvalidate) this.SetMapInvalidate(); |
| | | label_mouse.Text = $"X:{e.X.ToString("0")} Y:{e.Y.ToString("0")} [Map]X:{_MousePosition.X.ToString("0.00")} Y:{_MousePosition.Y.ToString("0.00")}"; |
| | | _lastMouseX = e.X; |
| | | _lastMouseY = e.Y; |
| | | } |
| | | void CubeViewMouseUp(MouseEventArgs e) |
| | | { |
| | | //BookMark :鼠标抬起事件 |
| | | base.OnMouseUp(e); |
| | | bool isMouseMoved = Get_dist(_ClickStartPos, new PointF(e.X, e.Y)) > 10; |
| | | bool isdoubleClick = (DateTime.Now - _lastMouseUp).TotalMilliseconds <= doubleClick_Delay; |
| | | _lastMouseUp = DateTime.Now; |
| | | |
| | | if /*点选*/(!isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left && ModifierKeys == Keys.None) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | // 遍历所有点,找出最近的点 |
| | | PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); |
| | | var obj = GetObj_by_ScreenPoint(clickedPoint); |
| | | bool isJunction = obj is NodeViewModel; |
| | | |
| | | if (obj != null) |
| | | { |
| | | selectedObjs.ForEach(o => o.Selected = false); |
| | | selectedObjs.Clear(); |
| | | obj.Selected = true; |
| | | selectedObjs.Add(obj); |
| | | if (GlobalObject.PropertyForm != null) |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | _OperaNode = null; |
| | | |
| | | |
| | | SetMapInvalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | //GlobalObject.LockSelect |
| | | |
| | | selectedObjs.ForEach(o => o.Selected = false); |
| | | selectedObjs.Clear(); |
| | | if (GlobalObject.PropertyForm != null) |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | |
| | | _OperaNode = null; |
| | | |
| | | SetMapInvalidate(); |
| | | } |
| | | return; |
| | | |
| | | |
| | | } |
| | | |
| | | if (/*叠加点选*/!isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left && ModifierKeys == Keys.Control) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | // 遍历所有点,找出最近的点 |
| | | PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); |
| | | var obj = GetObj_by_ScreenPoint(clickedPoint); |
| | | bool isJunction = obj is NodeViewModel; |
| | | if (obj != null) |
| | | { |
| | | if (selectedObjs.Contains(obj)) |
| | | { |
| | | obj.Selected = false; |
| | | selectedObjs.Remove(obj); |
| | | if (GlobalObject.PropertyForm != null) |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | |
| | | SetMapInvalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | else |
| | | { |
| | | obj.Selected = true; |
| | | selectedObjs.Add(obj); |
| | | if (GlobalObject.PropertyForm != null) |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | SetMapInvalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | if (e.Button == MouseButtons.Right) |
| | | { |
| | | if (_isRotating) |
| | | { |
| | | _isRotating = false; |
| | | this.Cursor = _lastCursor; |
| | | |
| | | |
| | | if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #endregion 一、全局 |
| | |
| | | } |
| | | private void 默认视角ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | |
| | | |
| | | |
| | | mapOption0 = mapOption.Copy(); |
| | | |
| | | |
| | | InitCenter(); |
| | | RotationF = 45; |
| | | Rotation = -45; |
| | |
| | | { |
| | | _Template = new Template(); |
| | | _Template.network = new MapViewNetWork(); |
| | | |
| | | |
| | | |
| | | |
| | | //_Template.network.use_old = false; |
| | | // 获取选中文件的文件路径 |
| | | string filePath = openFileDialog.FileName; |
| | |
| | | { |
| | | if (_filePath == null) return; |
| | | FileInfo fi = new FileInfo(_filePath); |
| | | Process.Start("explorer.exe", $"/select,\"{_filePath}\""); |
| | | System.Diagnostics.Process.Start("explorer.exe", $"/select,\"{_filePath}\""); |
| | | //System.Diagnostics.Process.Start("explorer.exe", fi.Directory.FullName); |
| | | } |
| | | private void EPA中打开ToolStripMenuItem_Click(object sender, EventArgs e) |
| | |
| | | if (_filePath == null) return; |
| | | |
| | | |
| | | Process.Start(@"epanetH\Epanet2wH.exe", _filePath); |
| | | System.Diagnostics.Process.Start(@"epanetH\Epanet2wH.exe", _filePath); |
| | | } |
| | | private void 保存ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | |
| | | #region 绘图工具 |
| | | |
| | | |
| | | |
| | | |
| | | public void toolStripButton_新建节点_Click(object sender, EventArgs e) |
| | | { |
| | | _mouseState = MouseState.新增节点; |
| | |
| | | _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; |
| | |
| | | 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)); |
| | |
| | | |
| | | 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; |
| | |
| | | } |
| | | |
| | | |
| | | private void btn_初分配_Click(object sender, EventArgs e) |
| | | { |
| | | if (_Network == null) return; |
| | | //btn_拓扑检查_Click(1,null); |
| | | List<WaterEquivalentSettings> settings = new List<WaterEquivalentSettings>(); |
| | | settings.Add(new WaterEquivalentSettings() |
| | | { |
| | | waterEquivalents=new WaterEquivalentTemplate() |
| | | { |
| | | ID="1", |
| | | Name="1", |
| | | WaterEquivalentCollection=new WaterEquivalentCollection() |
| | | { |
| | | new WaterEquivalent() |
| | | { |
| | | ID=1008, |
| | | MinRatedFlow=0.48f, |
| | | RatedFlow=0.72f, |
| | | Count=1, |
| | | }, |
| | | //new WaterEquivalent() |
| | | //{ |
| | | // ID=1009, |
| | | // MinRatedFlow=0.88f, |
| | | // RatedFlow=0.96f, |
| | | // Count=2, |
| | | //}, |
| | | //new WaterEquivalent() |
| | | //{ |
| | | // ID=1010, |
| | | // MinRatedFlow=1.08f, |
| | | // RatedFlow=1.08f, |
| | | // Count=3, |
| | | //} |
| | | } |
| | | }, |
| | | Meters=new List<string>() |
| | | { |
| | | //按以下规律生成数组到M10,"M1","M2" |
| | | |
| | | "M0","M1","M2","M3","M4","M5","M6" |
| | | }, |
| | | }); |
| | | |
| | | |
| | | //settings.Add(new WaterEquivalentSettings() |
| | | //{ |
| | | // waterEquivalents = new WaterEquivalentTemplate() |
| | | // { |
| | | // ID = "1", |
| | | // Name = "1", |
| | | // WaterEquivalentCollection = new WaterEquivalentCollection() |
| | | // { |
| | | // new WaterEquivalent() |
| | | // { |
| | | // ID=2008, |
| | | // MinRatedFlow=0.48f, |
| | | // RatedFlow=0.48f, |
| | | // Count=1, |
| | | // }, |
| | | // new WaterEquivalent() |
| | | // { |
| | | // ID=2009, |
| | | // MinRatedFlow=0.12f, |
| | | // RatedFlow=0.12f, |
| | | // Count=5, |
| | | // }, |
| | | // new WaterEquivalent() |
| | | // { |
| | | // ID=2010, |
| | | // MinRatedFlow=0.16f, |
| | | // RatedFlow=0.18f, |
| | | // Count=6, |
| | | // } |
| | | // } |
| | | // }, |
| | | // Meters = new List<string>() |
| | | // { |
| | | // //按以下规律生成数组到M10,"M1","M2" |
| | | |
| | | // "M31","M32","M33","M34","M35","M36","M37","M38","M39","M40","M41","M42","M43","M44","M45","M46","M47","M48","M49","M50","M51","M52","M53","M54","M55","M56","M57","M58","M59","M60","M61","M62","M63","M64","M65","M66","M67","M68","M69","M70","M71","M72","M73","M74","M75","M76","M77","M78","M79","M80" |
| | | // }, |
| | | //}); |
| | | var head=_Network.reservoirs.FirstOrDefault().Head; |
| | | _Network.WaterDistribution(_Template.FullPath, GlobalPath.configPath + "config_waterDistri.wdb",settings,4, head); |
| | | |
| | | } |
| | | public void btn_拓扑检查_Click(object sender, EventArgs e) |
| | | { |
| | | Dictionary<string,List<string>> result = _Template.network.CheckValidate(); |
| | | if (result.Count>0) |
| | | { |
| | | ResultForm resultForm = new ResultForm(); |
| | | ListBox listBox1 = resultForm.listBox1; |
| | | |
| | | listBox1.Items.AddRange(result.Keys.ToArray()); |
| | | listBox1.SelectedIndexChanged += (s, ee) => |
| | | { |
| | | //listBox2.Items.Clear(); |
| | | if (listBox1.SelectedIndex >= 0) |
| | | { |
| | | var arr=result[listBox1.SelectedItem.ToString()].ToHashSet(); |
| | | |
| | | List<IBaseViewModel> Objs = new List<IBaseViewModel>(); |
| | | Objs.AddRange(_Nodes.Select(n => (NodeViewModel)n)); |
| | | Objs.AddRange(_Links.Select(l => (LinkViewModel)l)); |
| | | var nodes = _Nodes.FindAll(o => arr.Contains(o.ID)); |
| | | var links = _Links.FindAll(o => arr.Contains(o.ID)); |
| | | //listBox2.Items.AddRange(result[listBox1.SelectedItem.ToString()].ToArray()); |
| | | selectedObjs.ForEach(obj => obj.Selected = false); |
| | | selectedObjs.Clear(); |
| | | nodes.ForEach(obj => |
| | | { |
| | | obj.Selected = true; |
| | | selectedObjs.Add((NodeViewModel)obj); |
| | | }); |
| | | links.ForEach(obj => |
| | | { |
| | | obj.Selected = true; |
| | | selectedObjs.Add((LinkViewModel)obj); |
| | | }); |
| | | if (GlobalObject.PropertyForm != null) |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | SetMapInvalidate(); |
| | | } |
| | | }; |
| | | |
| | | |
| | | |
| | | resultForm.Text = "拓扑检查结果"; |
| | | resultForm.Show(); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | MessageBox.Show("拓扑检查通过"); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | public void toolStripButton_计算_Click(object sender, EventArgs e) |
| | | { |
| | | //LoadData(); |
| | | _Network.Calc(_Template.FullPath, GlobalPath.configPath + "config_calc.wdb"); |
| | | if (_Template==null) |
| | | { |
| | | MessageBox.Show("请先打开文件"); |
| | | return; |
| | | } |
| | | _Network.Calc(_Template.FullPath, GlobalPath.configPath+ "config_calc.wdb"); |
| | | } |
| | | |
| | | public void 关阀搜索ToolStripMenuItem_Click(object sender, EventArgs e) |
| | |
| | | |
| | | // } |
| | | //} |
| | | 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>(); |
| | |
| | | { |
| | | |
| | | 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>(); |
| | |
| | | { |
| | | |
| | | 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; |
| | |
| | | MessageBox.Show("请选择要复制的对象"); |
| | | return; |
| | | } |
| | | |
| | | |
| | | _OperaNode = hoveredObjs[0] as NodeViewModel; |
| | | |
| | | MapViewNetWork net = new MapViewNetWork(); |
| | |
| | | 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; |
| | |
| | | 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 => |
| | | { |
| | |
| | | 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); |
| | |
| | | SetMapInvalidate(); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | | } |
| | | private void 增量保存ToolStripMenuItem_Click(object sender, EventArgs e) |
| | |
| | | } |
| | | 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) |
| | |
| | | { |
| | | var backgroundImagePath = openFileDialog.FileName; |
| | | Global.ClearFileReadOnly(_Template.BackGroundImg_FullPath); |
| | | File.Copy(backgroundImagePath, _Template.BackGroundImg_FullPath, true); |
| | | FileCopy.Copy(backgroundImagePath, _Template.BackGroundImg_FullPath, true); |
| | | 设置底图ToolStripMenuItem_Click(1, new EventArgs()); |
| | | } |
| | | } |
| | |
| | | { |
| | | if (_filePath == null) return; |
| | | FileInfo fi = new FileInfo(_filePath); |
| | | Process.Start("explorer.exe", $"/select,\"{_filePath}\""); |
| | | System.Diagnostics.Process.Start("explorer.exe", $"/select,\"{_filePath}\""); |
| | | } |
| | | private void label_file_Click(object sender, EventArgs e) |
| | | { |
| | | if (_filePath == null) return; |
| | | FileInfo fi = new FileInfo(_filePath); |
| | | Process.Start("explorer.exe", $"/select,\"{_filePath}\""); |
| | | System.Diagnostics.Process.Start("explorer.exe", $"/select,\"{_filePath}\""); |
| | | } |
| | | private void 设为立管点ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | |
| | | 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)) |
| | |
| | | { |
| | | _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,_Template); |
| | | 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; |
| | | mapOption.ColourLink = type; |
| | | var doubles = _Template.network.getMinMax(type); |
| | | var colour = new Colour(type, null, type.ToString()); |
| | | List<ColourItem> colours = Colour.GetColourItems((float)doubles[0], (float)doubles[1], 5, Color.Gray, Color.Red); |
| | | colour.Items = colours; |
| | | LinkColour = colour; |
| | | 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; |
| | | mapOption.ColourNode = type; |
| | | var doubles = _Template.network.getMinMax(type); |
| | | var colour = new Colour(type, null, type.ToString()); |
| | | List<ColourItem> colours = Colour.GetColourItems((float)doubles[0], (float)doubles[1], 5, Color.Gray, Color.Red); |
| | | colour.Items = colours; |
| | | NodeColour = colour; |
| | | this.SetMapInvalidate(); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | private void label_ZZ_Click(object sender, EventArgs e) |
| | |
| | | |
| | | private void 楼层管理ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | if (_Template.Regions == null) |
| | | if (_Template.Regions==null) |
| | | { |
| | | _Template.Regions = new List<TRegion>(); |
| | | } |
| | |
| | | form_EditFloors.Show(this); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | #endregion |
| | | } |
| | | } |