2012-09-10

數據跟著AutoCAD檔案跑

我們在ACAD中,有時候一些其他數據需要跟著圖檔跑,但卻不希望其他第三方太容易獲得這類數據,卻要可以正常利用這些數據做必要的運算,有什麼方式呢?

首先先來談談數據怎麼跟著圖面跑,圖面是圖檔又不是資料庫,以這樣的思維那方式可能有二:

1. 利用屬性標籤的手法,不過這樣子資訊被看光光。
2. 利用一個文字檔或資料庫檔,跟著檔案,程式以ObjectID或Handle做串連。不過這樣子若檔案沒過去,程式就找不到資料了。

最理想的方式還是將資訊掛在圖元上,當然使用者刪掉該圖元,資料也跟著刪掉。以圓來表示某圓桌好了,其中有個資訊是金額,那怎麼把金額資訊給掛在圖元上呢?

AutoCAD有兩個數據資料,一個叫擴展數據(Xdata),一個是擴展字典(Dictionary)

其中擴展數據,若您有安裝AutoCAD Express,在Tools中有個Attach Xdata 與 List Object Xdata這兩個可以用來寫入資訊及讀出資訊;或用xdata指令來操作。



在程式中,你只要利用 object.SetXData 就可以將資料寫入圖元,object.GetXData來抓取圖元資料。在這裡您另外還需要知道DXF的群組碼意義才能正確寫入資訊。如:90代表整數、40代表實數、1代表字串.....等。各位可以在AutoCAD中的 說明-其他資源-開發說明的Help檔中找到。



另外一個稍新(也很久了,2000版就支援了)的方法是Dictionary,手法類似,不過功能較強大,有下列兩個差別。

1. XData有16K的長度限制,Dictionary沒長度限制。
2. XData只能保存有限種類的數據資料,Dictionary沒有。

程式手法是利用object.GetXRecordData來獲取資料,利用object.SetXRecordData來寫入資料。



沒有留言:

張貼留言