如何检查线或点是在区域内还是区域外
How can I check if line or point is inside or outside of area
在 ModelSpace 中,我有一个由一些曲线限制的区域(加入它们以获得 AcDbRegion)。
我也画了AcDbLine。
我需要的是分割线以仅在区域内获取线。
我知道如何得到交点,但是我怎么知道连接两个交点的线是否在里面呢?还是外区?
您尝试过 BREP API 吗?试试这行:
Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(myRegion);
PointContainment pointCont;
brepEnt.GetPointContainment(thePoint, out pointCont);
if (pointCont == PointContainment.Inside)
{
}
获取定义您所在区域外部的折线。
Select 通过使用区域折线顶点的多边形。或者 select 如果您希望所有内容都在区域内或穿过区域,则使用折线顶点穿过多边形。
如果您想手动执行此操作(使用适用于任何 API 的算法),我建议您使用 "winding number algorithm" 来计算多边形中的点。它没有考虑多边形中的凸起,但它执行得非常快,可以让我以 2 倍的速度击败 AutoCAD 的 API。
另一种可能性,是从您正在测试的点到无穷大绘制一条临时线,并测试它与您的折线有多少交点。如果交叉点的数量是奇数,那么你在多段线内;如果它是偶数,那么你就在折线之外。如果使用应用程序的 API 进行相交测试,则应考虑折线顶点中的蓝色。
在 ModelSpace 中,我有一个由一些曲线限制的区域(加入它们以获得 AcDbRegion)。
我也画了AcDbLine。
我需要的是分割线以仅在区域内获取线。
我知道如何得到交点,但是我怎么知道连接两个交点的线是否在里面呢?还是外区?
您尝试过 BREP API 吗?试试这行:
Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(myRegion);
PointContainment pointCont;
brepEnt.GetPointContainment(thePoint, out pointCont);
if (pointCont == PointContainment.Inside)
{
}
获取定义您所在区域外部的折线。
Select 通过使用区域折线顶点的多边形。或者 select 如果您希望所有内容都在区域内或穿过区域,则使用折线顶点穿过多边形。
如果您想手动执行此操作(使用适用于任何 API 的算法),我建议您使用 "winding number algorithm" 来计算多边形中的点。它没有考虑多边形中的凸起,但它执行得非常快,可以让我以 2 倍的速度击败 AutoCAD 的 API。
另一种可能性,是从您正在测试的点到无穷大绘制一条临时线,并测试它与您的折线有多少交点。如果交叉点的数量是奇数,那么你在多段线内;如果它是偶数,那么你就在折线之外。如果使用应用程序的 API 进行相交测试,则应考虑折线顶点中的蓝色。