//try to split curves
foreach (ObjectId objid in originalcollection)
{
try
{
Curve curve = objid.GetObject(OpenMode.ForRead) as Curve;
Point3dCollection breakpoints
= new Point3dCollection
(); foreach (BlockReference mybr in myblocks)
{
if ((curve.GetClosestPointTo(mybr.Position, false).DistanceTo(mybr.Position) < 0.1) & (curve.StartPoint.DistanceTo(mybr.Position) > 0.1) & (curve.EndPoint.DistanceTo(mybr.Position) > 0.1))
breakpoints.Add(mybr.Position);
}
List
<double> paramatersforpoints
= new List
<double>(); foreach (Point3d bkpnt in breakpoints)
{
paramatersforpoints.Add(curve.GetParameterAtPoint(bkpnt));
}
paramatersforpoints.Sort();
Point3dCollection sortedpoints
= new Point3dCollection
(); foreach (double param in paramatersforpoints)
{
sortedpoints.Add(curve.GetPointAtParameter(param));
}
DBObjectCollection newCurves = curve.GetSplitCurves(sortedpoints);
if (newCurves.Count != 0)
{
for (int i = 0; i < newCurves.Count; i++)
{
Entity pent = (Entity)newCurves[i] as Entity;
pent.ColorIndex = i + 1;// to display result only
btr.AppendEntity(pent);
MyTrans.AddNewlyCreatedDBObject(pent, true);
MyTrans.TransactionManager.QueueForGraphicsFlush();
originalcollection.Add(pent.ObjectId);
originalcollection.Remove(curve.ObjectId);
}
}
}
catch
{
}
}
//end splits