stakeMISC(string strCommand) { TinSurface objSurface = fStake.SurfaceCPNT; string strLayer = fMisc.tbxLayer.Text; string strDesc = fMisc.tbxDesc0.Text + fMisc.tbxDescription.Text; PromptStatus ps; bool escape; switch (strCommand) { case "InLine_Center": BaseObjs.acadActivate(); Point3d pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8); Point3d pnt3dPick = UserInput.getPoint("\nSelect Directional Point(any XY location): ", pnt3dTar, out escape, out ps, osMode: 8); double dblAngDir1 = pnt3dTar.getDirection(pnt3dPick); Point3d pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text)); double dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y); Point3d pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); pnt3dPolar = pnt3dTar.traverse(dblAngDir1 + PI, double.Parse(fMisc.cbxOffset.Text)); pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text)); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); break; case "InLine_Direction": BaseObjs.acadActivate(); pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8); pnt3dPick = UserInput.getPoint("\nSelect Directional Point(any XY location): ", pnt3dTar, out escape, out ps, osMode: 8); dblAngDir1 = pnt3dTar.getDirection(pnt3dPick); pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text)); dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); if (double.Parse(fMisc.cbxOffsetDir.Text) == 0) { Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Direction Offset is 0 - revise....exiting"); return; } pnt3dPolar = pnt3dTar.traverse(dblAngDir1, double.Parse(fMisc.cbxOffset.Text) + double.Parse(fMisc.cbxOffsetDir.Text)); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); strDesc = string.Format("{0}' O/S {1} @", double.Parse(fMisc.cbxOffset.Text) + double.Parse(fMisc.cbxOffsetDir.Text), fMisc.cbxObjType.Text); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); break; case "Proj2Curb": BaseObjs.acadActivate(); pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8); string xRefPath = ""; Entity ent = xRef.getEntity("\nSelect Adjacent Curb:", out escape, out xRefPath); Point3d pnt3dInt0 = getRadial_Perpendicular(pnt3dTar, ent); ent.ObjectId.delete(); dblAngDir1 = pnt3dTar.getDirection(pnt3dInt0); pnt3dPolar = pnt3dInt0.traverse(dblAngDir1 + PI / 2, double.Parse(fMisc.cbxOffset.Text)); dblElev = objSurface.FindElevationAtXY(pnt3dInt0.X, pnt3dInt0.Y); dblElev = dblElev + double.Parse(fMisc.cbxCurbHeight.Text) / 12; pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); pnt3dPolar = pnt3dInt0.traverse(dblAngDir1 - PI / 2, double.Parse(fMisc.cbxOffset.Text)); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); break; case "Proj2Bldg": BaseObjs.acadActivate(); pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8); Point3d pnt3dRef1 = UserInput.getPoint("Pick Point Perpendicular to Building: ", pnt3dTar, out escape, out ps, osMode: 8); dblAngDir1 = pnt3dTar.getDirection(pnt3dRef1); pnt3dPolar = pnt3dRef1.traverse(dblAngDir1 + PI / 2, double.Parse(fMisc.cbxOffset.Text)); dblElev = objSurface.FindElevationAtXY(pnt3dRef1.X, pnt3dRef1.Y); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); pnt3dPolar = pnt3dRef1.traverse(dblAngDir1 - PI / 2, double.Parse(fMisc.cbxOffset.Text)); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); break; case "AP": BaseObjs.acadActivate(); pnt3dTar = UserInput.getPoint("\nSelect Target Point for Staking: ", out ps, osMode: 8); pnt3dRef1 = UserInput.getPoint("\nSelect Adjacent Angle Point1: ", out ps, osMode: 1); Point3d pnt3dRef2 = UserInput.getPoint("\nSelect Adjacent Angle Point2: ", out ps, osMode: 1); Point3d varPntPick = UserInput.getPoint("\nSelect Side: ", out ps, osMode: 0); double dblAngDelta = Geom.getAngle3Points(pnt3dRef1, pnt3dTar, pnt3dRef2); dblAngDir1 = pnt3dRef1.getDirection(pnt3dTar); double dblAngDir2 = pnt3dTar.getDirection(pnt3dRef2); bool isRightHand = (pnt3dTar.isRightSide(pnt3dRef1, pnt3dRef2)) ? true : false; pnt3dPolar = varPntPick.traverse(dblAngDir1 + PI / 2, 10); List <Point3d> pnts3d1 = new List <Point3d> { pnt3dRef1, pnt3dTar }; List <Point3d> pnts3d2 = new List <Point3d> { varPntPick, pnt3dPolar }; List <Point3d> pnts3dInt = pnts3d1.intersectWith(pnts3d2, false, extend.both); if (pnts3dInt.Count == 0) { return; } bool boolHit = false, boolIN = false; int intSide = 0; //PICK POINT ADJACENT TO FIRST SEGMENT if (pnt3dTar.isRightSide(pnt3dRef1, varPntPick)) { //CCW if (isRightHand) { boolIN = true; intSide = -1; //CW } else { boolIN = false; intSide = -1; } boolHit = true; } else { //RIGHT SIDE OF FIRST SEGMENT //CCW if (isRightHand) { boolIN = false; intSide = 1; } else { boolIN = true; //CW intSide = 1; } boolHit = true; } if (!boolHit) { pnt3dPolar = varPntPick.traverse(dblAngDir2 + PI / 2, 10); pnts3d1 = new List <Point3d> { pnt3dRef2, pnt3dTar }; pnts3d2 = new List <Point3d> { varPntPick, pnt3dPolar }; List <Point3d> pnts3dInt2 = pnts3d1.intersectWith(pnts3d2, false, extend.both); //PICK POINT ADJACENT TO SECOND SEGMENT //LEFT SIDE OF SECOND SEGMENT if (pnt3dRef2.isRightSide(pnt3dTar, varPntPick)) { //CCW if (isRightHand) { boolIN = true; intSide = -1; //CW } else { boolIN = false; intSide = -1; } //RIGHT SIDE OF SECOND SEGMENT } else { //CCW if (isRightHand) { boolIN = false; intSide = 1; //CW } else { boolIN = true; intSide = 1; } } } if (boolIN) { pnt3dPolar = pnt3dTar.traverse(dblAngDir2 + dblAngDelta / 2 * intSide * -1, Convert.ToDouble(fMisc.cbxOffset.Text) / System.Math.Sin(dblAngDelta / 2)); dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); } else { pnt3dPolar = pnt3dTar.traverse(dblAngDir2 + ((3 * PI / 2 - dblAngDelta) * intSide * -1), Convert.ToDouble((fMisc.cbxOffset).Text)); //point opposite begin point of next segment dblElev = objSurface.FindElevationAtXY(pnt3dTar.X, pnt3dTar.Y); pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); pnt3dPolar = pnt3dTar.traverse(dblAngDir2 + (PI / 2 * intSide * -1), Convert.ToDouble((fMisc.cbxOffset).Text)); //point opposite begin point of next segment pnt3d = new Point3d(pnt3dPolar.X, pnt3dPolar.Y, dblElev); Stake_Calc.setOffsetPointMISC(pnt3d, strLayer, strDesc); } break; } }
stakeGridPoints(ObjectId idAlign, List <POI> varPOI_STAKE, double staBeg = 0, double staEnd = 0, int side = 0, long begNum = 30000) { Alignment objAlign = (Alignment)idAlign.getEnt(); double dblStation = 0, dblOffset = 0; if ((side == 0)) { if (double.Parse(fGrid.tbxOffsetH.Text) != 0) { PromptStatus ps; bool escape = true; Point3d varPntPick = UserInput.getPoint("Select side to place stake points: <ESC to Cancel>", Pub.pnt3dO, out escape, out ps, osMode: 8); if (escape) { return; } objAlign.StationOffset(varPntPick.X, varPntPick.Y, ref dblStation, ref dblOffset); if (System.Math.Abs(dblOffset) > 20.0) { DialogResult varResponse = MessageBox.Show(string.Format("\nPoint selected is more than 20' from Alignment: {0} \nContinue?", objAlign.Name, MessageBoxButtons.YesNo)); if (varResponse == DialogResult.No) { return; } } if (dblOffset < 0) { side = -1; } else { side = 1; } fStake.Side = side; } else { fStake.Side = 1; } } else { fStake.Side = side; } fStake.STAKE_LAYER = fGrid.tbxOffsetH.Text + "-OS-" + objAlign.Name; dblOffset = double.Parse(fGrid.tbxOffsetH.Text); string strName = fStake.NameStakeObject; double dblStaBeg = Math.roundDown3((objAlign.StartingStation)); double dblStaEnd = Math.roundDown3((objAlign.EndingStation)); uint lngPntNumBeg = Stake_Util.getBegPntNum(); fStake.NextPntNum = lngPntNumBeg; CogoPointCollection cgPnts = CivilApplication.ActiveDocument.CogoPoints; fStake.POI_STAKED = new List <POI>(); //**********PROCESS varPOI_STAKE********************* for (int i = 0; i <= varPOI_STAKE.Count; i++) { if (varPOI_STAKE[i].DescX == "") { POI vPOI_STAKE = varPOI_STAKE[i]; vPOI_STAKE.DescX = vPOI_STAKE.Desc0; varPOI_STAKE[i] = vPOI_STAKE; } if (i == varPOI_STAKE.Count - 1) { break; } double dblElev = varPOI_STAKE[i].Elevation; switch (varPOI_STAKE[i].Desc0) { case "AP": switch (side) { case 1: //right side //counterclockwise if (varPOI_STAKE[i].isRightHand) { if (fGrid.optPBC.Checked) { Stake_Calc.doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset); } else if (fGrid.optRBC.Checked) { Stake_Calc.doAnglePointOUT_RBC(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset); } //clockwise } else { Stake_Calc.doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset); } break; case -1: //left side //counterclockwise if (varPOI_STAKE[i].isRightHand) { Stake_Calc.doAnglePointIN(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset); //clockwise } else { if (fGrid.optPBC.Checked) { Stake_Calc.doAnglePointOUT(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset); } else if (fGrid.optRBC.Checked) { Stake_Calc.doAnglePointOUT_RBC(idAlign, dblElev, varPOI_STAKE[i].Station, varPOI_STAKE[i].AngDelta, varPOI_STAKE[i].AngDir, varPOI_STAKE[i].DescX, strName, side, dblOffset); } } break; } break; default: string strDesc = varPOI_STAKE[i].DescX; double dblEasting = 0, dblNorthing = 0; try { objAlign.PointLocation(varPOI_STAKE[i].Station, dblOffset * side, ref dblEasting, ref dblNorthing); } catch (IndexOutOfRangeException) { try { objAlign.PointLocation(varPOI_STAKE[i].Station - 0.01, dblOffset * side, ref dblEasting, ref dblNorthing); } catch (IndexOutOfRangeException) { objAlign.PointLocation(varPOI_STAKE[i].Station + 0.01, dblOffset * side, ref dblEasting, ref dblNorthing); } } Point3d dblPnt = new Point3d(dblEasting, dblNorthing, varPOI_STAKE[i].Elevation); string strOffset = dblOffset.ToString(); Stake_Calc.setOffsetPoint(dblPnt, strOffset, strName, strDesc, idAlign, varPOI_STAKE[i].Station); break; } } List <POI> varPOI_STAKED = fStake.POI_STAKED; int k = varPOI_STAKED.Count - 1; uint lngPntNumEnd = uint.Parse(varPOI_STAKED[k].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; for (int p = 0; p < varPOI_STAKED.Count; p++) { 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]); Draw.addPoly(dblPnts, fStake.STAKE_LAYER, 9); Misc.logUsage("STAKE", (lngPntNumEnd - lngPntNumBeg + 1)); }