2016-03-15 88 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.我可以通過頂點選擇,但凸起怎麼辦?穿過多邊形讓我選擇弧段? –

相關問題