Esempio n. 1
0
        public static int GetNumberOfPoyllineVertices(DBObject obj)
        {
            Polyline polyline = obj as Polyline;

            if (polyline != null)
            {
                return(polyline.NumberOfVertices);
            }
            Polyline2d polyline2d = obj as Polyline2d;

            if (polyline2d != null)
            {
                int num = 0;
                foreach (ObjectId arg_40_0 in polyline2d)
                {
                    num++;
                }
                return(num);
            }
            Polyline3d polyline3d = obj as Polyline3d;

            if (polyline3d != null)
            {
                int num2 = 0;
                //using (IEnumerator enumerator2 = polyline3d.GetEnumerator())
                {
                    IEnumerator enumerator2 = polyline3d.GetEnumerator();
                    while (enumerator2.MoveNext())
                    {
                        ObjectId arg_91_0 = (ObjectId)enumerator2.Current;
                        num2++;
                    }
                    return(num2);
                }
            }
            throw new ArgumentException("Invalid polyline object: " + obj.Handle.ToString() + "\nObject type: " + obj.GetType().ToString());
        }
Esempio n. 2
0
        public static PointSet SubdividePolyline3d(Polyline3d p3d, Transaction trans, double d)
        {
            PointSet result;

            try
            {
                PointSet pointSet = new PointSet();
                if (d <= 0.0)
                {
                    //using (IEnumerator enumerator = p3d.GetEnumerator())
                    {
                        IEnumerator enumerator = p3d.GetEnumerator();
                        while (enumerator.MoveNext())
                        {
                            ObjectId         objectId         = (ObjectId)enumerator.Current;
                            PolylineVertex3d polylineVertex3d = (PolylineVertex3d)trans.GetObject(objectId, (OpenMode)0);
                            Point            point            = new Point(polylineVertex3d.Position.X, polylineVertex3d.Position.Y, polylineVertex3d.Position.Z);
                            if (pointSet.Count > 1)
                            {
                                if (pointSet[pointSet.Count - 1] != point)
                                {
                                    pointSet.Add(point);
                                }
                            }
                            else
                            {
                                pointSet.Add(point);
                            }
                        }
                        goto IL_233;
                    }
                }
                List <Point> list = new List <Point>();
                foreach (ObjectId objectId2 in p3d)
                {
                    PolylineVertex3d polylineVertex3d2 = (PolylineVertex3d)trans.GetObject(objectId2, (OpenMode)0);
                    list.Add(new Point(polylineVertex3d2.Position.X, polylineVertex3d2.Position.Y, polylineVertex3d2.Position.Z));
                }
                if (p3d.Closed)
                {
                    list.Add(list[0]);
                }
                for (int i = 0; i < list.Count - 1; i++)
                {
                    Point point2 = list[i];
                    Point point3 = list[i + 1];
                    ngeometry.VectorGeometry.Vector3d vector3d = new ngeometry.VectorGeometry.Vector3d(point3 - point2);
                    double num  = point2.DistanceTo(point3);
                    double num2 = (double)((int)Math.Max(Math.Ceiling(num / d), 1.0));
                    double norm = num / num2;
                    vector3d.Norm = norm;
                    int num3 = 0;
                    while ((double)num3 < num2)
                    {
                        pointSet.Add(point2 + (double)num3 * vector3d.ToPoint());
                        num3++;
                    }
                }
                if (!p3d.Closed)
                {
                    pointSet.Add(list[list.Count - 1]);
                }
IL_233:
                result = pointSet;
            }
            catch (System.Exception ex)
            {
                Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Can not subdivide polyline3d (handle: " + p3d.Handle.ToString() + ")\n");
                result = null;
            }
            return(result);
        }