Esempio n. 1
0
        void des_curve_input()
        {
            string mdlnam, strnam;
            int    telemno = 0, teltype = 0;
            double tstchn = 0.0, tendchn = 0.0, tIPX = 0.0, tIPY = 0.0;
            double tT1 = 0.0, tT2 = 0.0, tR = 0.0, tL = 0.0;
            double txst = 0.0, tyst = 0.0, txed = 0.0, tyed = 0.0;
            double tB1 = 0.0, tB2 = 0.0, tDEL = 0.0;
            int    tturn1 = 0;

            CValignFilData fildata = CValignFilData.Parse(fp1.ReadLine());

            mdlnam  = fildata.modnam;
            strnam  = fildata.stglbl;
            telemno = fildata.elno;
            teltype = fildata.eltype;
            tstchn  = fildata.chn1;
            tendchn = fildata.chn2;
            tIPX    = fildata.hipx;
            tIPY    = fildata.hipy;
            tT1     = fildata.t1;
            tT2     = fildata.t2;
            tR      = fildata.rad;
            tL      = fildata.l;
            txst    = fildata.xs;
            tyst    = fildata.ys;
            txed    = fildata.xe;
            tyed    = fildata.ye;
            tB1     = fildata.b1;
            tB2     = fildata.b2;
            tDEL    = fildata.del;
            tturn1  = fildata.turn;

            if ((mdlnam == modstr) && (strnam == stgstr))
            {
                flag   = 1; // final 13/09/01 DD
                elemno = (short)telemno;
                eltype = (short)teltype;
                stchn  = tstchn; endchn = tendchn; IPX = tIPX; IPY = tIPY;
                T1     = tT1; T2 = tT2; R = tR; L = tL;
                xst    = txst; yst = tyst; xed = txed; yed = tyed;
                B1     = tB1; B2 = tB2; DEL = tDEL;
                turn1  = (short)tturn1;
            }
            else
            {
                flag = 0;
            }
        }
Esempio n. 2
0
        public static void SaveValign(string strWorkingDirPath)
        {
            StreamReader          readerSrc      = new StreamReader(Path.Combine(strWorkingDirPath, "VALIGN.TMP"));
            List <CValignFilData> listTempValign = new List <CValignFilData>();

            while (readerSrc.EndOfStream == false)
            {
                string         strlineSrc  = readerSrc.ReadLine();
                CValignFilData filDataTemp = CValignFilData.Parse(strlineSrc);
                if (filDataTemp != null)
                {
                    listTempValign.Add(filDataTemp);
                }
            }
            readerSrc.Close();

            //If any data present in temp file
            if (listTempValign.Count > 0)
            {
                string        strValignFilePath = Path.Combine(strWorkingDirPath, "VALIGN.FIL");
                CValignInfo[] infoarr           = CValignUtil.ReadValigns(strValignFilePath);
                StreamWriter  writerDesti       = new StreamWriter(strValignFilePath, false);
                foreach (CValignInfo info in infoarr)
                {
                    foreach (CValignFilData filData in info.DataList)
                    {
                        if (filData.modnam != listTempValign[0].modnam || filData.stglbl != listTempValign[0].stglbl)
                        {
                            writerDesti.WriteLine(filData.ToString());
                        }
                    }
                }

                //Now write the data from temp file
                foreach (CValignFilData filData in listTempValign)
                {
                    writerDesti.WriteLine(filData.ToString());
                }

                writerDesti.Close();
            }
        }
