using System.Data; using static Hydro.MapViewEnum; using Cursor = System.Windows.Forms.Cursor; namespace Hydro { public partial class empty { } public class TContainer { public MapDimensions mapOption = new MapDimensions(); public Template newTemplate = null; public Template template = null; } public partial class MapViewer { #region 核心属性 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; label_file.Text = TC.template?.filePath; } } #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(); MouseState _mouseState = MouseState.无; private NodeViewModel _OperaNode = null; public PointF mouseXY = new PointF(0, 0); PointF DragStartPos; PointF _ClickStartPos; PointF RotaStartPos; PointF BackGroudPicLeftPos; bool _isPanning; /// /// 拖拽选择 /// bool _isDragging; bool _isRotating; bool _isPainting; PointF mousePosition; // control+鼠标中间按下缩放 bool _isInsertingObject = false; bool _isMovingObject = false; bool _isPastingObject = false; Cursor _lastCursor; object _undoOldValue = null; private List polygonPoints = new List(); private bool _isDrawingPolygon; #endregion #region 新增管网(辅助) 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 this.mapOption?.isEditMode??true; } set { toolStripComboBox_浏览模式.Text = value ? "编辑模式" : "浏览模式"; if (this.mapOption!=null) this.mapOption.isEditMode = value; 转换为ToolStripMenuItem.Visible = _IsEditMode; toolStripSeparator9.Visible = _IsEditMode; 删除ToolStripMenuItem.Visible = _IsEditMode; 删除ToolStripMenuItem1.Visible = _IsEditMode; 复制ToolStripMenuItem.Visible = _IsEditMode; 复制ToolStripMenuItem1.Visible = _IsEditMode; 粘贴ToolStripMenuItem.Visible = _IsEditMode; 粘贴ToolStripMenuItem1.Visible = _IsEditMode; 设置长度ToolStripMenuItem.Visible = _IsEditMode; 设为关闭ToolStripMenuItem.Visible = _IsEditMode; 设为立管点ToolStripMenuItem.Visible = _IsEditMode; 对齐ToolStripMenuItem.Visible = _IsEditMode; 对齐ToolStripMenuItem1.Visible = _IsEditMode; toolStripButton_新建节点.Enabled = _IsEditMode; toolStripButton_新建管线.Enabled = _IsEditMode; toolStripButton_新建立管.Enabled = _IsEditMode; toolStripButton_添加水库.Enabled = _IsEditMode; toolStripButton_添加水池.Enabled = _IsEditMode; toolStripButton_添加水表.Enabled = _IsEditMode; toolStripButton_添加阀门.Enabled = _IsEditMode; toolStripButton_重复器.Enabled = _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; } } string _filePath { get { if (string.IsNullOrEmpty(_Template?.filePath)) return null; string path=_Template.filePath.TrimStart('\\'); return Path.Combine(Directory.GetCurrentDirectory(), path); } //set //{ // _Template.路径 = value; //} } private 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 { label_zoom.Text = $"Zoom:{zoom.ToString("0.000")}"; mapOption.zoom = value; } } [DisplayName("旋转角度")] public double Rotation { get { return mapOption.rotation; } set { toolStripStatusLabel_rotation.Text = $"Rotation:({Rotation.ToString("0")},{RotationF.ToString("0")})"; //将旋转角度转换为-180~180 value = value % 360; if (value > 180) value -= 360; else if (value < -180) value += 360; mapOption.rotation = value; } } private double Rotation0 = 0; [Browsable(false)] public PointF MapCenter { get { return mapOption.Center; } set { label_center.Text = $"center:({MapCenter.X.ToString("0.00")} ,{MapCenter.Y.ToString("0.00")})"; mapOption.Center = value; } } private PointF MapCenter0; private bool is3Dview = false; 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 颜色分级(辅助) public Colour NodeColour { set { var type = value.Type; value.isChoosed = true; _Template?.Colours?.RemoveAll(cl => cl.Type == type); _Template.Colours.Add(value); mapOption.ColourNode = type; } private get { return _Template?.Colours?.FirstOrDefault(cl => cl.isChoosed && cl.Type == mapOption.ColourNode); } } public Colour LinkColour { set { var type = value.Type; value.isChoosed = true; _Template?.Colours?.RemoveAll(cl => cl.Type == type); _Template.Colours.Add(value); mapOption.ColourLink = type; } private get { return _Template?.Colours?.FirstOrDefault(cl => cl.isChoosed && cl.Type == mapOption.ColourLink); } } //private bool __isOrtho = true; #endregion #region 正交模式 private bool _isOrtho { get { return mapOption.IsOrtho; } set { mapOption.IsOrtho = value; if (mapOption.IsOrtho) { label_ZZ.Text = "正交模式:开"; } else { label_ZZ.Text = "正交模式:关"; } } } #endregion #region 事件 //按帧数判断是否重绘,减少计算量(每帧最多重绘一次) bool _timerDraw = false; //按帧数判断鼠标悬停对象,减少计算量(每帧最多判断一次) bool _mouseHoverCheckFlag = false; #endregion } }