using Hydro.Core.Model; using Hydro.MapView; using Hydro.MapView.Base; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Common; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Numerics; using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; using static Hydro.MapView.MapViewEnum; using static System.Net.Mime.MediaTypeNames; using static System.Windows.Forms.AxHost; using static System.Windows.Forms.LinkLabel; using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar; namespace Hydro.WinfrmUI { public class TContainer { public MapDimensions mapOption = new MapDimensions(); public Template newTemplate = null; public Template template = null; } public partial class ViewBrowser { #region 核心属性 private TContainer TC = new TContainer(); /// /// 地图选项 /// public MapDimensions mapOption { get { return TC.mapOption; } set { TC.mapOption = value; } } /// /// 地图选项_起始操作时 /// private MapDimensions mapOption0 = new MapDimensions(); /// /// 临时管网层 /// [Browsable(false)] public Template _newTemplate { get { return TC.newTemplate; } set { TC.newTemplate = value; } } [Browsable(false)] public Template _Template { get { return TC.template; } set { TC.template = value; } } #endregion 核心属性 #region 交互属性 /// /// 悬停对象 /// private List hoveredObjs = new List(); /// /// 选中对象 /// public List selectedObjs = new List(); private List selectedNodes => selectedObjs.FindAll(o => o is NodeViewModel).Select(o => (NodeViewModel)o).ToList(); private List selectedLinks => selectedObjs.FindAll(o => o is LinkViewModel).Select(o => (LinkViewModel)o).ToList(); private MouseState _mouseState = MouseState.无; private NodeViewModel _OperaNode = null; public PointF mouseXY = new PointF(0, 0); private PointF DragStartPos; private PointF _ClickStartPos; private PointF RotaStartPos; private PointF BackGroudPicLeftPos; private bool _isPanning; /// /// 拖拽选择 /// private bool _isDragging; private bool _isRotating; private bool _isPainting; private PointF mousePosition; // control+鼠标中间按下缩放 private bool _isInsertingObject = false; private bool _isMovingObject = false; private bool _isPastingObject = false; private System.Windows.Forms.Cursor _lastCursor; private object _undoOldValue = null; private List polygonPoints = new List(); private bool _isDrawingPolygon; #endregion 交互属性 #region 新增管网(辅助) private MapViewNetWork _NewNet { get { if (_newTemplate == null) _newTemplate = new Template(); if (_newTemplate.network == null) _newTemplate.network = new MapViewNetWork(); return _newTemplate.network; } } #endregion 新增管网(辅助) #region 显示选项(辅助) private string _StartPoint = null; private string _EndPoint = null; private bool __isEditMode = true; [Browsable(false)] public bool _IsEditMode { get { return __isEditMode; } set { __isEditMode = value; toolStripComboBox_浏览模式.Text = __isEditMode ? "编辑模式" : "浏览模式"; } } [Browsable(false)] public float Link_multiply { get { if (_Template == null || _Template.mapOption == null) return 1.0f; return _Template.mapOption.Link_multiply; } set { if (_Template == null || _Template.mapOption == null) return; _Template.mapOption.Link_multiply = value; } } [Browsable(false)] public float junction_multiply { get { if (_Template == null || _Template.mapOption == null) return 1.0f; return _Template.mapOption.junction_multiply; } set { if (_Template == null || _Template.mapOption == null) return; _Template.mapOption.junction_multiply = value; } } [DisplayName("显示阀门")] public bool _ShowValve { get { if (_Template == null || _Template.mapOption == null) return true; return _Template.mapOption._ShowValve; } set { if (_Template == null || _Template.mapOption == null) return; _Template.mapOption._ShowValve = value; } } [DisplayName("显示节点")] public bool _ShowJunction { get { if (_Template == null || _Template.mapOption == null) return true; return _Template.mapOption._ShowJunction; } set { if (_Template == null || _Template.mapOption == null) return; _Template.mapOption._ShowJunction = value; } } private string _filePath { get { if (string.IsNullOrEmpty(_Template?.filePath)) return null; string path = _Template.filePath.TrimStart('\\'); return Path.Combine(Directory.GetCurrentDirectory(), path); } //set //{ // _Template.路径 = value; //} } public MapViewNetWork _Network { get { return _Template?.network; } } #endregion 显示选项(辅助) #region 管网属性(辅助) [Browsable(false)] public List _Nodes { get { return _Network?.Nodes ?? new List(); } } [Browsable(false)] public List _Links { get { return _Network?.Links ?? new List(); } } private List _areas = new List(); [Browsable(false)] public List _Areas { get { return _areas; } } #endregion 管网属性(辅助) #region 视角设置(辅助) private const float MinZoom = 0.1f; private const float MaxZoom = 1000.0f; [DisplayName("缩放系数")] public float zoom { get { return mapOption.zoom; } set { if (OnChangeViewZoom != null) { OnChangeViewZoom.Invoke(zoom); } mapOption.zoom = value; } } [DisplayName("旋转角度")] public double Rotation { get { return mapOption.rotation; } set { if (OnChangeViewRotation != null) { OnChangeViewRotation.Invoke(Rotation, RotationF); } mapOption.rotation = value; } } private double Rotation0 = 0; [Browsable(false)] public PointF MapCenter { get { return mapOption.Center; } set { if (OnChangeViewCenter != null) { OnChangeViewCenter.Invoke(MapCenter); } mapOption.Center = value; } } private PointF MapCenter0; private bool is3Dview = false; private double 俯视角度_start = 90; public bool Lock2DView { get { return mapOption.Lock2DView; } set { mapOption.Lock2DView = value; } } /// /// 俯视线与底面的夹角,投影用sin /// [DisplayName("俯视角度")] public double RotationF { get { return mapOption.rotationF; } set { mapOption.rotationF = value; } } [Browsable(false)] public double 俯视弧度 { get { return RotationF / 180 * Math.PI; } } [Browsable(false)] public PointF Zoom { get { return new PointF(zoom, -zoom); } } private PointF Z(float z) { return new PointF(0, 0); } #endregion 视角设置(辅助) #region 颜色分级(辅助) private Colour _NodeColour { get { return _Template?.Colours?.FirstOrDefault(cl => cl.isChoosed && cl.Type == mapOption.ColourNode); } } private Colour _LinkColour { get { return _Template?.Colours?.FirstOrDefault(cl => cl.isChoosed && cl.Type == mapOption.ColourLink); } } //private bool __isOrtho = true; #endregion 颜色分级(辅助) #region 正交模式 public Action OnChangeViewOrtho = null; public bool IsOrtho { get { return mapOption.IsOrtho; } set { mapOption.IsOrtho = value; if (OnChangeViewOrtho != null) { OnChangeViewOrtho.Invoke(mapOption.IsOrtho); } } } #endregion 正交模式 #region 事件 //按帧数判断是否重绘,减少计算量(每帧最多重绘一次) private bool _timerDraw = false; //按帧数判断鼠标悬停对象,减少计算量(每帧最多判断一次) private bool _mouseHoverCheckFlag = false; #endregion 事件 } }