Shuxia Ning
2025-01-14 0f99d4d12f2eae29bbe343f4b3131f2faeccda5d
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/04-link/01-pipe/00-core/HydroPipeViewModel.cs
@@ -1,11 +1,9 @@
using Yw.Model;
namespace Yw.WinFrmUI
namespace Yw.WinFrmUI
{
    /// <summary>
    /// 管道视图
    /// </summary>
    public class HydroPipeViewModel : HydroLinkViewModel
    public class HydroPipeViewModel : HydroLinkViewModel, IHydroCalcuPipeResult
    {
        /// <summary>
        /// 
@@ -18,34 +16,19 @@
        public HydroPipeViewModel(Yw.Model.HydroPipeInfo rhs, Yw.Model.HydroModelInfo hydroInfo) : base(rhs, hydroInfo)
        {
            this.Material = rhs.Material;
            this.UpdatePropStatus(nameof(this.Material), rhs, nameof(rhs.Material));
            this.Diameter = Math.Round(rhs.Diameter, 0);
            this.UpdatePropStatus(nameof(this.Diameter), rhs, nameof(rhs.Diameter));
            this.Length = Math.Round(rhs.Length, 4);
            this.UpdatePropStatus(nameof(this.Length), rhs, nameof(rhs.Length));
            this.Roughness = rhs.Roughness;
            this.UpdatePropStatus(nameof(this.Roughness), rhs, nameof(rhs.Roughness));
            this.MinorLoss = rhs.MinorLoss;
            this.UpdatePropStatus(nameof(this.MinorLoss), rhs, nameof(rhs.MinorLoss));
            this.Vmo = rhs;
        }
        /// <summary>
        /// 管道状态
        /// 材质
        /// </summary>
        [Category("数据")]
        [DisplayName("管道状态")]
        [PropertyOrder(13)]
        [Browsable(true)]
        [TypeConverter(typeof(HydroPipeStatusConverter))]
        public override string LinkStatus { get; set; }
        /// <summary>
        /// 材料
        /// </summary>
        [Category("数据")]
        [DisplayName("材料")]
        [PropertyOrder(100)]
        [Display(Name = "材质")]
        [DisplayName("材质")]
        [PropertyOrder(2001)]
        [Browsable(true)]
        public string Material { get; set; }
@@ -53,19 +36,22 @@
        /// 直径
        /// </summary>
        [Category("数据")]
        [Display(Name = "直径(mm)")]
        [DisplayName("直径")]
        [PropertyOrder(101)]
        [DisplayUnit("mm")]
        [Range(1, double.MaxValue)]
        [PropertyOrder(2002)]
        [Browsable(true)]
        public double Diameter { get; set; }
        public virtual double Diameter { get; set; }
        /// <summary>
        /// 长度
        /// </summary>
        [Category("数据")]
        [Display(Name = "长度(m)")]
        [DisplayName("长度")]
        [PropertyOrder(102)]
        [DisplayUnit("m")]
        [PropertyOrder(2003)]
        [Browsable(true)]
        public double Length { get; set; }
@@ -73,8 +59,10 @@
        /// 粗糙系数
        /// </summary>
        [Category("数据")]
        [Display(Name = "粗糙系数")]
        [DisplayName("粗糙系数")]
        [PropertyOrder(103)]
        [Description("海森威廉公式系数")]
        [PropertyOrder(2004)]
        [Browsable(true)]
        public double Roughness { get; set; }
@@ -82,17 +70,101 @@
        /// 局阻系数
        /// </summary>
        [Category("数据")]
        [Display(Name = "局阻系数")]
        [DisplayName("局阻系数")]
        [PropertyOrder(104)]
        [Description("局部阻力系数")]
        [PropertyOrder(2005)]
        [Browsable(true)]
        public double MinorLoss { get; set; }
        /// <summary>
        /// 流量
        /// </summary>
        [Category("计算结果")]
        [DisplayName("流量")]
        [DisplayUnit("m³/h")]
        [Display(Name = "流量(m³/h)")]
        [PropertyOrder(11001)]
        [HydroCalcuPro]
        [ShowEditor(false)]
        [Browsable(true)]
        public virtual double? CalcuQ { get; set; }
        /// <summary>
        /// 进口压力
        /// </summary>
        [Category("计算结果")]
        [DisplayName("进口压力")]
        [DisplayUnit("m")]
        [Display(Name = "进口压力(m)")]
        [PropertyOrder(11002)]
        [HydroCalcuPro]
        [ShowEditor(false)]
        [Browsable(true)]
        public virtual double? CalcuPr1 { get; set; }
        /// <summary>
        /// 出口压力
        /// </summary>
        [Category("计算结果")]
        [DisplayName("出口压力")]
        [DisplayUnit("m")]
        [Display(Name = "出口压力(m)")]
        [PropertyOrder(11003)]
        [HydroCalcuPro]
        [ShowEditor(false)]
        [Browsable(true)]
        public virtual double? CalcuPr2 { get; set; }
        /// <summary>
        /// 流速
        /// </summary>
        [Category("计算结果")]
        [DisplayName("流速")]
        [DisplayUnit("m/s")]
        [Display(Name = "流速(m/s)")]
        [PropertyOrder(19007)]
        [HydroCalcuPro]
        [ShowEditor(false)]
        [Browsable(true)]
        public override double? CalcuVelocity { get; set; }
        /// <summary>
        /// 局部损失
        /// </summary>
        [Category("计算结果")]
        [DisplayName("局部损失")]
        [DisplayUnit("m")]
        [Display(Name = "局部损失(m)")]
        [PropertyOrder(19008)]
        [HydroCalcuPro]
        [ShowEditor(false)]
        [Browsable(true)]
        public override double? CalcuMinorLoss { get; set; }
        /// <summary>
        /// 沿程损失
        /// </summary>
        [Category("计算结果")]
        [DisplayName("沿程损失")]
        [DisplayUnit("m")]
        [Display(Name = "沿程损失(m)")]
        [PropertyOrder(19009)]
        [HydroCalcuPro]
        [ShowEditor(false)]
        [Browsable(true)]
        public override double? CalcuFrictionLoss { get; set; }
        /// <summary>
        /// 
        /// </summary>
        public new Yw.Model.HydroPipeInfo Vmo { get; set; }
        [Browsable(false)]
        public new Yw.Model.HydroPipeInfo Vmo
        {
            get { return _vmo as Yw.Model.HydroPipeInfo; }
            set { _vmo = value; }
        }
        /// <summary>
        /// 更新属性
@@ -101,18 +173,38 @@
        {
            base.UpdateProperty();
            this.Material = this.Vmo.Material;
            this.UpdatePropStatus(nameof(this.Material), this.Vmo, nameof(this.Vmo.Material));
            this.Diameter = this.Vmo.Diameter;
            this.UpdatePropStatus(nameof(this.Diameter), this.Vmo, nameof(this.Vmo.Diameter));
            this.Length = this.Vmo.Length;
            this.UpdatePropStatus(nameof(this.Length), this.Vmo, nameof(this.Vmo.Length));
            this.Length = Math.Round(this.Vmo.Length, 4);
            this.Roughness = this.Vmo.Roughness;
            this.UpdatePropStatus(nameof(this.Roughness), this.Vmo, nameof(this.Vmo.Roughness));
            this.MinorLoss = this.Vmo.MinorLoss;
            this.UpdatePropStatus(nameof(this.MinorLoss), this.Vmo, nameof(this.Vmo.MinorLoss));
        }
        /// <summary>
        ///
        /// </summary>
        public override void UpdateVmoProperty()
        {
            base.UpdateVmoProperty();
            this.Vmo.Material = this.Material;
            this.Vmo.Diameter = this.Diameter;
            this.Vmo.Length = this.Length;
            this.Vmo.Roughness = this.Roughness;
            this.Vmo.MinorLoss = this.MinorLoss;
        }
        /// <summary>
        /// 更新计算属性
        /// </summary>
        public override void UpdateCalcuProperty(HydroCalcuVisualResult rhs)
        {
            base.UpdateCalcuProperty(rhs);
            if (rhs is HydroCalcuPipeResult calcuPipeProperty)
            {
                this.CalcuQ = calcuPipeProperty.CalcuQ.HasValue ? Math.Round(calcuPipeProperty.CalcuQ.Value, 1) : null;
                this.CalcuPr1 = calcuPipeProperty.CalcuPr1.HasValue ? Math.Round(calcuPipeProperty.CalcuPr1.Value, 2) : null;
                this.CalcuPr2 = calcuPipeProperty.CalcuPr2.HasValue ? Math.Round(calcuPipeProperty.CalcuPr2.Value, 2) : null;
            }
        }
    }
}