using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Runtime.InteropServices.JavaScript.JSType; namespace DPumpHydr.WinFrmUI.Volute.ViewModel { public class SectionBaseInfo { /// /// 截面形状类型 /// public eSectionShapeType ShapeType { get; set; } /// /// 平均流速 /// public double V3 { get; set; } /// /// 开始截面编号 /// public int StartSectionNumber { get; set; } public List GaMa1 { get; set; } public List GaMa2{ get; set;} public List Area { get; set; } //断面信息 public List Index { get; set; }//断面序号 第8断面就是8 第一断面就是1 public List H { get; set; }//高度 public double R_out { get; set; }//外围的半径 public List R_Left { get; set; }//角度1边对应的圆角半径 UG中R1 public List R_Right { get; set; }//角度2边对应的圆角半径 UG中R2 public double BaseWidth { get; set; }//底部宽度 就是B3 public double BaseCircleRadius { get; set; }//底部圆半径 就是D3/2 /// /// 计算平均流速 /// /// /// public void CalcV3(HdrBaseInfo hdr_info, GeomBaseInfo geom_info) { //UG里面用的是 m_H应该错了 var g = 9.81; this.V3 = Math.Round(geom_info.K3 * Math.Sqrt(2 * g * hdr_info.Q), 2); } /// /// 计算面积 /// /// /// /// public void CalcArea(HdrBaseInfo hdr_info, GeomBaseInfo geom_info, double v3) { this.V3 = v3; var area8 = Math.Round(hdr_info.Q * 1000000 / (3600 * v3), 1); int i = 0; if (this.Area == null) { this.GaMa1 = new List(10); this.GaMa2 = new List(10); this.Area = new List(10); for (i = 0; i < 10; i++) { this.GaMa1.Add(0); this.GaMa2.Add(0); this.Area.Add(0); } } this.Area[8] = area8; if (geom_info.IsQieYuJiYuan) {//隔舌切于基圆 for (i = StartSectionNumber; i < 8; i++) Area[i] = Math.Round(area8 * (45 * i - geom_info.FAI0) / (360 - geom_info.FAI0), 1); } else {//采用正常切面 for (i = StartSectionNumber; i < 8; i++) Area[i] = Math.Round(area8 * 45 * i / 360, 1); } if (StartSectionNumber == 2) Area[1] = Area[2]; Area[0] = Area[1]; } /// /// 初始化形状类型 /// /// /// /// public void IntialShapeType(HdrBaseInfo hdr_info, GeomBaseInfo geom_info, eSectionShapeType shapeType) { this.ShapeType = shapeType; double m_gama81, m_gama82; switch (shapeType) { case eSectionShapeType.对称: m_gama81 = 15.0; m_gama82 = 15.0; break; case eSectionShapeType.不对称: m_gama81 = 15.0; m_gama82 = 30.0; break; case eSectionShapeType.矩形: m_gama81 = 0.0; m_gama82 = 0.0; break; default: m_gama81 = 0.0; m_gama82 = 0.0; break; } InitialGama(hdr_info, geom_info, m_gama81, m_gama82);//设置gama r1 /gama r2 } /// /// 初始化gama /// /// public string InitialGama(HdrBaseInfo hdr_info, GeomBaseInfo geom_info, double m_gama81, double m_gama82) { if (this.GaMa1 == null) { this.GaMa1 = new List(10); this.GaMa2 = new List(10); this.Area = new List(10); for (int i = 0; i < 10; i++) { this.GaMa1.Add(0); this.GaMa2.Add(0); this.Area.Add(0); } } if (ShapeType == eSectionShapeType.矩形)//断面形状:矩形 { for (int i = 0; i < GaMa1.Count; i++) { this.GaMa1[i] = 0; this.GaMa2[i] = 0; } return null; } if ((m_gama81 < 8.0) || (m_gama82 < 8.0)) { return "输入的第8断面的角度过小,请重新输入"; } this.GaMa1[8] = m_gama81; this.GaMa2[8] = m_gama82; this.GaMa1[7] = m_gama81 - 1; this.GaMa2[7] = m_gama82 - 1; this.GaMa1[6] = m_gama81 - 2; this.GaMa2[6] = m_gama82 - 2; this.GaMa1[5] = m_gama81 - 3; this.GaMa2[5] = m_gama82 - 3; this.GaMa1[4] = m_gama81 - 4; this.GaMa2[4] = m_gama82 - 4; this.GaMa1[3] = m_gama81 - 5; this.GaMa2[3] = m_gama82 - 5; this.GaMa1[2] = m_gama81 - 6; this.GaMa2[2] = m_gama82 - 6; this.GaMa1[1] = m_gama81 - 7; this.GaMa2[1] = m_gama82 - 7; if (geom_info.FAI0 > 45)//没有第一端面 { this.GaMa1[1] = 0; this.GaMa2[1] = 0; } return null; } /// /// 初始化1-8断面参数 /// public void InitialAllParameters(HdrBaseInfo BaseInfo , GeomBaseInfo geom_info ) { this.Index = new List(10); this.H = new List(10); this.R_Left = new List(10); this.R_Right = new List(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; } } } /// /// 根据面积计算高度 /// 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 ; } } /// /// 断面参数计算 /// 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; } } }