int BHEnd = 0; //底板frame的終點處,側牆frame的起始處 /// <summary> /// /// </summary> /// <param name="JM">"S" =定義為土壤彈簧 </param> /// <param name="High"></param> /// <param name="Radius"></param> /// <param name="Offset">彈簧桿件支距</param> /// <returns></returns> public List <string> JointsProcess(string JM, float High, float Radius, float Offset) { List <string> CoorExcel = new List <string>(); //點位編輯原則由圓頂順時間方向編輯 int Joint = 0; string x1 = ""; string z1 = ""; //右半部頂板(圓/4)區間數 int gape = Convert.ToInt16(Math.Ceiling(Radius * Math.PI / 2 / Divide) + 1); //頂板(圓/4)取最大分割區間數 int springStart = gape / 2; int start = 0; if (JM == "") { BHStart += gape; //從頂部到側牆頂 } else { start = springStart; } Angle = Math.PI / 2 / gape; // 均分 90度圓時的角度(徑度) for (Joint = start; Joint <= gape; ++Joint) { x1 = string.Format("{0:0.000}", 0 + (Radius + Offset) * Math.Cos(Math.PI / 2 - Angle * Joint)); z1 = string.Format("{0:0.000}", High + (Radius + Offset) * Math.Sin(Math.PI / 2 - Angle * Joint)); CoorExcel.Add($"{JM}{Joint + 1},GLOBAL,Cartesian,{x1},0,,{z1}"); } //右半部側牆點位區間數 gape = Convert.ToInt16(Math.Ceiling(High / Divide) - 1); //側牆間隔點位 if (JM == "") { BHStart += gape; //從側牆頂到側牆底 } SideLength = Convert.ToSingle(High / gape); //側牆間隔長度 for (int j = 1; j <= gape; ++j) { z1 = string.Format("{0:0.000}", High - SideLength * j); if (JM == "S" && j == gape) //當配置彈簧時,需多新增底板兩端之垂直彈簧 { CoorExcel.Add($"{JM}{Joint + j}H,GLOBAL,Cartesian,{Radius + Offset},0,,{z1}"); } else { CoorExcel.Add($"{JM}{Joint + j},GLOBAL,Cartesian,{Radius + Offset},0,,{z1}"); } } if (JM == "") { BHEnd = BHStart; } if (JM == "") { BHEnd += (gape * 2 + 1); } Joint += gape; int JSpring = 1; if (JM == "S") { JSpring = 0; //當配置彈簧時,需多新增底板兩端之垂直彈簧 } //右半部底板點位區間數 gape = Convert.ToInt16(Math.Ceiling(Radius / Divide)); //底板間隔點位 if (JM == "") { for (int j = 1; j <= gape * 2; j++) { BHFrame.Add($"{BHStart + j}"); //底板frame的名稱 } } BaseLength = Convert.ToSingle(Radius / gape); //底板間隔長度 for (int j = JSpring; j <= gape; ++j) { x1 = string.Format("{0:0.000}", Radius - BaseLength * j); if (JM == "S" && j == 0) //當配置彈簧時,需多新增底板兩端之垂直彈簧 { CoorExcel.Add($"{JM}{Joint + j}V,GLOBAL,Cartesian,{x1},0,,{-Offset}"); } else { CoorExcel.Add($"{JM}{Joint + j},GLOBAL,Cartesian,{x1},0,,{-Offset}"); } } // *************** 所有點左測對稱再佈點 Joint += gape; //if (JM == "S") start = CoorExcel.Count - 1; //else start = CoorExcel.Count - 2; int end = 1; if (JM == "S") { end = 0; } for (int i = CoorExcel.Count - 2; i >= end; --i) { Joint += 1; string[] XX = CoorExcel[i].Split(','); x1 = string.Format("{0:-0.000}", float.Parse(XX[3].ToString())); switch (XX[0].Last().ToString()) { case "V": CoorExcel.Add($"{JM}{Joint}V,GLOBAL,Cartesian,{x1},0,,{XX[6]}"); Joint -= 1; break; case "H": CoorExcel.Add($"{JM}{Joint}H,GLOBAL,Cartesian,{x1},0,,0"); break; default: CoorExcel.Add($"{JM}{Joint},GLOBAL,Cartesian,{x1},0,,{XX[6]}"); break; } } if (JM == "") //頂圓與側牆frame的名稱 { for (int i = 0; i < CoorExcel.Count; i++) { bool tr = true; string[] xx = CoorExcel[i].Split(','); for (int j = 0; j < BHFrame.Count; j++) { if (BHFrame[j] == xx[0]) { tr = false; } } if (tr) { TRFrame.Add(xx[0].ToString()); } } } input.PutDataToSheet("Joint Coordinates", CoorExcel); return(CoorExcel); }
/// <summary> /// /// </summary> /// <param name="JM">"S" =定義為土壤彈簧 </param> /// <param name="High"></param> /// <param name="Radius"></param> /// <param name="Offset">彈簧桿件支距</param> /// <returns></returns> public List <string> JointsProcess(string JM, float Offset) { List <string> XXXX = new List <string>(); string x1 = ""; string z1 = ""; float xRadius = UseRadius + Offset; // Offset = 土壤彈簧支距 float AngleValue = 0.0f; int ii = 1; //桿件編號 int ss = 0; int ee = 10; //代表 螺栓孔數目 if (JM != "") { ss = 1; ee = 9; } //For Partial points not for all for (int jj = ss; jj < ee; ++jj) { AngleValue = ADangle * jj; switch (jj) { case 0: //第一個螺栓孔位置(FOR JM="" 隧道環片點位) case 9: //第一個螺栓孔位置(FOR JM="S" 土壤彈簧點位) PolarToXY(AngleValue, xRadius, ref x1, ref z1); XXXX.Add($"{JM}{ii},GLOBAL,Cartesian,{x1},0,,{z1}"); //1 ++ii; AngleValue += AD2angle; GapeFacePoints(AngleValue, xRadius, ref ii, JM, XXXX); AngleValue += Kangle; GapeFacePoints(AngleValue, xRadius, ref ii, JM, XXXX); break; default: PolarToXY(AngleValue, xRadius, ref x1, ref z1); if (JM != "S") { XXXX.Add($"{JM}{ii},GLOBAL,Cartesian,{x1},0,,{z1}"); ++ii; } else if (jj != 1) { XXXX.Add($"{JM}{ii},GLOBAL,Cartesian,{x1},0,,{z1}"); ++ii; } AngleValue += AD1angle; GapeFacePoints(AngleValue, xRadius, ref ii, JM, XXXX); break; } } input.PutDataToSheet("Joint Coordinates", XXXX); iPoints = ii; return(XXXX); }