Example #1
0
File: Conv.cs Project: 15831944/EM
        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);
        }
Example #2
0
 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");
     }
 }
Example #3
0
File: Conv.cs Project: 15831944/EM
        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);
        }
Example #4
0
File: Conv.cs Project: 15831944/EM
        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);
        }
Example #5
0
File: Misc.cs Project: 15831944/EM
        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);
        }