【问题标题】:How can I check if line or point is inside or outside of area如何检查线或点是在区域内还是区域外
【发布时间】:2016-03-15 13:20:51
【问题描述】:

在 ModelSpace 中,我有一个由一些曲线限制的区域(加入它们以获得 AcDbRegion)。

我也画了AcDbLine。

我需要的是分割线以仅在区域内获取线。

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

【问题讨论】:

    标签: autocad-plugin objectarx


    【解决方案1】:

    您是否尝试过 BREP API?试试这个:

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

    【讨论】:

    • 看起来很有趣,但还有一个问题。我的应用程序在 ZWCAD 上运行。据我所知(也许我错了),ZRX 不包含 BREP。
    【解决方案2】:

    如果您想手动进行(使用适用于任何 API 的算法),我建议您使用“绕组数算法”来计算 Point In Polygon。它没有考虑多边形中的凸起,但它的速度非常快,并且正确地实现了让我以 2 倍的优势击败 AutoCAD 的 API。

    另一种可能性,是从您要测试的点到无穷远绘制一条临时线,并测试它与您的折线有多少交点。如果交叉点的数量是奇数,那么您在折线内;如果是偶数,那么您就在折线之外。如果使用应用程序的 API 进行相交测试,则应考虑折线顶点中的凹凸。

    【讨论】:

    • 但归根结底,Augusto Goncalves 的回答对于 AutoCAD 的 API 来说是正确的.....
    • 好主意。当然,我需要考虑凸起部分。我有区域和线路。他们相交,让我们说 4 个点。所以我需要检查哪些点在区域(区域)内部或外部。两个点之间的线始终与两个端点中的区域相交。但是我可以使用 StartPoint 并带方向到 EndPoint,距离很远。如果这样的线偶数次与区域相交,则线在内部。这就是我所需要的。谢谢你
    【解决方案3】:
    1. 获取定义您所在区域外部的折线。

    2. 使用区域折线顶点按多边形选择。或者,如果您希望所有内容都在该区域内或穿过该区域,则使用折线顶点穿过多边形进行选择。

    【讨论】:

    • OK 我有直线和交点,所以我可以将直线分割成多条曲线,然后我可以通过顶点进行选择,但是: 1. acedSSGet 仅适用于可见区域。但我不确定我在可见区域通过 ARX 绘制,我可以缩放,但它使应用程序“闪烁”并且用户不会喜欢它我想 2. 我可以通过顶点选择,但是凸起呢?多边形交叉让我用弧段选择?
    猜你喜欢
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多