private void cmdSetPointAtCenter_Click(object sender, System.Windows.RoutedEventArgs e) { Point3d pnt3dTAR = Pub.pnt3dO; boolSetPointAtCenter = true; Grading_Floor.AVG(idBldgLim, Centroid, Convert.ToDouble(cmbSlope.SelectedValue), Convert.ToDouble(txtPadElev.Text), boolSetPointAtCenter, pnt3dTAR); }
private void cmdSetPoint_Click(object sender, System.Windows.RoutedEventArgs e) { boolSetPointAtCenter = false; bool escape = true; Point3d pnt3dTAR = Pub.pnt3dO; BaseObjs.acadActivate(); Object osMode = SnapMode.getOSnap(); SnapMode.setOSnap((int)osModes.PER); double slope = Convert.ToDouble(cmbSlope.SelectedValue); if (slope != 0.0) { pnt3dTAR = Grading_Floor.getPoint("Select Building Edge in Direction of Increasing Slope", Centroid, out escape); } Grading_Floor.AVG(idBldgLim, Centroid, slope, Convert.ToDouble(txtPadElev.Text), boolSetPointAtCenter, pnt3dTAR); idBldgLim.delete(); SnapMode.setOSnap((int)osMode); }
GD() { object snapMode = SnapMode.getOSnap(); try { ObjectId idPoly = ObjectId.Null; double dblAngDock = 0, dblAng = 0;; double dblLenDock = 0; Point3d pnt3dA = Pub.pnt3dO; //point AHEAD List <Point3d> pnts3dLim = new List <Point3d>(); ObjectId idCgPnt0 = ObjectId.Null, idCgPnt1 = ObjectId.Null, idCgPntBeg = ObjectId.Null, idCgPntEnd = ObjectId.Null; string elev = UserInput.getCogoPoint("\nSelect Dock Begin Point: ", out idCgPntBeg, ObjectId.Null, osMode: 8); if (idCgPntBeg == ObjectId.Null) { return; } Debug.Print(idCgPntBeg.getHandle().ToString()); Point3d pnt3dBeg = idCgPntBeg.getCogoPntCoordinates(); pnts3dLim.Add(pnt3dBeg); elev = UserInput.getCogoPoint("\nSelect Dock End Point", out idCgPntEnd, idCgPntBeg, osMode: 8); if (idCgPntEnd == ObjectId.Null) { return; } Debug.Print(idCgPntEnd.getHandle().ToString()); Point3d pnt3dEnd = idCgPntEnd.getCogoPntCoordinates(); pnts3dLim.Add(pnt3dEnd); bool escape = false; PromptStatus ps; Point3d pnt3dX = UserInput.getPoint("\nSpecify point on side to grade dock: ", pnt3dBeg, out escape, out ps, osMode: 0); if (pnt3dX == Pub.pnt3dO || escape) { return; } int side = 0; if (Geom.testRight(pnt3dBeg, pnt3dEnd, pnt3dX) > 0) { side = -1; } else { side = 1; } double width = 60; escape = UserInput.getUserInput(string.Format("\nEnter dock width: <{0}>:", width), out width, width); if (escape) { return; } using (BaseObjs._acadDoc.LockDocument()) { try { using (Transaction tr = BaseObjs.startTransactionDb()) { dblAngDock = pnt3dBeg.getDirection(pnt3dEnd); dblLenDock = pnt3dBeg.getDistance(pnt3dEnd); double dblSlope = System.Math.Round(pnt3dBeg.getSlope(pnt3dEnd), 3); dblAng = dblAngDock - pi / 2 * side; ObjectIdCollection idsPoly3dX = new ObjectIdCollection(); List <ObjectId> idsCgPnts = new List <ObjectId>(); List <Point3d> pnts3d = new List <Point3d>(); pnts3d.Add(pnt3dBeg); //CgPntBeg //Slope is not 0 if (dblSlope != 0) { pnt3dA = pnt3dBeg.traverse(dblAng, width, -0.01); pnts3d.Add(pnt3dA); //Pnt 2 dblAng = dblAng + pi / 2 * side; pnt3dA = pnt3dA.traverse(dblAng, dblLenDock, dblSlope); pnts3d.Add(pnt3dA); //Pnt3 pnts3d.Add(pnt3dEnd); //Pnt4 - CgPntEnd pnts3d.Add(pnt3dBeg); //Pnt5 - CgPntBeg idsCgPnts = pnts3d.addBrklineSegmentsDock(out idsPoly3dX, apps.lnkBrks, side, idCgPntBeg, idCgPntEnd); } else { int k = 1; int intDivide = (int)System.Math.Truncate(dblLenDock / 84) + 1; if (intDivide % 2 != 0) { intDivide = intDivide + 1; } pnt3dA = pnt3dBeg.traverse(dblAng, width, -0.005); //Pnt2 pnts3d.Add(pnt3dA); k++; int x = 0; dblAng = dblAng + pi / 2 * side; double seg = dblLenDock / intDivide; int updown = 1; for (x = 0; x <= intDivide - 1; x++) { updown = -updown; pnt3dA = pnt3dA.traverse(dblAng, seg, 0.005 * updown); pnts3d.Add(pnt3dA); //points on outer edge of Dock from Pnt2 through Pnt3 k++; } pnts3d.Add(pnt3dEnd); //Pnt4 = CgPntEnd int indexPntEnd = k++; pnt3dA = pnt3dEnd; dblAng = dblAng + pi * side; //+pi because skipped turning towards bldg because we have point already for (x = 0; x <= intDivide - 1; x++) { pnt3dA = pnt3dA.traverse(dblAng, dblLenDock / intDivide, 0.0); pnts3d.Add(pnt3dA); //points on inner edge of Dock from pntBeg to pntEnd } // don't need to add pnt3dBeg to end of list because it is calc'd in loop previous idsCgPnts = pnts3d.addBrklineSegmentsDock(out idsPoly3dX, apps.lnkBrks, side, idCgPntBeg, idCgPntEnd, indexPntEnd); List <ObjectId> idCgPntsX = new List <ObjectId>(); idCgPntsX.Add(idsCgPnts[1]); //CgPnt 2 at dock limit away from building int intUBnd = idsCgPnts.Count; x = -1; int n = 1; k = intUBnd / 2; for (int j = 1; j <= k - 1; j++) { x = -x; n = n + (intUBnd - 2 * j) * x; System.Diagnostics.Debug.Print(string.Format("{0},{1}", j, n)); idCgPntsX.Add(idsCgPnts[n]); } ObjectId idPoly3d = ObjectId.Null; for (int i = 1; i < idCgPntsX.Count; i++) { idCgPnt0 = idCgPntsX[i - 1]; idCgPnt1 = idCgPntsX[i]; idPoly3d = Draw.addPoly3d(idCgPnt0.getCogoPntCoordinates(), idCgPnt1.getCogoPntCoordinates(), "CPNT-BRKLINE"); idPoly3d.lnkPntsAndPoly3d(idCgPnt0, idCgPnt1, apps.lnkBrks); idsPoly3dX.Add(idPoly3d); } } Grading_Floor.modSurface("CPNT-ON", "Finish Surface", idsPoly3dX, false); //} tr.Commit(); } } catch (System.Exception ex) { BaseObjs.writeDebug(string.Format("{0} cmdGD.cs: line: 181", ex.Message)); } } } catch (System.Exception) { } finally{ SnapMode.setOSnap((int)snapMode); } }
GD() { ObjectId idPoly = ObjectId.Null; const string nameLayer = "CPNT-BRKLINE"; double dblAngDock = 0; double dblLenDock = 0; Point3d pnt3dA = Pub.pnt3dO; //point AHEAD Point3d pnt3dB; //point BACK int intSlopeSign = 0; const double pi = System.Math.PI; bool exists = false; ObjectId idDictGRADEDOCK = Dict.getNamedDictionary("GRADEDOCK", out exists); if (!exists) { Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowAlertDialog("Run AVG - exiting ....."); } List <Point3d> pnts3dLim = getDockLimits(); //use 0 as dock number i.e. do one dock at a time bool escape = false; double width = 60; escape = UserInput.getUserInput(string.Format("Enter dock width: <{0}>:", width), out width, width); if (escape) { return; } double height = 4.04; escape = UserInput.getUserInput(string.Format("Enter dock height: <{0}>:", height), out height, height); if (escape) { return; } ObjectId idDictBLDG = Dict.getSubDict(idDictGRADEDOCK, bldgNum); //bldgNum obtained @ getDockLimits ObjectId idDictDOCKS = ObjectId.Null; TypedValue[] tvs; using (BaseObjs._acadDoc.LockDocument()) { try { using (Transaction tr = BaseObjs.startTransactionDb()) { ResultBuffer rb = Dict.getXRec(idDictBLDG, "HANDLE3D"); if (rb == null) { return; } tvs = rb.AsArray(); rb = Dict.getXRec(idDictBLDG, "SLOPE"); if (rb == null) { return; } tvs = rb.AsArray(); double dblSlope = (double)tvs[0].Value; rb = Dict.getXRec(idDictBLDG, "CENTROID"); if (rb == null) { return; } tvs = rb.AsArray(); Point3d pnt3dCEN = new Point3d((double)tvs[0].Value, (double)tvs[1].Value, (double)tvs[2].Value); rb = Dict.getXRec(idDictBLDG, "TARGET"); if (rb == null) { return; } tvs = rb.AsArray(); Point3d pnt3dTAR = new Point3d((double)tvs[0].Value, (double)tvs[1].Value, (double)tvs[2].Value); double dblAngBase = pnt3dCEN.getDirection(pnt3dTAR); ObjectIdCollection idsPoly3dX = new ObjectIdCollection(); List <Point3d> pnts3d = new List <Point3d>(); List <ObjectId> idsCgPnts = new List <ObjectId>(); try { Point3d pnt3dBEG = pnts3dLim[0]; Point3d pnt3dEND = pnts3dLim[1]; dblAngDock = Measure.getAzRadians(pnt3dBEG, pnt3dEND); dblLenDock = pnt3dBEG.getDistance(pnt3dEND); pnt3dB = pnt3dBEG; if (pnt3dTAR != Pub.pnt3dO) { pnt3dA = new Point3d(pnt3dBEG.X, pnt3dBEG.Y, pnt3dTAR.Z + Geom.getCosineComponent(pnt3dCEN, pnt3dTAR, pnt3dBEG) * (dblSlope * -1) - height); } else { pnt3dA = new Point3d(pnt3dBEG.X, pnt3dBEG.Y, pnt3dCEN.Z - height); //assuming flat floor if pnt3dTAR is -1,-1,-1 } pnts3d.Add(pnt3dA); //CgPnt 1 } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " cmdGD_old.cs: line: 113"); } ObjectId idPoly3d = ObjectId.Null; if (dblSlope != 0) { double angDock2 = System.Math.Round(dblAngDock, 2); double angBase2 = System.Math.Round(dblAngBase, 2); double modAngles = 0; double angDiff = System.Math.Round(angBase2 - angDock2, 2); if (angDiff == 0) { intSlopeSign = 1; } else { if (angBase2 > angDock2) { modAngles = angBase2.mod(angDock2); } else { modAngles = angDock2.mod(angBase2); } if (modAngles == 0) { if (angDiff > 0) { intSlopeSign = 1; } else if (angDiff < 0) { intSlopeSign = -1; } } if (System.Math.Abs(angDiff) == System.Math.Round(pi / 2, 2)) { intSlopeSign = 0; } } } if (intSlopeSign != 0) { // sloped floor dblAngDock = dblAngDock - pi / 2; pnt3dA = pnt3dA.traverse(dblAngDock, width, -0.01); pnts3d.Add(pnt3dA); //CgPnt 2 dblAngDock = dblAngDock + pi / 2; pnt3dA = pnt3dA.traverse(dblAngDock, dblLenDock, dblSlope * intSlopeSign * 1); pnts3d.Add(pnt3dA); //Pnt3 dblAngDock = dblAngDock + pi / 2; pnt3dA = pnt3dA.traverse(dblAngDock, width, 0.01); pnts3d.Add(pnt3dA); //CgPnt 4 dblAngDock = dblAngDock + pi / 2; pnt3dA = pnt3dA.traverse(dblAngDock, dblLenDock, dblSlope * intSlopeSign * -1); pnts3d.Add(pnt3dA); //Pnt5 idPoly3d = pnts3d.build3dPolyDockApron("CPNT-ON", nameLayer, "GD", out idsCgPnts); idsPoly3dX.Add(idPoly3d); } else { dblAngDock = dblAngDock - pi / 2; pnt3dA = pnt3dA.traverse(dblAngDock, width, -0.005); pnts3d.Add(pnt3dA); //Pnt2 int intDivide = (int)System.Math.Truncate(dblLenDock / 84) + 1; if (intDivide % 2 != 0) { intDivide = intDivide + 1; } int x = 0; dblAngDock = dblAngDock + pi / 2; double seg = dblLenDock / intDivide; int updown = 1; for (x = 0; x <= intDivide - 1; x++) { updown = -updown; pnt3dA = pnt3dA.traverse(dblAngDock, seg, 0.005 * updown); pnts3d.Add(pnt3dA); } dblAngDock = dblAngDock + pi / 2; pnt3dA = pnt3dA.traverse(dblAngDock, width, 0.005); pnts3d.Add(pnt3dA); dblAngDock = dblAngDock + pi / 2; for (x = 0; x <= intDivide - 1; x++) { pnt3dA = pnt3dA.traverse(dblAngDock, dblLenDock / intDivide, 0.0); pnts3d.Add(pnt3dA); } idPoly3d = pnts3d.build3dPolyDockApron("CPNT-ON", nameLayer, "GD", out idsCgPnts); idsPoly3dX.Add(idPoly3d); List <ObjectId> idCgPntsX = new List <ObjectId>(); idCgPntsX.Add(idsCgPnts[1]); //CgPnt 2 at dock limit away from building int intUBnd = idsCgPnts.Count; x = -1; int n = 1; int k = intUBnd / 2; for (int j = 1; j <= k - 1; j++) { x = -x; n = n + (intUBnd - 2 * j) * x; System.Diagnostics.Debug.Print(string.Format("{0},{1}", j, n)); idCgPntsX.Add(idsCgPnts[n]); } for (int i = 1; i < idCgPntsX.Count; i++) { List <ObjectId> idsCogoPnts = new List <ObjectId> { idCgPntsX[i - 1], idCgPntsX[i - 0] }; idPoly3d = BrkLine.makeBreakline(apps.lnkBrks, "GD", out idPoly, idsCogoPnts); idsPoly3dX.Add(idPoly3d); } } Grading_Floor.modSurface("CPNT-ON", "Finish Surface", idsPoly3dX, false); tr.Commit(); } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " cmdGD_old.cs: line: 238"); } } }
private void cmdSelectBldgLimits_Click(object sender, System.Windows.RoutedEventArgs e) { BaseObjs.acadActivate(); Polyline poly = null; string nameLayer = ""; ObjectId idBlkRef = ObjectId.Null; using (BaseObjs._acadDoc.LockDocument()) { try { idBldgLim = Grading_GetNestedObject.getBldgLimit(out nameLayer, out idBlkRef); if (idBldgLim == ObjectId.Null) { return; } } catch (System.Exception ex) { BaseObjs.writeDebug(string.Format("{0} GradeFloor.xaml.cs: line: 117", ex.Message)); } Entity ent = idBldgLim.getEnt(); if (ent is PolylineVertex3d) { PolylineVertex3d v = (PolylineVertex3d)idBldgLim.getEnt(); ObjectId idPoly3d = v.OwnerId; poly = (Polyline)Conv.poly3d_Poly(idPoly3d, "0").getEnt(); } else if (ent is Polyline3d) { poly = (Polyline)Conv.poly3d_Poly(idBldgLim, "0").getEnt(); idBldgLim.delete(); Autodesk.AutoCAD.ApplicationServices.Core.Application.ShowAlertDialog("Selected Object was a 3d Polyline and has been deleted!!"); } else if (ent is Polyline) { poly = (Polyline)idBldgLim.getEnt(); } else if (ent is Polyline2d) { Polyline2d poly2d = (Polyline2d)ent; ObjectId idPoly = Conv.poly2dToPoly(poly2d); poly = (Polyline)idPoly.getEnt(); } else if (ent is Line) { SelectionSet ss = Select.buildSSet(new TypedValue[] { new TypedValue(8, nameLayer) }); if (ss != null && ss.Count > 0) { } else { ObjectIdCollection ids = xRef.getXRefEntsByLayer(idBlkRef, nameLayer); List <ObjectId> idsLines = new List <ObjectId>(); foreach (ObjectId id in ids) { idsLines.Add(id); } ObjectId idPoly = Misc.rebuildLWPoly(idsLines); if (idPoly == ObjectId.Null) { Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog("Failed to build Building Inner Boundary from xRef segments.\nUser needs to build polyline."); return; } else { poly = (Polyline)idPoly.getEnt(); } } } if (poly == null) { return; } Centroid = poly.getCentroid(); idBldgLim = poly.ObjectId; } try { AverageElevation = Grading_Floor.getAverageElev(idBldgLim, chkShowPoints.IsChecked.Value, lstBox1.SelectedValue.ToString()); } catch (System.Exception ex) { BaseObjs.writeDebug(string.Format("{0} GradeFloor.xaml.cs: line: 146", ex.Message)); } lblAvePadElev.Content = AverageElevation.ToString("#,###.00"); double dblPadElev = AverageElevation + Convert.ToDouble(txtElevDiff.Text); lblPadElev.Content = dblPadElev.ToString("#,###.00"); txtPadElev.Text = string.Format("{0:#,###.00}", lblPadElev.Content); }