2016-03-15 117 views
0

在ModelSpace中,我有一个受某些曲线限制的区域(将它们连接到具有AcDbRegion)。如何检查线或点是在区域内还是在区域外

我也绘制了AcDbLine。

我需要的是拆分线以获得只在区域内的线。

我知道如何获得交点,但我怎么才能找到如果线连接两个交点是在里面?或外面的区域?

回答

2

如果你想要做手工(与算法,将与任何API工作),我会建议你用“卷数算法”为中心的宗旨在多边形计算。它没有考虑多边形中的凸起,但它的速度非常快,可以让我以2倍的倍数击败AutoCAD的API。

另一种可能性是绘制一条从您正在测试的点到无穷远的临时线,并测试它与多段线的交点。如果交叉点的数量是奇数,那么你在折线内;如果它是平坦的,那么你在折线之外。如果交叉点测试是使用应用程序的API完成的,则应考虑折线顶点中的布鲁姆。

+0

但最终,奥古斯托冈萨尔维斯的答案是正确的一个AutoCAD的API ..... – JFTxJ

+0

好主意。当然,我需要考虑膨胀段。我有区域和线路。他们相交可以说4分。所以我需要检查哪些点位于区域内(区域)内部或外部。两个点之间的直线总是与两个端点中的区域相交。 但是我可以使用StartPoint并将方向指向EndPoint,距离很远。如果这样的线相交区域偶数次,线在里面。这就是我需要的。 谢谢 –

4

您是否尝试过BREP API?试一下行这样的:

Autodesk.AutoCAD.BoundaryRepresentation.Brep brepEnt = new Brep(myRegion); 
PointContainment pointCont; 
brepEnt.GetPointContainment(thePoint, out pointCont); 
if (pointCont == PointContainment.Inside) 
{ 

} 
+0

看起来很有趣,但还有一个问题。我的应用程序在ZWCAD上运行。 据我所知(也许我错了),ZRX不包含BREP。 –

+0

对不起,我现在没有关于他们的API ... –

0
  1. 获取定义的区域外的折线。

  2. 使用区域多段线顶点按多边形选择。或者,如果您想要一切内部或跨区域,请使用多段线顶点交叉多边形进行选择。

+0

好吧我有线和交点,所以我可以将线分割成许多曲线,然后我可以通过顶点选择,但是: 1. acedSSGet仅适用于可见区域。但我不确定是否在ARX的可见区域绘制,我可以缩放,但它使应用程序“闪烁”,用户不会喜欢它,我想 2.我可以通过顶点选择,但凸起怎么办?穿过多边形让我选择弧段? –