CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段。 如下图所示:
图1
图2
这是通过图1得到的有相交线的闭合区域图
图3
图4
这是通过图3得到的有相交线的闭合区域图
这两种绘图方式唯一的区别在于 图1==>图2 是最后一笔闭合才形成的相交线,而 图3==>图4是在最后一笔闭合前就有了相交线 ,但是在判断的时候第一种情况判断不出相交线,第二种可以判断出来。
以下是部分代码:
public static void ExportStringByPolygon(int Chosetype)
{
Interactive myInt = new Interactive();
CreateDrawingObject createObj = new CreateDrawingObject();
Polyline pline = new Polyline();
ObjectId getObjId = ObjectId.Null;
Point3dCollection pointCollection = new Point3dCollection();
switch (Chosetype)
{
case 1:
getObjId = myInt.GetEntityEx2(); //选择实体对象
break;
case 2:
getObjId = myInt.DrawingKKbySelf(); //拉框绘制实体对象
break;
case 3:
getObjId = createObj.AddPolyLine(true); //手动绘制多边形
break;
}
//需要访问Database的操作 需首先将该文档进行锁定,操作完成后,在最后进行释放
DocumentLock dlock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
Database db=HostApplicationServices.WorkingDatabase;
MPolygonLoop MPLoop = new MPolygonLoop();
Boolean state = false;
if (getObjId != ObjectId.Null)
{
using (Transaction tran =db.TransactionManager.StartTransaction())
{
Entity Entity = (Entity)tran.GetObject(getObjId, OpenMode.ForRead);
if (Entity is Autodesk.AutoCAD.DatabaseServices.Polyline)
{
pline = (Polyline)Entity;
if (pline.Closed == false)
{
PublicMethod.ShowMessage("\n 多边形未闭合!\n");
}
}
else
{
PublicMethod.ShowMessage("\n 请闭合多边形!\n"); ;
}
if (Entity is Autodesk.AutoCAD.DatabaseServices.Polyline)
{
pline = (Polyline)Entity;
for (int i = 0; i < pline.NumberOfVertices; i++)
{
BulgeVertex bv = new BulgeVertex(pline.GetPoint2dAt(i), pline.GetBulgeAt(i));
MPLoop.Add(bv);
}
MPolygonCrossingCollection MCSelf = MPLoop.LoopCrossesItself(MPLoop, 0, true);
strCrossCount = MCSelf.Count.ToString();
}
if (strCrossCount != "0")
{
PublicMethod.ShowMessage("\n 范围线自相交!\n");
return "selfcross";
}
tran.Commit();
}
}
}
求解惑!!!
转载自:https://blog.csdn.net/YOLIN26/article/details/51787627