支撑篇,标准支撑的识别2020-11-10
2020-11-10 本文已影响0人
new_blash
识别支撑的算法,仅支持不带后缀的编码,后面会更新非标支撑算法
public static string[] 标准支撑核心算法(string Z_编码, string Z_数量)
{
//200Z200(普通支撑) Z220(梁底支撑150*220) Z(流星锤100*200)(忠旺体系的编码)
//定义型材信息(由于支撑没有加筋,所以型材可以减少一部分)
string Z_主型材 = "";
string Z_主型材长度 = "";
string Z_主型材数量 = "";
string Z_封板 = "";
string Z_封板数量 = "";
string Z_圆管数量 = "";//圆管每个公司长度不同,所以只计算数量,不算长度
string Z_信息 = "";
string[] 结果 = null;//结果
String[] Z_无字母参数 = null;
String[] Z_无数字参数 = null;
//支撑算法稍微要比平板算法要复杂好几倍,要计算用什么型材来开料,比如125Z200,此时就不能用125的型材要用200的型材切125,然后焊接封板
//其中参数又分好几种情况,比如单独一个Z,此时就不能再计算他的参数了,因为是固定死的100*200,再比如Z220他第一个参数是固定的150,所以只有1个参数,要分开三次进行计算
//去除编码中的符号和字母,方便下一次计算
Z_无字母参数 = Z_编码.Split(new char[] { '-', 'P', 'J', 'Q', 'C', 'D', 'K', 'L', '/', '(', ')', 'A', 'B', 'E', 'F', 'G', 'H', 'I', 'J', 'M', 'N', 'O', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }, StringSplitOptions.RemoveEmptyEntries);
//去除编码中的数字,方便下一次计算
Z_无数字参数 = Z_编码.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }, StringSplitOptions.RemoveEmptyEntries);
//去除编码中的空格,然后转化为string类型,方便下一次计算
String Z_字符串 = String.Join("", Z_无数字参数.Select(y => y.ToString()).ToArray());
char[] Z_字符数组 = Z_字符串.ToCharArray();
//判断获取到的编码是不是支撑类型,并保证编码中只有一个Z字符
if (Z_字符数组.Length > 0 && Z_字符数组[0] == 'Z' && Z_字符数组.Length == 1)
{
//Z楼面支撑处理(无字母参数为0)
if (Z_无字母参数.Length == 0 )
{
Z_主型材 = "100";
Z_主型材长度 = "200";
Z_主型材数量 = Z_数量;
Z_封板 = "无";
Z_封板数量 = "无";
Z_圆管数量 = "150mm*" + Z_数量;//圆管每个公司长度不同,所以自行修改长度
Z_信息 = "楼面支撑Z";
}
//Z220梁底支撑处理(参数只有一个,并保证参数是220)
else if (Z_无字母参数.Length == 1 && Z_无字母参数[0] == "220")
{
Z_主型材 = "150";
Z_主型材长度 = Z_无字母参数[0];
Z_主型材数量 = Z_数量;
Z_封板 = "无";
Z_封板数量 = "无";
Z_圆管数量 = "100mm*" + Z_数量;//圆管每个公司长度不同,所以自行修改长度
Z_信息 = "梁底支撑Z220";
}
//200Z200多参数型支撑处理(2个以上的参数)
else if (Z_无字母参数.Length == 2)
{
Z_主型材数量 = Z_数量;
Z_圆管数量 = "100*" + Z_数量;//不出意外基本就=支撑数量
Z_封板数量 = (2 * int.Parse(Z_数量)).ToString(); ;
Z_主型材 = Z_无字母参数[0];
//计算型材(取消一堆花里胡哨的算法,实际没卵用)
if (float.Parse(Z_无字母参数[0]) % 50 != 0&& float.Parse(Z_无字母参数[1]) % 50 == 0)
{//宽度非标,长度整数
Z_主型材 = Z_无字母参数[1];
Z_主型材长度 = Z_无字母参数[0];
Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[1]) - 16).ToString();
Z_信息 = "非50倍数宽度支撑";
}
else if (float.Parse(Z_无字母参数[1]) % 50 != 0&&float.Parse(Z_无字母参数[0]) % 50 == 0)
{//长度非标,宽度整数
Z_主型材 = Z_无字母参数[0];
Z_主型材长度 = Z_无字母参数[1];
Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[0]) - 16).ToString();
Z_信息 = "非50倍数长度支撑";
}
else if (float.Parse(Z_无字母参数[0]) % 50 != 0 && float.Parse(Z_无字母参数[1]) % 50 != 0)
{//长宽都非标,以数小的当型材
if (float.Parse(Z_无字母参数[0]) < float.Parse(Z_无字母参数[1]))
{
Z_主型材 = Z_无字母参数[0];
Z_主型材长度 = Z_无字母参数[1];
Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[0]) - 16).ToString();
}
else {
Z_主型材 = Z_无字母参数[1];
Z_主型材长度 = Z_无字母参数[0];
Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[1]) - 16).ToString();
}
Z_信息 = "非标支撑";
}
else
{
//正常支撑
Z_主型材 = Z_无字母参数[0];
Z_主型材长度 = Z_无字母参数[1];
Z_封板 = "60.5内封-长度:" + (float.Parse(Z_无字母参数[0]) - 16).ToString();
Z_信息 = "正常支撑";
}
}
else
{//参数大于2个以上,暂时不支持,所以说明一下
Z_信息 = "编码没有此型号支撑,请检查";
结果 = new string[7] { Z_主型材, Z_主型材长度, Z_主型材数量, Z_封板, Z_封板数量, Z_圆管数量, Z_信息 };
return 结果;
}
结果 = new string[7] { Z_主型材, Z_主型材长度, Z_主型材数量, Z_封板, Z_封板数量, Z_圆管数量, Z_信息 };
return 结果;
}
else
{//不是支撑的编码
Z_信息 = "编码错误,请检查";
结果 = new string[7] { Z_主型材, Z_主型材长度, Z_主型材数量, Z_封板, Z_封板数量, Z_圆管数量, Z_信息 };
return 结果;
}
}
调用方法:
ruslt = MBCore.标准支撑核心算法("200Z200", "10");
if (ruslt != null)
{
foreach(string str in ruslt)
{
Console.Write(str);
}
}
结果如下:
image.png
完事,下一篇标准C槽的算法,未完待续..........