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
}
}