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; } }
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(); } }
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()); }
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(); }
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); }