Esempio n. 3
0
        public static CValignInfo[] ReadValigns(string strValignFilePath)
        {
            List <CValignInfo> listvalign = new List <CValignInfo>();

            if (File.Exists(strValignFilePath))
            {
                StreamReader readerSrc = new StreamReader(strValignFilePath);

                string      strLastModelName   = "";
                string      strLastStringLabel = "";
                CValignInfo valigninfo         = null;
                while (readerSrc.EndOfStream == false)
                {
                    string         strline = readerSrc.ReadLine();
                    CValignFilData fildata = CValignFilData.Parse(strline);

                    if (fildata != null)
                    {
                        if (strLastModelName != fildata.modnam || strLastStringLabel != fildata.stglbl)
                        {
                            valigninfo             = new CValignInfo();
                            valigninfo.ModelName   = fildata.modnam;
                            valigninfo.StringLabel = fildata.stglbl;
                            listvalign.Add(valigninfo);

                            strLastModelName   = fildata.modnam;
                            strLastStringLabel = fildata.stglbl;
                        }
                        valigninfo.DataList.Add(fildata);
                    }
                }

                readerSrc.Close();
            }
            return(listvalign.ToArray());
        }
Esempio n. 4
0
        void write_valign()
        {
            short  elno, eltype, turn, gi;
            double sc, ec, t1, t2, ipx, ipy, l1, l2, xs, ys, xe, ye, g1, g2, del;

            elemnum        = 0;
            elno           = 0;
            eltype         = 0;
            turn           = 0;
            vcl1[0]        = 0.0;
            vcl2[0]        = 0.0;
            vcl1[vips - 1] = 0.0;
            vcl2[vips - 1] = 0.0;


            for (gi = 2; gi < vips; gi++)
            {
                elno++;
                eltype = 1;
                sc     = vip[gi - 2] + vcl2[gi - 2];
                ec     = vip[gi - 1] - vcl1[gi - 1];
                ipx    = vip[gi - 1];
                ipy    = level[gi - 1];
                t1     = vcl1[gi - 1];
                t2     = vcl2[gi - 1];
                l1     = (ec - sc) / 2.0; // only for straight grades
                l2     = (ec - sc) / 2.0;
                g1     = (level[gi - 1] - level[gi - 2]) / (vip[gi - 1] - vip[gi - 2]);
                g2     = (level[gi] - level[gi - 1]) / (vip[gi] - vip[gi - 1]);
                xs     = sc;
                ys     = level[gi - 2] + g1 * vcl2[gi - 2];
                xe     = ec;
                ye     = level[gi - 1] + (vcl1[gi - 1]) * (-1.0 * g1);
                del    = (g2 - g1) * 100.0;

                if (g1 >= 0 && g2 <= 0)
                {
                    turn = 2;
                }
                else if (g1 <= 0 && g2 >= 0)
                {
                    turn = 1;
                }
                else if (g1 >= 0 && g2 >= 0 && g1 > g2)
                {
                    turn = 2;
                }
                else if (g1 >= 0 && g2 >= 0 && g1 < g2)
                {
                    turn = 1;
                }
                else if (g1 <= 0 && g2 <= 0 && Math.Abs(g1) > Math.Abs(g2))
                {
                    turn = 1;
                }
                else if (g1 <= 0 && g2 <= 0 && Math.Abs(g1) < Math.Abs(g2))
                {
                    turn = 2;
                }

                elemnum++;
                CValignFilData data = new CValignFilData();
                data.modnam = modnam;
                data.stglbl = stglbl;
                data.elno   = elemnum;
                data.eltype = eltype;
                data.chn1   = sc;
                data.chn2   = ec;
                data.hipx   = ipx;
                data.hipy   = ipy;
                data.t1     = t1;
                data.t2     = t2;
                data.rad    = l1;
                data.l      = l2;
                data.xs     = xs;
                data.ys     = ys;
                data.xe     = xe;
                data.ye     = ye;
                data.b1     = (g1 * 100);
                data.b2     = (g2 * 100);
                data.del    = del;
                data.turn   = turn;


                fp2.WriteLine(data.ToString());
                //fprintf(fp2, "%s %s %d %d %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %d\n", modnam, stglbl, elemnum, eltype, sc, ec, ipx, ipy, t1, t2, l1, l2, xs, ys, xe, ye, g1 * 100, g2 * 100, del, turn);


                // Vertical Curve element

                elno++;
                eltype = 3;
                sc     = vip[gi - 1] - vcl1[gi - 1];
                ec     = vip[gi - 1] + vcl2[gi - 1];
                ipx    = vip[gi - 1];
                ipy    = level[gi - 1];
                t1     = vcl1[gi - 1];
                t2     = vcl2[gi - 1];
                if (vcl1[gi - 1] == 0.0)
                {
                    l1 = vcl2[gi - 1] / 2.0;
                    l2 = vcl2[gi - 1] / 2.0;
                }
                else
                {
                    l1 = vcl1[gi - 1];
                    l2 = vcl2[gi - 1];
                }
                g1  = (level[gi - 1] - level[gi - 2]) / (vip[gi - 1] - vip[gi - 2]);
                g2  = (level[gi] - level[gi - 1]) / (vip[gi] - vip[gi - 1]);
                xs  = sc;
                ys  = level[gi - 1] + (0 - g1) * vcl1[gi - 1];
                xe  = ec;
                ye  = level[gi - 1] + g2 * vcl2[gi - 1];
                del = (g2 - g1) * 100.0;

                if (g1 >= 0 && g2 <= 0)
                {
                    turn = 2;
                }
                else if (g1 <= 0 && g2 >= 0)
                {
                    turn = 1;
                }
                else if (g1 >= 0 && g2 >= 0 && g1 > g2)
                {
                    turn = 2;
                }
                else if (g1 >= 0 && g2 >= 0 && g1 < g2)
                {
                    turn = 1;
                }
                else if (g1 <= 0 && g2 <= 0 && Math.Abs(g1) > Math.Abs(g2))
                {
                    turn = 1;
                }
                else if (g1 <= 0 && g2 <= 0 && Math.Abs(g1) < Math.Abs(g2))
                {
                    turn = 2;
                }

                elemnum++;
                data        = new CValignFilData();
                data.modnam = modnam;
                data.stglbl = stglbl;
                data.elno   = elemnum;
                data.eltype = eltype;
                data.chn1   = sc;
                data.chn2   = ec;
                data.hipx   = ipx;
                data.hipy   = ipy;
                data.t1     = t1;
                data.t2     = t2;
                data.rad    = l1;
                data.l      = l2;
                data.xs     = xs;
                data.ys     = ys;
                data.xe     = xe;
                data.ye     = ye;
                data.b1     = (g1 * 100);
                data.b2     = (g2 * 100);
                data.del    = del;
                data.turn   = turn;

                fp2.WriteLine(data.ToString());
                //fprintf(fp2, "%s %s %d %d %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %d\n", modnam, stglbl, elemnum, eltype, sc, ec, ipx, ipy, t1, t2, l1, l2, xs, ys, xe, ye, g1 * 100, g2 * 100, del, turn);


                if (gi == vips - 1)
                {
                    // End straight grade element

                    //tmp1=vip[gi-1];
                    //tmp2=vcl2[gi-1];

                    elno++;
                    eltype = 1;
                    sc     = vip[gi - 1] + vcl2[gi - 1];
                    ec     = vip[gi];
                    ipx    = vip[gi];
                    ipy    = level[gi];
                    t1     = vcl1[gi - 1];
                    t2     = vcl2[gi - 1];
                    l1     = (ec - sc) / 2.0;
                    l2     = (ec - sc) / 2.0;
                    g1     = (level[gi - 1] - level[gi - 2]) / (vip[gi - 1] - vip[gi - 2]);
                    g2     = (level[gi] - level[gi - 1]) / (vip[gi] - vip[gi - 1]);
                    xs     = sc;
                    ys     = level[gi - 1] + g1 * vcl2[gi - 1];
                    xe     = ec;
                    ye     = level[gi];
                    del    = (g2 - g1) * 100.0;

                    if (g1 >= 0 && g2 <= 0)
                    {
                        turn = 2;
                    }
                    else if (g1 <= 0 && g2 >= 0)
                    {
                        turn = 1;
                    }
                    else if (g1 >= 0 && g2 >= 0 && g1 > g2)
                    {
                        turn = 2;
                    }
                    else if (g1 >= 0 && g2 >= 0 && g1 < g2)
                    {
                        turn = 1;
                    }
                    else if (g1 <= 0 && g2 <= 0 && Math.Abs(g1) > Math.Abs(g2))
                    {
                        turn = 1;
                    }
                    else if (g1 <= 0 && g2 <= 0 && Math.Abs(g1) < Math.Abs(g2))
                    {
                        turn = 2;
                    }

                    elemnum++;
                    data        = new CValignFilData();
                    data.modnam = modnam;
                    data.stglbl = stglbl;
                    data.elno   = elemnum;
                    data.eltype = eltype;
                    data.chn1   = sc;
                    data.chn2   = ec;
                    data.hipx   = ipx;
                    data.hipy   = ipy;
                    data.t1     = t1;
                    data.t2     = t2;
                    data.rad    = l1;
                    data.l      = l2;
                    data.xs     = xs;
                    data.ys     = ys;
                    data.xe     = xe;
                    data.ye     = ye;
                    data.b1     = (g1 * 100);
                    data.b2     = (g2 * 100);
                    data.del    = del;
                    data.turn   = turn;

                    fp2.WriteLine(data.ToString());
                    //fprintf(fp2, "%s %s %d %d %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %.5f %d\n", modnam, stglbl, elemnum, eltype, sc, ec, ipx, ipy, t1, t2, l1, l2, xs, ys, xe, ye, g1 * 100, g2 * 100, del, turn);
                } //gi == item-1
            }     // for loop
            fp2.Close();
        }
