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()); }
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); }