예제 #1
0
        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);
        }