2012-06-18

LWPOLYLINE 封閉卻不封閉..

這個是AutoCAD程式判斷的問題,LWPOLYLINE就是一般所謂2DPolyline,怎麼說封閉卻不封閉?

舉個畫三角型的多邊形來做說明好了:

當你選擇畫多邊形:座標輸入 -> 1,1 -> 10,1 -> 10,10 -> c
你選擇該圖元的性質,他是封閉狀況,且點位數只有三個。如下:


但是一般使用者,用滑鼠抓點,一般不太會注意是否已經是到了結束點,或是點上結束點認定封閉,如:1,1 -> 10,1 -> 10,10 -> 1,1
你會發現圖元性質是開啟的,且點位有四個。如下:



不知道是AutoCAD笨,還是其他考量!明明首點與末點是重合點,怎麼會判斷是開放聚合線而不是封閉聚合線呢?

或許對繪圖使用者來說,圖形一模一樣,沒差;但是對程式來說,卻是差粉大。
一則是會讓程式誤判封閉或開放條件,二則是會誤判多邊形邊數。

在程式中要如何處理?~~~

1.可以先利用ent.Coordinates 陣列屬性,先區分起始點是否等於最終點。
If ent.Coordinates(0)= ent.Coordinates(Ubond(ent.Coordinates)-1) and ent.Coordinates(1)= ent.Coordinates(Ubond(ent.Coordinates)) Then .....

2.若True的話,則將座標陣列先導出,做Redim,
Dim varCoods as Variant
varCoods=ent.Coordinates
Dedim Preserve varCoods( Ubond(varCoods)-2)

3. 再餵回去原來的元件,
ent.Coordinates=varCoods

4. 當然別忘記變更該元件的Closed屬性。
ent.Closed=True

搞定....(PS:程式碼可能會有拼字錯誤,請自行修正)

2 則留言:

  1. 似乎用OVERKILL也可處理

    回覆刪除
    回覆
    1. overkill似乎在AutoCAD平台來做處理的指令,程式上似乎沒這個Method,不過還是感謝您的提供 ^-^

      刪除