using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Linq;
|
using System.Reflection;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace DPumpHydr.WinFrmUI.Volute.ViewModel
|
{
|
public class SectionBundleInfo
|
{
|
public SectionBundleInfo()
|
{
|
this.GaMa_Left = new List<double>(10);
|
this.GaMa_Right = new List<double>(10);
|
this.Area = new List<double>(10);
|
this.H = new List<double>(10);
|
this.R_Left = new List<double>(10);
|
this.R_Right = new List<double>(10);
|
for (int i = 0; i < 10; i++)
|
{
|
this.GaMa_Left.Add(0);
|
this.GaMa_Right.Add(0);
|
this.Area.Add(0);
|
this.H.Add(0);
|
this.R_Left.Add(0);
|
this.R_Right.Add(0);
|
}
|
}
|
/// <summary>
|
/// 截面形状类型
|
/// </summary>
|
public eSectionShapeType ShapeType { get; set; } = eSectionShapeType.对称;
|
|
/// <summary>
|
/// 平均流速
|
/// </summary>
|
public double V3 { get; set; }
|
|
/// <summary>
|
/// 速度系数
|
/// </summary>
|
public double K3 { get; set; }
|
/// <summary>
|
/// 开始截面编号
|
/// </summary>
|
public int StartSectionNumber { get; set; }
|
|
public List<double> GaMa_Left { get; set; }
|
public List<double> GaMa_Right{ get; set;}
|
public List<double> Area { get; set; }
|
|
//断面信息
|
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>
|
///
|
/// </summary>
|
/// <param name="index"></param>
|
/// <returns></returns>
|
public SectionShapePara ToSectionShapePara(int index)
|
{
|
SectionShapePara model = new SectionShapePara();
|
model.Index = index;
|
model.Gama_Left = this.GaMa_Left[index];
|
model.Gama_Right = this.GaMa_Right[index];
|
model.H = this.H[index];
|
model.R_out = this.R_out;
|
model.R_Left = this.R_Left[index];
|
model.R_Right = this.R_Right[index];
|
model.ShapeType = this.ShapeType;
|
model.BaseWidth = this.BaseWidth;
|
model.SectionArea = this.Area[index];
|
model.BaseCircleRadius = this.BaseCircleRadius;
|
return model;
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="index"></param>
|
/// <returns></returns>
|
public void FromSectionShapePara(SectionShapePara model)
|
{
|
var index = model.Index;
|
this.GaMa_Left[index] = model.Gama_Left;
|
this.GaMa_Right[index] = model.Gama_Right;
|
this.H[index] = model.H;
|
this.R_Left[index] = model.R_Left;
|
this.R_Right[index] = model.R_Right;
|
}
|
public void InitialK3(HdrBaseInfo hdr_info, GeomBaseInfo gemo_info)
|
{
|
//计算并设置K3
|
if (hdr_info.ns < 170)
|
K3 = Math.Round((69.1549 - 0.446605 * hdr_info.ns + 0.0014497 * hdr_info.ns * hdr_info.ns) / 100, 3);
|
else
|
K3 = 0.35;//0.347;
|
|
if (hdr_info.ShapeType == 2)
|
K3 = Math.Round(K3 * 0.9, 3);//0.8 环形
|
|
//自己添加的,防止双吸泵截面过小
|
if (hdr_info.IsSXB)
|
K3 = Math.Round(K3 * 0.85, 3);// 双吸泵
|
//排污泵
|
//if (DesignMode == YSSnxOpen::DesignMode::AssPawuQnshQw1)
|
//{
|
// K3 = K3 * 0.75;
|
//}
|
|
|
// 计算平均流速
|
//UG里面用的是 m_H应该错了
|
var g = 9.81;
|
this.V3 = Math.Round(K3 * Math.Sqrt(2 * g * hdr_info.Q), 2);
|
}
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="sectionShapePara"></param>
|
/// <param name="index"></param>
|
public void SetShapeInfo(SectionShapePara sectionShapePara, int index)
|
{
|
this.GaMa_Left[index] = sectionShapePara.Gama_Left;
|
this.GaMa_Right[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;
|
}
|
|
|
|
/// <summary>
|
/// 计算初始化所有参数
|
/// </summary>
|
/// <param name="hdr_info"></param>
|
/// <param name="geom_info"></param>
|
/// <param name="v3"></param>
|
public void ResetAllParas(HdrBaseInfo hdr_info, GeomBaseInfo geom_info )
|
{
|
this.R_out = 1500.0;
|
if (geom_info.D3 > 1000)
|
this.R_out = 6000.0;
|
else if (geom_info.D3 > 500)
|
this.R_out = 3000.0;
|
else if (geom_info.D3 > 300)
|
this.R_out = 2000.0;
|
else
|
this.R_out = 1500.0;
|
|
InitialK3(hdr_info, geom_info);
|
|
this.BaseWidth = geom_info.B3;
|
this.BaseCircleRadius = geom_info.D3 / 2;
|
|
//
|
InitialChamferR(hdr_info, geom_info);
|
|
//
|
InitialGama(hdr_info, geom_info);
|
|
//
|
CalcParaV3(hdr_info, geom_info );
|
|
//
|
CheckChamferR();
|
}
|
|
/// <summary>
|
/// V3改了, 重新计算面积和高度
|
/// </summary>
|
/// <param name="hdr_info"></param>
|
/// <param name="geom_info"></param>
|
/// <param name="v3"></param>
|
public void CalcParaV3(HdrBaseInfo hdr_info, GeomBaseInfo geom_info )
|
{
|
this.BaseWidth = geom_info.B3;
|
this.BaseCircleRadius = geom_info.D3 / 2;
|
|
//
|
CalcAllArea(hdr_info, geom_info);
|
|
//计算高度H
|
for (int i = 1; i <= 8; i++)
|
{
|
CalcHeightByArea(geom_info, i);
|
}
|
|
CheckChamferR();
|
}
|
|
|
/// <summary>
|
/// 计算面积
|
/// </summary>
|
/// <param name="hdr_info"></param>
|
/// <param name="geom_info"></param>
|
private void CalcAllArea(HdrBaseInfo hdr_info, GeomBaseInfo geom_info)
|
{
|
var area8 = Math.Round(hdr_info.Q * 1000000 / (3600 * this.V3), 1);
|
this.Area[8] = area8;
|
int i = 0;
|
//
|
//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];
|
}
|
|
|
/// <summary>
|
/// 初始化gama
|
/// </summary>
|
/// <returns></returns>
|
public string InitialGama(HdrBaseInfo hdr_info, GeomBaseInfo geom_info )
|
{
|
double m_gama81, m_gama82;
|
switch (this.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;
|
}
|
|
|
if (ShapeType == eSectionShapeType.矩形)//断面形状:矩形
|
{
|
for (int i = 0; i < GaMa_Left.Count; i++)
|
{
|
this.GaMa_Left[i] = 0;
|
this.GaMa_Right[i] = 0;
|
}
|
|
return null;
|
}
|
|
if ((m_gama81 < 8.0) || (m_gama82 < 8.0))
|
{
|
return "输入的第8断面的角度过小,请重新输入";
|
}
|
this.GaMa_Left[8] = m_gama81;
|
this.GaMa_Right[8] = m_gama82;
|
|
this.GaMa_Left[7] = m_gama81 - 1;
|
this.GaMa_Right[7] = m_gama82 - 1;
|
|
this.GaMa_Left[6] = m_gama81 - 2;
|
this.GaMa_Right[6] = m_gama82 - 2;
|
|
this.GaMa_Left[5] = m_gama81 - 3;
|
this.GaMa_Right[5] = m_gama82 - 3;
|
|
this.GaMa_Left[4] = m_gama81 - 4;
|
this.GaMa_Right[4] = m_gama82 - 4;
|
|
this.GaMa_Left[3] = m_gama81 - 5;
|
this.GaMa_Right[3] = m_gama82 - 5;
|
|
this.GaMa_Left[2] = m_gama81 - 6;
|
this.GaMa_Right[2] = m_gama82 - 6;
|
|
this.GaMa_Left[1] = m_gama81 - 7;
|
this.GaMa_Right[1] = m_gama82 - 7;
|
|
|
//if (geom_info.FAI0 > 45)//没有第一端面
|
//{
|
// this.GaMa_Left[1] = 0;
|
// this.GaMa_Right[1] = 0;
|
//}
|
|
return null;
|
}
|
|
/// <summary>
|
/// 根据面积计算高度
|
/// </summary>
|
public void CalcHeightByArea(GeomBaseInfo geom_info, int index)
|
{
|
double a = (Math.Tan(this.GaMa_Left[index] * Math.PI / 180) + Math.Tan(this.GaMa_Right[index] * Math.PI / 180)) / 2;
|
double b = geom_info.B3;
|
|
double c = (90 + this.GaMa_Right[index]) / 360 * Math.PI * this.R_Left[index] * this.R_Left[index] + (90 + this.GaMa_Left[index]) / 360 * Math.PI * this.R_Right[index] * this.R_Right[index]
|
- this.R_Left[index] * this.R_Left[index] * Math.Tan((45 + this.GaMa_Right[index] / 2) * Math.PI / 180) - this.R_Right[index] * this.R_Right[index] * Math.Tan((45 + this.GaMa_Left[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>
|
/// 初始化倒角R半径
|
/// </summary>
|
/// <param name="base_info"></param>
|
/// <param name="geom_info"></param>
|
private void InitialChamferR(HdrBaseInfo base_info, GeomBaseInfo geom_info)
|
{
|
//赋值:R1 R2 R3 R4
|
if (this.ShapeType == eSectionShapeType.对称) //type=0:对称梯形
|
this.R_Left[8] = Math.Round(geom_info.B3 * 0.55 + 0.5 - 5, 0);
|
else if (this.ShapeType == eSectionShapeType.不对称)//type=1:不对称梯形
|
this.R_Left[8] = Math.Round(geom_info.B3 * 0.55 + 0.5 - 5, 0);
|
else if (this.ShapeType == eSectionShapeType.矩形)//type=2:矩形
|
this.R_Left[8] = Math.Round(geom_info.B3 * 0.4 + 0.5 - 3, 0);
|
|
|
if (base_info.IsSXB)
|
this.R_Left[8] = Math.Round(this.R_Left[8] / 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[8] = this.R_Left[8];
|
|
|
//截面R1 和 R4的减少角度 DecreaseR
|
double DecreaseR = 0.5;
|
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 (base_info.IsSXB)
|
DecreaseR = 1;
|
|
for (int index = 7; index >= 1; index--)
|
{
|
this.R_Left[index] = this.R_Left[index + 1] - DecreaseR;
|
if (this.R_Left[index] < 1)
|
this.R_Left[index] = 1;
|
this.R_Right[index] = this.R_Right[index + 1] - DecreaseR;
|
if (this.R_Right[index] < 1)
|
this.R_Right[index] = 1;
|
}
|
}
|
|
/// <summary>
|
/// 保证倒角R半径 在合理范围内
|
/// </summary>
|
private void CheckChamferR()
|
{
|
for (int index = 7; index >= 1; index--)
|
{
|
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);
|
|
|
for (int k = 0; k < 10; k++)
|
{
|
bool isChange = false;
|
if (this.R_Left[index] * (1+Math.Sin(this.GaMa_Left[index]*Math.PI/180)) > this.H[index])
|
{
|
isChange = true;
|
this.R_Left[index] = this.R_Left[index] - 0.5;
|
}
|
if (this.R_Right[index] * (1 + Math.Sin(this.GaMa_Right[index] * Math.PI / 180)) > this.H[index])
|
{
|
isChange = true;
|
this.R_Right[index] = this.R_Right[index] - 0.5;
|
}
|
if (isChange)
|
continue;
|
else
|
break;
|
}
|
|
|
//if (this.R_Left[index] < 2)
|
// this.R_Left[index] = 2;
|
//if (this.R_Right[index] < 2)
|
// this.R_Right[index] = 2;
|
}
|
}
|
|
}
|
}
|