在 ModelSpace 中,我有一个由一些曲线限制的区域(加入它们以获得 AcDbRegion)。
我也画了AcDbLine。
我需要的是分割线以仅在区域内获取线。
我知道如何获得交点,但我怎样才能找到连接两个交点的线是否在里面?还是区外?
在 ModelSpace 中,我有一个由一些曲线限制的区域(加入它们以获得 AcDbRegion)。
我也画了AcDbLine。
我需要的是分割线以仅在区域内获取线。
我知道如何获得交点,但我怎样才能找到连接两个交点的线是否在里面?还是区外?
您是否尝试过 BREP API?试试这个:
Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(myRegion);
PointContainment pointCont;
brepEnt.GetPointContainment(thePoint, out pointCont);
if (pointCont == PointContainment.Inside)
{
}
如果您想手动执行(使用适用于任何 API 的算法),我建议您使用“绕组数算法”来计算 Point In Polygon。它没有考虑多边形中的凸起,但它的速度非常快,并且可以正确实现,让我能够以 2 倍的优势击败 AutoCAD 的 API。
另一种可能性是从您要测试的点到无穷远绘制一条临时线,并测试它与您的折线有多少交点。如果交叉点的数量是奇数,那么您在折线内;如果是偶数,那么您就在折线之外。如果使用应用程序的 API 完成相交测试,则应考虑折线顶点中的凹凸。
获取定义区域外部的折线。
使用区域折线顶点按多边形选择。或者,如果您希望所有内容都在该区域内或穿过该区域,则使用折线顶点穿过多边形进行选择。