cloudflight
2024-05-07 2646029d2b97f6835062d45d2cfa632838c527ca
WinfrmUI/Hydro.WinfrmUI.Browser/Viewer.Model.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,417 @@

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 æ ¸å¿ƒå±žæ€§
        TContainer TC = new TContainer();
        /// <summary>
        /// åœ°å›¾é€‰é¡¹
        /// </summary>
        public MapDimensions mapOption
        {
            get { return TC.mapOption; }
            set { TC.mapOption = value; }
        }
        /// <summary>
        /// åœ°å›¾é€‰é¡¹_起始操作时
        /// </summary>
        private MapDimensions mapOption0 = new MapDimensions();
        /// <summary>
        /// ä¸´æ—¶ç®¡ç½‘层
        /// </summary>
        [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 äº¤äº’属性
        /// <summary>
        /// æ‚¬åœå¯¹è±¡
        /// </summary>
        private List<IBaseViewModel> hoveredObjs = new List<IBaseViewModel>();
        /// <summary>
        /// é€‰ä¸­å¯¹è±¡
        /// </summary>
        public List<IBaseViewModel> selectedObjs = new List<IBaseViewModel>();
        private List<NodeViewModel> selectedNodes => selectedObjs.FindAll(o => o is NodeViewModel).Select(o => (NodeViewModel)o).ToList();
        private List<LinkViewModel> 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;
        /// <summary>
        /// æ‹–拽选择
        /// </summary>
        bool _isDragging;
        bool _isRotating;
        bool _isPainting;
        PointF mousePosition;
        // control+鼠标中间按下缩放
        bool _isInsertingObject = false;
        bool _isMovingObject = false;
        bool _isPastingObject = false;
        System.Windows.Forms.Cursor _lastCursor;
        object _undoOldValue = null;
        private List<PointF> polygonPoints = new List<PointF>();
        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 __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;
            }
        }
        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<NodeCalcModel> _Nodes
        {
            get { return _Network?.Nodes??new List<NodeCalcModel>(); }
        }
        [Browsable(false)]
        public List<LinkCalcModel> _Links
        {
            get { return _Network?.Links??new List<LinkCalcModel>(); }
        }
        private List<Area> _areas = new List<Area>();
        [Browsable(false)]
        public List<Area> _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;
        double ä¿¯è§†è§’度_start = 90;
        public bool Lock2DView
        {
            get
            {
                return mapOption.Lock2DView;
            }
            set
            {
                mapOption.Lock2DView = value;
            }
        }
        /// <summary>
        /// ä¿¯è§†çº¿ä¸Žåº•面的夹角,投影用sin
        /// </summary>
        [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 é¢œè‰²åˆ†çº§ï¼ˆè¾…助)
        Colour _NodeColour
        {
            get
            {
                return _Template?.Colours?.FirstOrDefault(cl => cl.isChoosed && cl.Type == mapOption.ColourNode);
            }
        }
        Colour _LinkColour
        {
            get
            {
                return _Template?.Colours?.FirstOrDefault(cl => cl.isChoosed && cl.Type == mapOption.ColourLink);
            }
        }
        //private bool __isOrtho = true;
        #endregion
        #region æ­£äº¤æ¨¡å¼
        public Action<bool> OnChangeViewOrtho = null;
        private bool _isOrtho
        {
            get
            {
                return mapOption.IsOrtho;
            }
            set
            {
                mapOption.IsOrtho = value;
                if(OnChangeViewOrtho != null)
                {
                    OnChangeViewOrtho.Invoke(mapOption.IsOrtho);
                }
            }
        }
        #endregion
        #region äº‹ä»¶
        //按帧数判断是否重绘,减少计算量(每帧最多重绘一次)
        bool _timerDraw = false;
        //按帧数判断鼠标悬停对象,减少计算量(每帧最多判断一次)
        bool _mouseHoverCheckFlag = false;
        #endregion
    }
}