[CommandMethod("test_2")]
public static void test_2()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForWrite);
BlockTableRecord ms = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
Polyline border = (Polyline)trans.GetObject(ed.GetEntity("\nborder:").ObjectId, OpenMode.ForRead);
Polyline pline = (Polyline)trans.GetObject(ed.GetEntity("\npline:").ObjectId, OpenMode.ForRead);
Point3dCollection points = new Point3dCollection();
border.IntersectWith(pline, Intersect.OnBothOperands, points, new IntPtr(), new IntPtr());
List<Tuple<Point3d, double>> pointDist = new List<Tuple<Point3d, double>>();
foreach (Point3d point in points)
{
pointDist.Add(new Tuple<Point3d, double>(point, pline.GetDistAtPoint(point)));
}
pointDist.Sort((a, b) => a.Item2.CompareTo(b.Item2));
points = new Point3dCollection();
for (int i = 0; i < pointDist.Count; i++)
{
points.Add(pointDist[i].Item1);
}
DBObjectCollection objects = pline.GetSplitCurves(points);
for (int i = 0; i < objects.Count; i++)
{
Polyline splitted = (Polyline)objects[i];
splitted.ColorIndex = i + 1;
ms.AppendEntity(splitted);
trans.AddNewlyCreatedDBObject(splitted, true);
}
trans.Commit();
}
}