yangyin
2024-10-25 34fe00834737d35eedfeb41361c4d85ab0e0f10b
WinFrmUI/DPumpHydr.WinFrmUI.Volute/¶ÏÃæÉè¼Æ/ViewModel/SectionBaseInfo.cs
@@ -3,6 +3,7 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace DPumpHydr.WinFrmUI.Volute.ViewModel
{
@@ -24,12 +25,17 @@
        public int StartSectionNumber { get; set; }
        public List<double> GaMa1 { get; set; }
        public List<double> GaMa2
        {
            get; set;
        }
        public List<double> GaMa2{ get; set;}
        public List<double> Area { get; set; }
        //断面信息
        public List<int> Index { get; set; }//断面序号  ç¬¬8断面就是8 ç¬¬ä¸€æ–­é¢å°±æ˜¯1
        public List<double> H { get; set; }//高度
        public double R_out { get; set; }//外围的半径
        public List<double> R_Left { get; set; }//角度1边对应的圆角半径 UG中R1
        public List<double> R_Right { get; set; }//角度2边对应的圆角半径 UG中R2
        public double BaseWidth { get; set; }//底部宽度 å°±æ˜¯B3
        public double BaseCircleRadius { get; set; }//底部圆半径 å°±æ˜¯D3/2
        /// <summary>
        /// è®¡ç®—平均流速
@@ -42,10 +48,16 @@
            var g = 9.81;
            this.V3 = Math.Round(geom_info.K3 * Math.Sqrt(2 * g * hdr_info.Q), 2);
        }
        /// <summary>
        /// è®¡ç®—面积
        /// </summary>
        /// <param name="hdr_info"></param>
        /// <param name="geom_info"></param>
        /// <param name="v3"></param>
        public void CalcArea(HdrBaseInfo hdr_info, GeomBaseInfo geom_info, double v3)
        {
            this.V3 = v3;
            var area8 = hdr_info.Q * 1000000 / (3600 * v3);
            var area8 = Math.Round(hdr_info.Q * 1000000 / (3600 * v3), 1);
            int i = 0;
            if (this.Area == null)
            {
@@ -64,12 +76,12 @@
            if (geom_info.IsQieYuJiYuan)
            {//隔舌切于基圆
                for (i = StartSectionNumber; i < 8; i++)
                    Area[i] = area8 * (45 * i - geom_info.FAI0) / (360 - geom_info.FAI0);
                    Area[i] = Math.Round(area8 * (45 * i - geom_info.FAI0) / (360 - geom_info.FAI0), 1);
            }
            else
            {//采用正常切面
                for (i = StartSectionNumber; i < 8; i++)
                    Area[i] = area8 * 45 * i / 360;
                    Area[i] = Math.Round(area8 * 45 * i / 360, 1);
            }
            if (StartSectionNumber == 2)
@@ -176,7 +188,184 @@
            return null;
        }
        /// <summary>
        /// åˆå§‹åŒ–1-8断面参数
        /// </summary>
        public void InitialAllParameters(HdrBaseInfo BaseInfo , GeomBaseInfo geom_info )
        {
            this.Index = new List<int>(10);
            this.H = new List<double>(10);
            this.R_Left = new List<double>(10);
            this.R_Right = new List<double>(10);
            bool isFirst = true;
            for (int i = 0; i < 10; i++)
            {
                this.Index.Add(0);
                this.Index[i] = i;
                this.H.Add(0);
                this.R_Left.Add(0);
                this.R_Right.Add(0);
                if(i == 0 )
                {
                    continue;
                }
                CalcHeightByArea(geom_info, Index[i]);
            }
            for (int i = 8; i > 0; i--)
            {
                CalculateR(BaseInfo, geom_info, Index[i], isFirst);
                if (isFirst)
                {
                    isFirst = false;
                }
            }
        }
        /// <summary>
        /// æ ¹æ®é¢ç§¯è®¡ç®—高度
        /// </summary>
        public void CalcHeightByArea(GeomBaseInfo geom_info, int index)
        {
            double a = (Math.Tan(this.GaMa1[index] * Math.PI / 180) + Math.Tan(this.GaMa2[index] * Math.PI / 180)) / 2;
            double b = geom_info.B3;
            double c = (90 + this.GaMa2[index]) / 360 * Math.PI * this.R_Left[index] * this.R_Left[index] + (90 + this.GaMa1[index]) / 360 * Math.PI * this.R_Right[index] * this.R_Right[index]
                - this.R_Left[index] * this.R_Left[index] * Math.Tan((45 + this.GaMa2[index] / 2) * Math.PI / 180) - this.R_Right[index] * this.R_Right[index] * Math.Tan((45 + this.GaMa1[index] / 2) * Math.PI / 180) - this.Area[index];
            double delta = b * b - 4 * a * c;
            if (delta < 0)
            {
                this.H[index] = -1;
                return;
            }
            if (this.ShapeType == eSectionShapeType.矩形)//矩形
            {
                this.H[index] = Math.Round((-c / b), 1) ;
                return ;
            }
            else
            {
                if (delta < 0)
                {
                    this.H[index] = -1;
                    return;
                }
                this.H[index] = Math.Round((-b + Math.Sqrt(delta)) / (2 * a), 1);
                return ;
            }
        }
        /// <summary>
        /// æ–­é¢å‚数计算
        /// </summary>
        private double DecreaseR = 0.5;
        public bool CalculateR(HdrBaseInfo BaseInfo ,GeomBaseInfo geom_info, int index, bool isFirst)
        {
            this.BaseWidth = geom_info.B3;
            this.BaseCircleRadius = geom_info.D3 / 2;
            if (!isFirst)
            {
                this.R_Left[index] = this.R_Left[index+1] - DecreaseR;
                this.R_Right[index] = this.R_Right[index+1] - DecreaseR;
                if (this.R_Left[index] > (this.H[index] + 1))
                    this.R_Left[index] = Math.Round(this.H[index] * 0.85 - 1, 0);
                if (this.R_Right[index] > (this.H[index] + 1))
                    this.R_Right[index] = Math.Round(this.H[index] * 0.85 - 1, 0);
                if (this.R_Left[index] < 2)
                    this.R_Left[index] = 2;
                if (this.R_Right[index] < 2)
                    this.R_Right[index] = 2;
            }
            else//是第一次计算
            {
                //赋值:R1 R2 R3 R4
                if (this.ShapeType == eSectionShapeType.对称) //type=0:对称梯形
                    this.R_Left[index] = Math.Round(geom_info.B3 * 0.55 + 0.5 - 4, 0);
                else if (this.ShapeType == eSectionShapeType.不对称)//type=1:不对称梯形
                    this.R_Left[index] = Math.Round(geom_info.B3 * 0.55 + 0.5 - 4, 0);
                else if (this.ShapeType == eSectionShapeType.矩形)//type=2:矩形
                    this.R_Left[index] = Math.Round(geom_info.B3 * 0.4 + 0.5 - 2, 0);
                if (BaseInfo.IsSXB)
                    this.R_Left[index] = Math.Round(this.R_Left[index] / 2, 0);
                //if (DesignMode == YSSnxOpen::DesignMode::AssPawuQnshQw1)
                //{
                //    R_Left = int(R_Left * 0.7);
                //}
                double m_R3 = 0;
                double t = 0;
                if (geom_info.B3 <= 35)
                    m_R3 = 5;
                else if (geom_info.B3 <= 60 && geom_info.B3 > 35)
                {
                    t = Math.Round(geom_info.B3 * 0.6, 0) - Math.Round(geom_info.B3 * 0.6 / 10.0, 0) * 10;
                    if (t <= 2)
                        m_R3 = Math.Round(geom_info.B3 * 0.6 / 10.0, 0) * 10;
                    else if (t > 2 && t <= 7)
                        m_R3 = Math.Round(geom_info.B3 * 0.6 / 10.0, 0) * 10 + 5;
                    else if (t > 7)
                        m_R3 = Math.Round(geom_info.B3 * 0.6 / 10.0, 0) * 10 + 10;
                }
                else if (geom_info.B3 > 60 && geom_info.B3 <= 90)
                {
                    t = Math.Round(geom_info.B3 * 0.9, 0) - Math.Round(geom_info.B3 * 0.9 / 10.0, 0) * 10;
                    if (t <= 2)
                        m_R3 = Math.Round(geom_info.B3 * 0.9 / 10.0, 0) * 10;
                    else if (t > 2 && t <= 7)
                        m_R3 = Math.Round(geom_info.B3 * 0.9 / 10.0, 0) * 10 + 5;
                    else if (t > 7)
                        m_R3 = Math.Round(geom_info.B3 * 0.9 / 10.0, 0) * 10 + 10;
                }
                else if (geom_info.B3 > 90)
                {
                    t = Math.Round(geom_info.B3 * 0.3, 0) - Math.Round(geom_info.B3 * 0.3 / 10.0, 0) * 10;
                    if (t <= 2)
                        m_R3 = Math.Round(geom_info.B3 * 0.3 / 10.0, 0) * 10;
                    else if (t > 2 && t <= 7)
                        m_R3 = Math.Round(geom_info.B3 * 0.3 / 10.0, 0) * 10 + 5;
                    else if (t > 7)
                        m_R3 = Math.Round(geom_info.B3 * 0.3 / 10.0, 0) * 10 + 10;
                }
                this.R_Right[index] = this.R_Left[index];
                R_out = 1000.0;
                //截面R1 å’Œ R4的减少角度 DecreaseR
                if (geom_info.B3 < 15)
                {
                    DecreaseR = 0.5;
                }
                else if (geom_info.B3 >= 15 && geom_info.B3 < 25)
                {
                    DecreaseR = 1;
                }
                else if (geom_info.B3 >= 25 && geom_info.B3 < 45)
                {
                    DecreaseR = 1.5;
                }
                else if (geom_info.B3 >= 45)
                {
                    DecreaseR = 2;
                }
                if (BaseInfo.IsSXB)
                    DecreaseR = 1;
            }
            return true;
        }
        public void EditSingleShape(SectionShapePara sectionShapePara,int index)
        {
            this.GaMa1[index] = sectionShapePara.Gama_Left;
            this.GaMa2[index] = sectionShapePara.Gama_Right;
            this.H[index] = sectionShapePara.H;
            this.R_out = sectionShapePara.R_out;
            this.R_Left[index] = sectionShapePara.R_Left;
            this.R_Right[index] = sectionShapePara.R_Right;
        }
    }
}