getAlignEntData(Alignment align) { List <AlgnEntData> algnData = new List <AlgnEntData>(); AlignmentEntityCollection ents = align.Entities; foreach (AlignmentEntity ent in ents) { AlgnEntData aData = new AlgnEntData(); if (ent.EntityType == AlignmentEntityType.Arc) { AlignmentArc arc = (AlignmentArc)ent; aData.ID = arc.EntityId; aData.Type = "Arc"; aData.StaBeg = arc.StartStation; aData.StaEnd = arc.EndStation; aData.Length = arc.Length; aData.Radius = arc.Radius; try { aData.EntBefore = arc.EntityBefore; } catch { aData.EntBefore = 0; } } else if (ent.EntityType == AlignmentEntityType.Line) { AlignmentLine line = (AlignmentLine)ent; aData.ID = line.EntityId; aData.Type = "Line"; aData.StaBeg = line.StartStation; aData.StaEnd = line.EndStation; aData.Length = line.Length; aData.Radius = 0; try { aData.EntBefore = line.EntityBefore; } catch { aData.EntBefore = 0; } } algnData.Add(aData); } return(algnData); }
getAlgnEntData(Alignment objAlign) { //-----------------------------------------------Collect alignment segment data----------------------------------------------- AlgnEntData algnEntData = default(AlgnEntData); List <AlgnEntData> algnEntDataList = new List <AlgnEntData>(); //data for alignment entities in order occurance in alignment not by ID AlignmentEntityCollection alignEnts = objAlign.Entities; int k = alignEnts.Count; foreach (AlignmentEntity alignEnt in alignEnts) { algnEntData = new AlgnEntData(); if (alignEnt.EntityType == AlignmentEntityType.Arc) { AlignmentArc alignEntArc = alignEnt as AlignmentArc; try { algnEntData.EntBefore = alignEntArc.EntityBefore; } catch (Autodesk.Civil.EntityNotFoundException) { algnEntData.EntBefore = 0; } algnEntData.ID = alignEntArc.EntityId; algnEntData.Length = alignEntArc.Length; algnEntData.Radius = alignEntArc.Radius; algnEntData.Direction = 0; algnEntData.ClockWise = alignEntArc.Clockwise; algnEntData.StaBeg = alignEntArc.StartStation; algnEntData.StaEnd = alignEntArc.EndStation; algnEntData.Type = "Arc"; algnEntData.pnt2dBeg = alignEntArc.StartPoint; algnEntData.pnt2dEnd = alignEntArc.EndPoint; } else if (alignEnt.EntityType == AlignmentEntityType.Line) { AlignmentLine alignEntLine = alignEnt as AlignmentLine; try { algnEntData.EntBefore = alignEntLine.EntityBefore; } catch (Autodesk.Civil.EntityNotFoundException) { algnEntData.EntBefore = 0; } algnEntData.ID = alignEntLine.EntityId; algnEntData.Length = alignEntLine.Length; algnEntData.Radius = 0; algnEntData.Direction = alignEntLine.Direction; algnEntData.StaBeg = alignEntLine.StartStation; algnEntData.StaEnd = alignEntLine.EndStation; algnEntData.Type = "Line"; algnEntData.pnt2dBeg = alignEntLine.StartPoint; algnEntData.pnt2dEnd = alignEntLine.EndPoint; } algnEntDataList.Add(algnEntData); } for (int i = 0; i < algnEntDataList.Count - 1; i++) { AlgnEntData algnEnt0 = algnEntDataList[i]; AlgnEntData algnEntX = algnEntDataList[i + 1]; Vector2d v2d0 = algnEnt0.pnt2dEnd - algnEnt0.pnt2dBeg; Vector2d v2dX = algnEntX.pnt2dEnd - algnEntX.pnt2dBeg; double ang3pnts = Geom.getAngle3Points2d(algnEnt0.pnt2dBeg, algnEnt0.pnt2dEnd, algnEntX.pnt2dEnd); algnEnt0.AngDeflection = v2d0.getDeflectionAngle2Vectors(v2dX); if (Geom.testRight(algnEnt0.pnt2dBeg, algnEnt0.pnt2dEnd, algnEntX.pnt2dEnd) < 0) { algnEnt0.AngDeflection *= -1; } algnEntDataList[i] = algnEnt0; } return(algnEntDataList); }
private void cmdUpdate_Click(object sender, EventArgs e) { Control cntrl; ControlCollection cntrls = (ControlCollection)this.Controls; List <AlgnEntData> algnData = new List <AlgnEntData>(); int k = cntrls.Count; k = (k - 9) / 1 - 1; Object[,] varData = new object[k, 6]; for (int i = 0; i < cntrls.Count; i++) { cntrl = cntrls[i]; if (cntrl.Name.Contains("lbl")) { int id = int.Parse(cntrl.Name.Substring(4, 1)); int idx = id + 2; varData[id, idx] = cntrl.Text; } } AlgnEntData aData; for (int i = 0; i < k; i++) { aData = new AlgnEntData(); aData.ID = int.Parse(varData[i, 1].ToString()); aData.Type = varData[i, 2].ToString(); aData.StaBeg = double.Parse(varData[i, 3].ToString()); aData.StaEnd = double.Parse(varData[i, 4].ToString()); aData.Length = double.Parse(varData[i, 5].ToString()); aData.Radius = double.Parse(varData[i, 6].ToString()); algnData.Add(aData); } Alignment align = (Alignment)idAlign.getEnt(); AlignmentEntityCollection ents = align.Entities; bool changed = false; for (int i = 0; i < ents.Count; i++) { AlignmentEntity ent = ents[i]; if (ent.EntityType == AlignmentEntityType.Arc) { if (algnData[1].Radius == 0) { ents.Remove(ent); changed = true; } } else { AlignmentArc arc = (AlignmentArc)ent; if (!arc.Radius.Equals(algnData[i].Radius)) { arc.Radius = algnData[i].Radius; changed = true; } } if (changed) { this.Close(); MNP_Align.editAlign(align.ObjectId); } } }
listAlignEnts(Alignment objAlign) { AlignmentEntity objAlignEnt = default(AlignmentEntity); AlignmentLine objAlignEntTan = default(AlignmentLine); AlignmentArc objAlignEntArc = default(AlignmentArc); List <AlgnEntData> varAlignData = null; List <AlgnEntData> varAlignDataX = null; int lngBefore = 0; AlignmentEntityCollection ents = objAlign.Entities; for (int i = 0; i < ents.Count; i++) { objAlignEnt = ents[i]; AlgnEntData alignData = new AlgnEntData(); if (objAlignEnt.EntityType == AlignmentEntityType.Arc) { objAlignEntArc = (AlignmentArc)objAlignEnt; alignData.ID = objAlignEntArc.EntityId; alignData.Type = "Arc"; alignData.StaBeg = System.Math.Round(objAlignEntArc.StartStation, 2); alignData.StaEnd = System.Math.Round(objAlignEntArc.EndStation, 2); alignData.Length = System.Math.Round(objAlignEntArc.Length, 2); alignData.Radius = System.Math.Round(objAlignEntArc.Radius, 2); alignData.EntBefore = objAlignEntArc.EntityBefore; varAlignData.Add(alignData); } else if (objAlignEnt.EntityType == AlignmentEntityType.Line) { objAlignEntTan = (AlignmentLine)objAlignEnt; alignData.ID = objAlignEntTan.EntityId; alignData.Type = "Tangent"; alignData.StaBeg = System.Math.Round(objAlignEntTan.StartStation, 2); alignData.StaEnd = System.Math.Round(objAlignEntTan.EndStation, 2); alignData.Length = System.Math.Round(objAlignEntTan.Length, 2); alignData.Radius = 0.0; alignData.EntBefore = objAlignEntTan.EntityBefore; varAlignData.Add(alignData); } } int n = -1; int k = 0; do { for (int i = 0; i < ents.Count; i++) { if (varAlignData[i].EntBefore == lngBefore) { n += 1; //n is index for new list varAlignDataX[n] = varAlignData[i]; k = i; break; } } lngBefore = varAlignData[k].ID; }while (n < ents.Count); return(varAlignDataX); }