Esempio n. 5
0
        void GetDetailsFromExistingData(CValignInfo info, ref List <VVIP> listVipData)
        {
            double tx = 0, ty = 0, tgrade = 0, tv1 = 0;//, tv2 = 0;
            bool   tsym = true;

            listVipData.Clear();
            this.tbModelName_.Text   = info.ModelName;
            this.tbStringlabel_.Text = info.StringLabel;
            VVIP vd = null;

            for (int nLN = 0; nLN < info.DataList.Count; nLN++)
            {
                CValignFilData data = info.DataList[nLN];

                if (nLN == 0)
                {
                    if (data.eltype == 1)
                    {
                        vd        = new VVIP();
                        vd.chainx = data.xs;
                        vd.chainy = data.ys;
                        vd.grade  = data.b1;
                        if (data.rad != data.l)
                        {
                            vd.sym  = false;
                            vd.vcl1 = data.rad;
                            vd.vcl2 = data.l;
                        }
                        else
                        {
                            vd.sym  = true;
                            vd.vcl1 = data.rad + data.l;
                            vd.vcl2 = 0.0;
                        }

                        vd.vcl1 = 0.0;
                        vd.vcl2 = 0.0;
                        listVipData.Add(vd);
                    }
                }
                else
                {
                    if (data.eltype == 3)
                    {
                        vd = new VVIP();

                        vd.chainx = data.hipx;
                        vd.chainy = data.hipy;
                        vd.grade  = data.b1;
                        if (data.rad != data.l)
                        {
                            vd.sym  = false;
                            vd.vcl1 = data.rad;
                            vd.vcl2 = data.l;
                        }
                        else
                        {
                            vd.sym  = true;
                            vd.vcl1 = data.rad + data.l;
                            vd.vcl2 = 0.0;
                        }

                        listVipData.Add(vd);
                    }
                    else // if eltype == 1
                    { // for last line
                        tx     = data.xe;
                        ty     = data.ye;
                        tgrade = data.b2;
                        tsym   = true;
                        tv1    = data.l;
                        //tv2 = 0;
                    }
                }
            }

            vd = new VVIP();

            vd.chainx = tx;
            vd.chainy = ty;
            vd.grade  = tgrade;
            vd.sym    = tsym;
            vd.vcl1   = 0; //tv1;
            vd.vcl2   = 0; //tv2;

            listVipData.Add(vd);
        }