selectAlignment(ObjectId idAlign) { Alignment objAlign = (Alignment)idAlign.getEnt(); AlgnData alignData = new AlgnData(); AlgnData alignDataX = new AlgnData(); Point3d pnt3dPicked = Pub.pnt3dO; string nameAlign = ""; if ((idAlign == null)) { idAlign = Align.selectAlign("\nSelect Alignment: ", "Alignment Selection Failed", out pnt3dPicked, out nameAlign); } ResultBuffer rb = idAlign.getXData("PROFILE"); if (rb == null) { return(false); } TypedValue[] tvs = rb.AsArray(); fStake.HandleProfileView = tvs[1].Value.ToString().stringToHandle(); rb = idAlign.getXData("CLASS"); if (rb == null) { return(false); } tvs = rb.AsArray(); string strClass = tvs[1].Value.ToString(); fStake.ClassObj = strClass; Alignment align = (Alignment)idAlign.getEnt(); fStake.ACTIVEALIGN = align; fStake.HandleAlign = idAlign.getHandle(); fStake.objectID = idAlign; int result = 0; for (int i = nameAlign.Length - 1; i >= 1; i += -1) { if (!nameAlign.Substring(i, 1).isInteger(out result)) { fStake.NameStakeObject = nameAlign.Substring(0, i); break; } } ObjectId idTable = ObjectId.Null; Table table = null; try { idTable = Stake_Table.getTableId(idAlign); } catch (System.Exception) { try { SelectionSet ss = Select.buildSSet(typeof(Table)); ObjectId[] ids = ss.GetObjectIds(); using (Transaction tr = BaseObjs.startTransactionDb()) { for (int i = 0; i < ids.Length; i++) { table = (Table)tr.GetObject(ids[i], OpenMode.ForRead); if (table.Cells[1, 1].Value.ToString() == nameAlign) { TypedValue[] t = new TypedValue[2]; t.SetValue(new TypedValue(1001, "TABLE"), 0); t.SetValue(new TypedValue(1005, ids[i].getHandle()), 1); idAlign.setXData(t, "TABLE"); break; } } } } catch (System.Exception) { Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Select Table Failed"); } } switch (fStake.algnData.Count) { case 0: alignData.AlignHandle = align.Handle; alignData.TableHandle = table.Handle; alignData.AlignID = idAlign; alignData.AlignName = nameAlign; alignData.AlignLayer = align.Layer; fStake.algnData.Add(alignData); break; case 1: alignData = fStake.algnData[0]; if (alignData.AlignHandle == align.Handle) { alignData.TableHandle = table.Handle; } else { alignDataX.AlignHandle = align.Handle; alignDataX.TableHandle = table.Handle; alignDataX.AlignID = idAlign; alignDataX.AlignName = align.Name; alignDataX.AlignLayer = align.Layer; fStake.algnData.Add(alignDataX); } break; default: bool boolFound = false; for (int i = fStake.algnData.Count; i > 1; i--) { alignDataX = fStake.algnData[i - 1]; alignData = fStake.algnData[i]; if (alignDataX.AlignHandle == alignData.AlignHandle) { fStake.algnData.RemoveAt(i); } } for (int i = 1; i < fStake.algnData.Count; i++) { alignData = fStake.algnData[i]; if (alignData.AlignHandle == objAlign.Handle) { alignData.TableHandle = idTable.getHandle(); boolFound = true; } } if (!boolFound) { alignDataX.AlignHandle = objAlign.Handle; alignDataX.TableHandle = idTable.getHandle(); alignDataX.AlignID = idAlign; alignDataX.AlignName = objAlign.Name; alignDataX.AlignLayer = objAlign.Layer; fStake.algnData.Add(alignDataX); } break; } fStake.POI_CALC = Stake_Table.resetPOI(idTable); Stake_Misc.set_fStakeProps(strClass); if (strClass == "BLDG") { Stake_Grid.updateGridCollections(objAlign.Name); Application.ShowModelessDialog(Application.MainWindow.Handle, fGrid, false); fStake.Hide(); } fStake.ACTIVEALIGN = objAlign; return(true); }
stakePoints(object varStaBeg = null, object varStaEnd = null, object varSide = null, object varBegNum = null) { string strClass = fStake.ClassObj; Alignment objAlign = null; try { objAlign = fStake.ACTIVEALIGN; } catch (System.Exception) { if (Stake_Algn.selectAlignment(ObjectId.Null)) { objAlign = fStake.ACTIVEALIGN; } else { return; } } ObjectId idAlign = objAlign.ObjectId; fStake.STAKE_LAYER = fStake.cboOffset.Text + "-OS-" + objAlign.Name; ObjectId idTable = Stake_Table.getTableId(idAlign); List <POI> varpoi = Stake_Table.resetPOI(idTable); fStake.POI_CALC = varpoi; fStake.objectID = objAlign.ObjectId; int intSide = 0; double dblStation = 0, dblOffset = 0; if ((varSide == null)) { if (double.Parse(fStake.cboOffset.Text) != 0) { PromptStatus ps; Point3d varPntPick = Pub.pnt3dO; try { varPntPick = UserInput.getPoint("\nSelect side to place stake points: <ESC to Cancel>", out ps, osMode: 0); } catch (System.Exception) { return; ; } idAlign.getAlignStaOffset(varPntPick, ref dblStation, ref dblOffset); if (System.Math.Abs(dblOffset) > 10.0) { string message = string.Format("Point selected is more than 10' from Alignment: {0} Continue", objAlign.Name); DialogResult varResponse = MessageBox.Show(message, "Confirm stakng target.", MessageBoxButtons.YesNo); if (varResponse == DialogResult.No) { return; } else { if (dblOffset < 0) { intSide = -1; } else { intSide = 1; } fStake.Side = intSide; } } else { if (dblOffset < 0) { intSide = -1; } else { intSide = 1; } fStake.Side = intSide; } } else { fStake.Side = 1; } } else { intSide = int.Parse(varSide.ToString()); } dblOffset = double.Parse(fStake.cboOffset.Text); string strName = fStake.NameStakeObject; var sortSta = from p in varpoi //sort stations orderby p.Station ascending select p; List <POI> poiTmp = new List <POI>(); foreach (var p in sortSta) { poiTmp.Add(p); } varpoi = poiTmp; double dblStaBeg = Math.roundDown3((objAlign.StartingStation)); double dblStaEnd = Math.roundDown3((objAlign.EndingStation)); List <POI> varPOI_TOF = null; List <POI> varPOI_TOW = null; Profile objProfile = null; switch (strClass) { case "WTR": objProfile = Prof.getProfile(idAlign, "CPNT"); break; case "WALL": for (int i = 0; i < varpoi.Count; i++) { if (varpoi[i].Desc0 == "TOF") { varPOI_TOF.Add(varpoi[i]); } else if (varpoi[i].Desc0 == "TOW") { varPOI_TOW.Add(varpoi[i]); } } break; default: objProfile = Prof.getProfile(idAlign, "STAKE"); break; } List <POI> varPOI_TMP = new List <POI>(); if (strClass == "WALL") { Stake_GetStationing.getStationing(ref varPOI_TOF, dblStaBeg, dblStaEnd); Stake_GetStationing.getStationing(ref varPOI_TOW, dblStaBeg, dblStaEnd); for (int i = 0; i < varPOI_TOF.Count; i++) { varPOI_TMP.Add(varPOI_TOF[i]); } for (int j = 0; j < varPOI_TOW.Count; j++) { varPOI_TMP.Add(varPOI_TOW[j]); } varpoi = varPOI_TMP; } else { Stake_GetCardinals.checkBegAndEndDesc(idAlign, ref varpoi); Stake_GetStationing.getStationing(ref varpoi, dblStaBeg, dblStaEnd); } poiTmp = new List <POI>(); foreach (var p in sortSta) //sort stations { poiTmp.Add(p); } varpoi = poiTmp; uint lngPntNumBeg = Stake_Util.getBegPntNum(); fStake.POI_STAKED = new List <POI>(); List <POI> varPOI_STAKE = new List <POI>(); if (strClass == "BLDG") { varPOI_STAKE = fStake.POI_STAKE; } else { if ((varStaBeg == null)) { varPOI_STAKE = varpoi; } else { for (int i = 0; i < varpoi.Count; i++) { if (varpoi[i].Station >= double.Parse(varStaBeg.ToString()) && varpoi[i].Station <= double.Parse(varStaEnd.ToString())) { varPOI_STAKE.Add(varpoi[i]); } } } } for (int i = 0; i < varPOI_STAKE.Count; i++) { Debug.Print(varPOI_STAKE[i].Station + " " + varPOI_STAKE[i].Desc0); } POI poi = new POI(); double dblElev = 0, dblEasting = 0, dblNorthing = 0; string strDesc = "", strOffset = ""; Point3d dblPnt = Pub.pnt3dO; for (int i = 0; i < varPOI_STAKE.Count; i++) { //**********PROCESS varPOI_STAKE********************* if (varPOI_STAKE[i].DescX == "") { poi = varPOI_STAKE[i]; poi.DescX = varPOI_STAKE[i].Desc0; varPOI_STAKE[i] = poi; } switch (varPOI_STAKE[i].ClassObj) { case "WALL": if (varPOI_STAKE[i].Desc0 == "TOW") { dblElev = varPOI_STAKE[i].ElevTOW; } else if (varPOI_STAKE[i].Desc0 == "TOF") { dblElev = varPOI_STAKE[i].ElevTOF; } switch (varPOI_STAKE[i].Desc0) { case "AP": if (varPOI_STAKE[i].DescX.Contains("END")) { switch (intSide) { case 1: //right side if (varPOI_STAKE[i].isRightHand) { //counterclockwise doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } else { //clockwise doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } break; case -1: //left side if (varPOI_STAKE[i].isRightHand) { //counterclockwise doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } else { //clockwise doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } break; } } break; case "BC": case "EC": doCurve(ref i, idAlign, objProfile, varPOI_STAKE, intSide, dblOffset, strName); break; default: strDesc = varPOI_STAKE[i].DescX; if (string.IsNullOrEmpty(strDesc)) { strDesc = varPOI_STAKE[i].Desc0; } try { idAlign.getAlignPointLoc(varPOI_STAKE[i].Station, dblOffset * intSide, ref dblEasting, ref dblNorthing); } catch (System.Exception) { idAlign.getAlignPointLoc(varPOI_STAKE[i].Station - 0.01, dblOffset * intSide, ref dblEasting, ref dblNorthing); } dblPnt = new Point3d(dblEasting, dblNorthing, dblElev); strOffset = dblOffset.ToString(); setOffsetPoint(dblPnt, strOffset, strName, strDesc, idAlign, varPOI_STAKE[i].Station); break; } break; case "WTR": dblElev = System.Math.Round(objProfile.ElevationAt(Math.roundDown3(varPOI_STAKE[i].Station)), 2); switch (varPOI_STAKE[i].Desc0.Substring(0, 2)) { case "TE": if (varPOI_STAKE[i].Side == intSide) { set5x5(idAlign, dblElev, varPOI_STAKE[i].Station, dblOffset, intSide, strName, varPOI_STAKE[i].DescX); } else { idAlign.getAlignPointLoc(varPOI_STAKE[i].Station, dblOffset * intSide, ref dblEasting, ref dblNorthing); dblPnt = new Point3d(dblEasting, dblNorthing, dblElev); strOffset = dblOffset.ToString(); setOffsetPoint(dblPnt, strOffset, strName, varPOI_STAKE[i].DescX, idAlign, varPOI_STAKE[i].Station); } break; case "AP": switch (intSide) { case 1: //right side //counterclockwise if (varPOI_STAKE[i].isRightHand) { doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); //clockwise } else { doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } break; case -1: //left side //counterclockwise if (varPOI_STAKE[i].isRightHand) { doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); //clockwise } else { doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } break; } break; default: idAlign.getAlignPointLoc(varPOI_STAKE[i].Station, dblOffset * intSide, ref dblEasting, ref dblNorthing); dblPnt = new Point3d(dblEasting, dblNorthing, dblElev); strOffset = dblOffset.ToString(); double dblCrossingInv = 0; string strCrossingInv = ""; if (varPOI_STAKE[i].CrossAlign != "") { if (varPOI_STAKE[i].CrossAlignInv != 0) { dblCrossingInv = System.Math.Round(varPOI_STAKE[i].CrossAlignInv, 2); strCrossingInv = string.Format("{0} INV.", dblCrossingInv); } else { strCrossingInv = ""; } ASCIIEncoding ascii = new ASCIIEncoding(); string strAlignDesc = string.Format("{0}{1}%%C PIPE {2}", varPOI_STAKE[i].CrossAlignSize, ascii.GetString(new Byte[] { (Byte)34 }), strCrossingInv); setOffsetPoint(dblPnt, strOffset, strName, strAlignDesc, idAlign, varPOI_STAKE[i].Station); } else { setOffsetPoint(dblPnt, strOffset, strName, varPOI_STAKE[i].DescX, idAlign, varPOI_STAKE[i].Station); if (varPOI_STAKE[i].Type != "") { setOffsetPoint(dblPnt, strOffset, strName, varPOI_STAKE[i].Type, idAlign, varPOI_STAKE[i].Station, " INV="); } } break; } break; case "CURB": case "FL": dblElev = System.Math.Round(objProfile.ElevationAt(Math.roundDown3(varPOI_STAKE[i].Station)), 2); switch (varPOI_STAKE[i].Desc0) { case "AP": if (varPOI_STAKE[i].DescX.Contains("END")) { switch (intSide) { case 1: //right side if (varPOI_STAKE[i].isRightHand) { //counterclockwise doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } else { //clockwise doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } break; case -1: //left side if (varPOI_STAKE[i].isRightHand) { //counterclockwise doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } else { //clockwise doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, intSide, dblOffset); } break; } } break; case "BC": case "EC": doCurve(ref i, idAlign, objProfile, varPOI_STAKE, intSide, dblOffset, strName); break; default: strDesc = varPOI_STAKE[i].DescX; // If strDesc = "" Then // strDesc = varPOI_Stake[i].Desc0 // End If try { idAlign.getAlignPointLoc(varPOI_STAKE[i].Station, dblOffset * intSide, ref dblEasting, ref dblNorthing); } catch (System.Exception) { idAlign.getAlignPointLoc(varPOI_STAKE[i].Station - 0.01, dblOffset * intSide, ref dblEasting, ref dblNorthing); } dblPnt = new Point3d(dblEasting, dblNorthing, dblElev); strOffset = dblOffset.ToString(); setOffsetPoint(dblPnt, strOffset, strName, strDesc, idAlign, varPOI_STAKE[i].Station); break; } break; case "ALIGN": case "SEWER": dblElev = System.Math.Round(objProfile.ElevationAt(Math.roundDown3(varPOI_STAKE[i].Station)), 2); if (varPOI_STAKE[i].Desc0 == "BC") { setRadiusPoint(idAlign, varPOI_STAKE[i], varPOI_STAKE[i].Radius, strName); } try { idAlign.getAlignPointLoc(varPOI_STAKE[i].Station, dblOffset * intSide, ref dblEasting, ref dblNorthing); } catch (System.Exception) { } dblPnt = new Point3d(dblEasting, dblNorthing, dblElev); strOffset = dblOffset.ToString(); setOffsetPoint(dblPnt, strOffset, strName, varPOI_STAKE[i].Desc0, idAlign, varPOI_STAKE[i].Station); break; } } List <POI> varPOI_STAKED = fStake.POI_STAKED; int intUBnd = varPOI_STAKED.Count - 1; uint lngPntNumEnd = uint.Parse(varPOI_STAKED[intUBnd].PntNum); TypedValue[] tvs = new TypedValue[4] { new TypedValue(1001, "STAKE"), new TypedValue(1071, lngPntNumBeg), new TypedValue(1071, lngPntNumEnd), new TypedValue(1000, fStake.STAKE_LAYER) }; idAlign.setXData(tvs, "STAKE"); CgPnt_Group.updatePntGroup("SPNT"); Stake_UpdateProfile.updateProfile(idAlign, (fStake.POI_STAKED), "STAKE", true, "STAKED"); bool exists = false; ObjectId idDict = Dict.getNamedDictionary("STAKE_PNTS", out exists); List <Point3d> dblPnts = new List <Point3d>(); Point3d pnt3d = Pub.pnt3dO; uint lngPntNum = 0; for (int p = 0; p < varPOI_STAKED.Count; p++) { string varPntNum = varPOI_STAKED[p].PntNum; int intPos = varPntNum.IndexOf(" "); if (intPos != 0) { lngPntNum = uint.Parse(varPntNum.Substring(0, intPos - 1)); } else { lngPntNum = uint.Parse(varPntNum); } ObjectId idPnt = BaseObjs._civDoc.CogoPoints.GetPointByPointNumber(uint.Parse(varPOI_STAKED[p].PntNum)); pnt3d = idPnt.getCogoPntCoordinates(); dblPnts.Add(pnt3d); ResultBuffer rb = new ResultBuffer { new TypedValue(1000, idPnt.getCogoPntNumber().ToString()), new TypedValue(1005, idPnt.getHandle().ToString()) }; Dict.addXRec(idDict, idPnt.ToString(), rb); } dblPnts.Add(dblPnts[0]); Misc.logUsage("STAKE", (lngPntNumEnd - lngPntNumBeg + 1)); }