using Hydro.Model;
|
using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Drawing.Design;
|
using System.Linq;
|
using System.Numerics;
|
using System.Text;
|
using System.Threading;
|
using System.Threading.Tasks;
|
using Yw.WinFrmUI.Q3d;
|
using static Yw.WinFrmUI.Q3d.MapViewEnum;
|
|
namespace Yw.WinFrmUI.Q3d
|
{
|
[Serializable]
|
public class NodeViewModel : Q3DNodeCalcModel, IBaseViewModel
|
{
|
#region 构造函数
|
public NodeViewModel()
|
{
|
}
|
public NodeViewModel(PointF position)
|
{
|
Position = position;
|
}
|
public NodeViewModel(int X, int Y)
|
{
|
Position = new PointF(X, Y);
|
}
|
#endregion
|
|
#region 属性
|
|
|
[Category("基本信息")]
|
[DisplayName("编号")]
|
[Browsable(true)]
|
public new string ID { get { return base.ID; } set { base.ID = value; } }
|
|
[Category("基本信息")]
|
[DisplayName("名称")]
|
[Browsable(true)]
|
public new string Name { get { return base.Name; } set { base.Name = value; } }
|
|
[Browsable(false)]
|
public PointF3D Position3D
|
{
|
get
|
{
|
return new PointF3D(X, Y, Z);
|
}
|
set
|
{
|
Position = new PointF(value.X, value.Y);
|
Z = value.Z;
|
}
|
|
}
|
|
[Category("基本信息")]
|
[Description("X坐标")]
|
[DisplayName("X坐标")]
|
[Browsable(true)]
|
public new float X
|
{
|
get
|
{
|
return base.X;
|
}
|
set
|
{
|
base.X = value;
|
}
|
}
|
[Category("基本信息")]
|
[Description("Y坐标")]
|
[DisplayName("Y坐标")]
|
[Browsable(true)]
|
public new float Y
|
{
|
get
|
{
|
return base.Y;
|
}
|
set
|
{
|
base.Y = value;
|
}
|
}
|
|
[Category("基本信息")]
|
[Description("标高(m)")]
|
[DisplayName("标高(m)")]
|
[Browsable(true)]
|
public new float Z { get { return base.Z; } set { base.Z = value; } }
|
[Category("基本信息")]
|
[Description("类型")]
|
[DisplayName("类型")]
|
public MapObjectType Type { get { return this.GetTypeString(); } }
|
|
[Category("计算参数")]
|
[Description("最大口径(mm)")]
|
[DisplayName("最大口径(mm)")]
|
[Browsable(false)]
|
public virtual float MaxDiameter { get; set; } = 0;
|
|
|
|
[Category("计算参数")]
|
[Description("需水量(m³/h)")]
|
[DisplayName("需水量(m³/h)")]
|
[Browsable(true)]
|
public virtual float Demand { get; set; }
|
|
/// <summary>
|
/// 模式的编号
|
/// </summary>
|
[Category("计算参数")]
|
[Description("用水量模式的编号")]
|
[DisplayName("模式编号")]
|
[Browsable(true)]
|
public virtual string PatternID { get; set; }
|
|
|
|
[Category("其他参数")]
|
[DisplayName("链表清单")]
|
[Browsable(true)]
|
[JsonIgnore]
|
public LinkViewModelList Links { get; set; } = new LinkViewModelList();
|
|
|
public List<LinkViewModel> ViewLinks
|
{
|
get
|
{
|
return base.Links.Select(oo => oo as LinkViewModel).ToList();
|
}
|
|
}
|
|
|
|
//EN_DEMAND 9 实际需水量 EN_HEAD 10 水力水头 EN_PRESSURE 11 压强
|
|
|
|
|
|
|
[Category("其他参数")]
|
[Description("选中")]
|
[DisplayName("位置信息")]
|
[Browsable(false)]
|
|
|
|
public PointF Position
|
{
|
get { return new PointF(X, Y); }
|
set { if (value != null) X = value.X; Y = value.Y; }
|
}
|
|
//[Category("其他参数")]
|
//[Description("标签")]
|
//[DisplayName("标签")]
|
//[Editor(typeof(MyEditor), typeof(UITypeEditor))]
|
//public TagList Tags { get; set; } = null;
|
|
|
|
[Browsable(false)]
|
[JsonIgnore]
|
public String regionName { get; set; } = null;
|
|
|
|
[Category("其他参数")]
|
[Description("对象的等级")]
|
[DisplayName("级别")]
|
|
|
public int Level { get; set; } = 0;
|
[Category("其他参数")]
|
[Description("对象的等级")]
|
[DisplayName("是否显示")]
|
public bool Visible { get; set; } = true;
|
|
|
|
|
|
[Category("其他参数")]
|
[Description("ID类型")]
|
[DisplayName("ID类型")]
|
[Browsable(false)]
|
public string IDType => Type.ToString() + "\t" + ID;
|
|
#endregion
|
|
#region 方法
|
public void Move(Vector3 vector)
|
{
|
X += vector.X;
|
Y += vector.Y;
|
Z += vector.Z;
|
}
|
|
|
public MapObjectType GetTypeString()
|
{
|
if (this is JunctionViewModel) return MapObjectType.节点;
|
if (this is ReservoirViewModel) return MapObjectType.水库;
|
if (this is TankViewModel) return MapObjectType.水池;
|
if (this is MeterViewModel) return MapObjectType.水表;
|
if (this is NozzleViewModel) return MapObjectType.喷头;
|
|
|
|
if (this is PipeViewModel) return MapObjectType.管线;
|
if (this is ValveViewModel) return MapObjectType.阀门;
|
|
if (this is PumpViewModel) return MapObjectType.水泵;
|
|
|
return MapObjectType.节点;
|
}
|
|
public bool isNode()
|
{
|
if (this is JunctionViewModel) return true;
|
if (this is ReservoirViewModel) return true;
|
if (this is TankViewModel) return true;
|
if (this is MeterViewModel) return true;
|
if (this is NozzleViewModel) return true;
|
return false;
|
}
|
public string ToEmitterString()
|
{
|
if (this is NozzleViewModel n)
|
{
|
if (n.FlowCoefficient > 0)
|
return $"{ID}\t{n.FlowCoefficient * Math.Pow(10 / 101.972, 0.5) / 1000 * 60}\r\n";
|
}
|
return null;
|
}
|
|
private PointF3D ToPointF3D()
|
{
|
return new PointF3D(X, Y, Z);
|
}
|
|
#endregion
|
|
|
}
|
}
|