2015-11-11 50 views
0

當我計算兩個相互接觸的形狀之間的差異(例如,在矩形A上有一個孔的較大矩形B中的矩形A)和一個剪輯形狀(矩形C)時,兩個觸摸形狀被合併,因爲它們共享相同的邊緣,然後剪輯被執行。防止裁剪器合併多邊形?

剪切時可以避免合併觸摸形狀嗎?

這裏是兩個形狀(A在紅,綠和B)和剪輯之間的差的一個例子(因此操作是:A &乙 - 夾)時,它返回藍色形狀:

Difference (Blue) two touching shapes (A in green and B in red) with a clip

取而代之的是藍色長方形的,我想有這兩種形狀:

Expected result

的交匯將給:

Intersection

這會給我的四個造型我想:

Expected result

我知道我可以單獨對每個形狀執行的操作,但恐怕會更昂貴。

注意

這裏是一個XOR結果:

XOR

+0

使用異或而不是差。 –

+0

我忘了我的問題,所以我編輯它,現在應該更清楚。異或並沒有幫助...我認爲唯一的解決方案是單獨執行操作,這是我現在所做的。 –

+0

我已經發布了類似的問題在https://stackoverflow.com/questions/46235176/clipperlib-clip-multiple-squares-with-rectangle-produces-1-result 你有沒有找到一個解決方案?最後,我將處理超過200萬個形狀。我不認爲單獨剪裁它們會對性能有好處。 –

回答

0

在手,我計算操作自己:

  1. 計算邊緣之間的交叉點(的夾子形狀和其他形狀)。
  2. 每個頂點:排序其邊緣通過角(強制)
  3. 穿行各邊順時針和逆時針來計算新的多邊形與他們的孔

這是足夠的效率,但我需要一個空間 - 對數據結構進行分區以對邊緣進行分類並快速進行交叉。