如下图所示,红线为分割后的线(已挪动):
部分代码如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using AcTools;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Colors;
using System.Runtime.CompilerServices;
using Wform = System.Windows.Forms;
using System.IO;
using System.Windows.Forms;
//using Excel = NetOffice.ExcelApi;
namespace AcTools
{
public class Class1
{
#region
//Polyline pl = new Polyline(3);
//pl.AddVertexAt(0, new Point2d(10, 2), 0, 0, 0); // 起点
//pl.AddVertexAt(1, new Point2d(30, 5), 0, 0, 0); // 起点
//pl.AddVertexAt(2, new Point2d(50, 25), 0, 0, 0); // 起点
//Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
//db.AddEntityToModeSpace(line);
#endregion
[CommandMethod("xx")]
public void XX()
{ var db = Z.db;
Point3dCollection pcoll = new Point3dCollection();
List<Entity> ents =db.SelectEntities<Entity>();
if (ents.Count<1)
{
Z.ed.WriteMessage("重新选择");
}
for (global::System.Int32 i = 0; i < ents.Count; i++)
{
for (global::System.Int32 j = i+1; j < ents.Count; j++)
{
ents[i].IntersectWith(ents[j], Intersect.OnBothOperands, pcoll, IntPtr.Zero, IntPtr.Zero);
}
}
if (pcoll.Count ==0)
{
return;
}
//foreach (Point3d item in pcoll)
//{
// db.AddCircleModeSpace(item, 2);
//}
foreach (Curve item1 in ents)
{
try
{
DBObjectCollection dBoc= item1.GetSplitCurves(pcoll);
foreach (Entity entsp in dBoc)
{
db.AddEntityToModeSpace(entsp);
entsp.ChangeEntityColor(1);
}
}
catch (System.Exception)
{
Z.ed.WriteMessage("无\n");
}
//db.Erase(item1);
}
}