接上兩篇:
C#程式對AutoCAD二次開發(一)
C#語言對AutoCAD二次開發(二)
在本章内容中主要來講解一下CAD中實體。認識實體的類型、實體的屬性和實體的方法,以及如何使用實體辨別和事務處理,并把向圖面添加實體寫成一個函數,用于後期開發進行調用。在CAD圖形中所有的圖元對象都可以稱之為實體(Entity),是所有可見對象基類,可見對象都繼承Entity的屬性和方法。使用lisp語言的entget方法即可擷取圖元資訊。
實體是具有圖形特征的資料庫對象,實體的對象包含直線、圓、圓弧、文本注記、曲線和橢圓。使用者可以在螢幕上看到實體,也可以對實體進行編輯。在我們工作過程中常用的就是Curve類,圓、圓弧、多段線、都繼承于Curve類。除少數複雜實體外,大部分實體都含有自身幾何圖形所有的資訊;少數複雜實體則包含其他對象,這些對象儲存着實體的幾何資訊,比如Polyline2d含有Vertex對象。常見的比如南方Cass界址線屬性,每條界址線的屬性儲存在宗地線的節點上。
Entity類部分屬性
Entity類部分方法
在上節課程中學到向CAD中添加一條線段;在CAD開發中我們經常會用到向圖面添加實體,下面把向CAD中添加實體重寫一個方法。方法又稱之為函數,主要的作用是将一堆代碼進行重用的一種機制,避免太多的備援的代碼,還有友善後期維護。
CAD對象辨別
句柄(Handle)
DWG檔案中的每一個實體都有一個唯一的辨別符,稱為句柄,用Autodesk.AutoCAD.DatabaseServices 命名空間的Handle類表示。實體的句柄可以随DWG檔案儲存,是以即使DWG 檔案沒有被AutoCAD 打開,也可以根據句柄搜尋DWG 檔案擷取對象資訊。句柄的唯一性僅限于其所在的DWG檔案中,可以通過資料庫對象DBObject的Handle屬性傳回資料庫對象對應的句柄。
ObjectId
當DWG圖形被打開後,資料庫中的實體對象都會在記憶體中對應一個唯一的對象ID,用Autodesk.AutoCAD.DatabaseServices 命名空間的ObjectId類表示,對象ID也是與實體對象相關聯的唯一的辨別符, 與句柄不同,對象ID僅存在于其所在的資料庫從記憶體中産生到資料庫被删除之間,并且如果操作多個資料庫,對象ID 在多個資料庫之間都是唯一的,可以通過資料庫對象DBObject 的ObjectId屬性傳回資料庫對象對應的ObjectId。通過ObjectId 我們可以通過事務的GetObject方法将對象打開。
事務處理和對象打開
事務用來将對多個對象的多個操作打包成單個操作組,以便于送出或復原。事務通過事務管理器啟動和管理。啟動事務之後,我們就可以用GetObject()方法打開對象。當我們操作用GetObject函數打開的對象時,事務管理器TransactionManager會跟蹤對該對象的修改。建立及添加到資料庫的任何新對象也應同時調用AddNewlyCreatedDBObject()方法将其添加到事務。對象編輯完并添加到資料庫後,可以使用事務對象的Commit()方法儲存對資料庫的修改并關閉所有打開的對象。事務處理完畢後,調用Dispose()方法關閉事務。如果使用了.net語言中的Using和End Using關鍵字來表示事務的開始和結束,就不需要調用Dispose()方法。
如果拿到對象的ObjectId,使用GetObject()方法進行打開,打開方式有以下幾種方式:
Read:以讀的模式打開對象。
Write:對還沒打開的對象以寫的模式打開。
Notify:以通知的方式打開。
實體類别識别
實體都是從Entity 派生的,是以當打開一個實體對象時,經常需要判斷其類型才能通路相應的屬性和方法,例如判斷選擇的一個實體是一條線還是一個圓等,因為直線和圓對應的一些屬性是不一樣的,例如圓有圓心,而直線沒有,是以資料庫對象的類型判斷十分重要。可以通過對象的Object.GetType 方法擷取對象的類型System.Type 對象。