poly2dToPoly(Polyline2d poly2d) { ObjectId idPoly = ObjectId.Null; List <Vertex2d> vtxs2d = new List <Vertex2d>(); using (Transaction tr = BaseObjs.startTransactionDb()) { foreach (ObjectId id in poly2d) { Vertex2d vtx2d = (Vertex2d)tr.GetObject(id, OpenMode.ForRead); vtxs2d.Add(vtx2d); } tr.Commit(); } idPoly = Draw.addPoly(vtxs2d); poly2d.ObjectId.delete(); return(idPoly); }
removeDuplicateVertex(ObjectId id) { try { using (Transaction tr = BaseObjs.startTransactionDb()) { DBObject dbObj = tr.GetObject(id, OpenMode.ForWrite); if (dbObj is Polyline) { Polyline poly = (Polyline)tr.GetObject(id, OpenMode.ForRead); Point3dCollection pnts3d = poly.getCoordinates3d(); Point3dCollection pnts3dRev; if (hasDuplicateVertex(pnts3d, out pnts3dRev)) { string layer = poly.Layer; Misc.deleteObj(id); Draw.addPoly(pnts3d, layer); } } if (dbObj is Polyline3d) { Polyline3d poly3d = (Polyline3d)tr.GetObject(id, OpenMode.ForRead); Point3dCollection pnts3d = poly3d.getCoordinates3d(); Point3dCollection pnts3dRev; if (hasDuplicateVertex(pnts3d, out pnts3dRev)) { string layer = poly3d.Layer; Misc.deleteObj(id); Draw.addPoly3d(pnts3d, layer); } } } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " Mod.cs: line: 649"); } }
poly3d_Poly(ObjectId idPoly3d, string nameLayer) { ObjectId id = ObjectId.Null; try { using (BaseObjs._acadDoc.LockDocument()) { using (Transaction tr = BaseObjs.startTransactionDb()) { Polyline3d poly3d = (Polyline3d)tr.GetObject(idPoly3d, OpenMode.ForRead); Point3dCollection pnts3d = new Point3dCollection(); foreach (ObjectId vId in poly3d) { PolylineVertex3d v3d = (PolylineVertex3d)vId.GetObject(OpenMode.ForRead); Point3d pnt3d = new Point3d(); pnt3d = v3d.Position; try { pnts3d.Add(pnt3d); } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " Conv.cs: line: 577"); } } tr.Commit(); id = Draw.addPoly(pnts3d, nameLayer); } } } catch (System.Exception ex) { BaseObjs.writeDebug(ex.Message + " Conv.cs: line: 587"); } return(id); }
processBndry(ObjectId idPolyBndry) { ObjectId idPolyX = ObjectId.Null; if (idPolyBndry.IsNull) { idPolyBndry = Select.selectEntity(typeof(Polyline), "Select Boundary Polyline", "Boundary Polyline Selection Failed.", out pnt3dPicked).ObjectId; } idPolyBndry.checkIfClosed(); if (idPolyBndry.isRightHand() == false) { idPolyBndry.reversePolyX(); } List <Point3d> pnts3d = new List <Point3d>(); List <Vertex2d> v2ds = idPolyBndry.poly_Vertex2dList(); int intDivideDelta = 4; for (int i = 1; i < v2ds.Count; i++) { Vertex2d v2d = v2ds[i]; double dblBulge = v2ds[i - 1].Bulge; if (dblBulge == 0) { pnts3d.Add(v2ds[i - 1].Position); } else { pnts3d.Add(v2d.Position); Point3d pnt2dBeg = v2ds[i - 1].Position; Point3d pnt2dEnd = v2ds[i - 0].Position; double dblDelta = 4 * (System.Math.Atan(dblBulge)); double dblLenChord = pnt2dBeg.getDistance(pnt2dEnd); double dblRadius = System.Math.Abs((dblLenChord / 2) / System.Math.Sin(dblDelta / 2)); double dblAzChord = pnt2dBeg.getDirection(pnt2dEnd); double dblAzTan = dblAzChord - dblDelta / 2; if (dblBulge <= 10.0) { intDivideDelta = 4; } else if (dblBulge <= 20.0) { intDivideDelta = 8; } else if (dblBulge <= 30.0) { intDivideDelta = 12; } else { intDivideDelta = 16; } double dblIncrDelta = dblDelta / intDivideDelta; for (int z = 1; z < intDivideDelta; z++) { double dblIncrChordAz = dblAzTan + z * dblIncrDelta / 2; double dblIncrChordLen = (2 * dblRadius * System.Math.Sin(System.Math.Abs(dblIncrDelta * z / 2))); Point3d pnt3d = pnt2dBeg.traverse(dblIncrChordAz, dblIncrChordLen); pnts3d.Add(pnt3d); } } } pnts3d.Add(pnts3d[0]); //end point same as beg point -> poly was forced closed idPolyX = Draw.addPoly(pnts3d); Polyline objPoly = (Polyline)idPolyBndry.getEnt(); idPolyX.changeProp(objPoly.LineWeight, objPoly.Color); idPolyBndry.delete(); return(idPolyX); }
rebuildLWPoly(List <ObjectId> idEnts) { int intRnd = 2; List <Point3d> pntList = new List <Point3d>(); List <List <Point3d> > pntGrps = new List <List <Point3d> >(); Polyline poly = null; ObjectId idPoly = ObjectId.Null; foreach (ObjectId id in idEnts) { Entity ent = id.getEnt(); if (ent is Line) { Line line = (Line)ent; pntList = new List <Point3d> { line.StartPoint, line.EndPoint }; pntGrps.Add(pntList); } else if (ent is Polyline) { poly = (Polyline)ent; pntList = poly.ObjectId.getCoordinates3dList(); pntGrps.Add(pntList); } } bool boolHit = false; List <Point3d> pntList0 = pntGrps[0]; //control list - first group in master list pntGrps.RemoveAt(0); //remove from master list List <Point3d> pntListX; do { bool boolFirstPass = true; bool boolClosed = false; if (pntGrps.Count == 0) { break; } int j = pntList0.Count; Point3d p0Beg = pntList0[0]; //beg point of current control list Point3d p0End = pntList0[j - 1]; //end point of current control list while (boolClosed == false) //test if done { if (boolFirstPass == false) //first pass with control List0 { if (boolHit == false) //made a hit -> loop again for another hit { break; } } if (pntGrps.Count == 0) { return(idPoly); } int i = 0; while (i < pntGrps.Count) { boolHit = false; pntListX = pntGrps[i]; //test list int n = pntListX.Count; Point3d pXBeg = pntListX[0]; Point3d pXEnd = pntListX[n - 1]; //E-B - check end point of control with begin point of test if (System.Math.Round(p0End.X, intRnd) == System.Math.Round(pXBeg.X, intRnd) && System.Math.Round(p0End.Y, intRnd) == System.Math.Round(pXBeg.Y, intRnd)) { boolHit = true; for (int k = 1; k < n; k++) //skip first point - same as control end point { pntList0.Add(pntListX[k]); } pntGrps.RemoveAt(i); i = 0; p0End = pXEnd; //end point of control } //E-E - check end point of control with end point of test else if (System.Math.Round(p0End.X, intRnd) == System.Math.Round(pXEnd.X, intRnd) && System.Math.Round(p0End.Y, intRnd) == System.Math.Round(pXEnd.Y, intRnd)) { boolHit = true; pntListX.Reverse(); for (int k = 1; k < n; k++) //skip first point - same as control end point { pntList0.Add(pntListX[k]); } pntGrps.RemoveAt(i); i = 0; p0End = pXBeg; //end point of control } //B-B - check begin point of control with begin point of test else if (System.Math.Round(p0Beg.X, intRnd) == System.Math.Round(pXBeg.X, intRnd) && System.Math.Round(p0Beg.Y, intRnd) == System.Math.Round(pXBeg.Y, intRnd)) { boolHit = true; for (int k = 1; k < n; k++) { pntList0.Insert(0, pntListX[k]); //insert all but first point } pntGrps.RemoveAt(i); i = 0; p0Beg = pXEnd; //end point of control } //B-E - check begin point of control with end point of test else if (System.Math.Round(p0Beg.X, intRnd) == System.Math.Round(pXEnd.X, intRnd) && System.Math.Round(p0Beg.Y, intRnd) == System.Math.Round(pXEnd.Y, intRnd)) { boolHit = true; for (int k = 0; k < n - 1; k++) { pntList0.Insert(0, pntListX[k]); //insert all but last point } pntGrps.RemoveAt(i); i = 0; p0Beg = pXBeg; //end point of control } else { i++; } if (System.Math.Round(pntList0[0].X, intRnd) == System.Math.Round(pntList0[pntList0.Count - 1].X, intRnd) && System.Math.Round(pntList0[0].Y, intRnd) == System.Math.Round(pntList0[pntList0.Count - 1].Y, intRnd)) { idPoly = Draw.addPoly(pntList0); return(idPoly); } boolFirstPass = false; } } } while (true); return(idPoly); }