AutoCAD ObjectId 、指針、句柄和 ads_name的區別


 

 訪問實體的特性必須通過對象指針,但是一旦你獲得了實體的ID、句柄或者ads_name,都能通過ID作中介而獲得對象的指針。其中ID是一個橋梁。句柄是Windows編程一個常用的概念,在ObjectARX編程中一般指AcDbHandle類(也可指Windows編程的界面元素),該類封裝了一個64位整形標識符,隨DWG文件一同保存。ads_name則是在ADS編程中出現的一個概念,其實際上是一個二維數組,數組元素類型為長整型,在與用戶交互的函數中經常用到。

ID、句柄和 ads_name 具有各自的特點:
(1) AcDbObjectId:當dwg圖形被打開后,數據庫中的實體對象都會在內存中對應一個唯一的id(AcDbObjectId),AcDbObjectId也是與對象相關聯的唯一標識符.AcDbObjectId僅存在於其所存在的數據庫從內存中產生到數據庫被刪除之間.如果操作多個dwg,AcDbObjectId在多個數據庫之間都是唯一的.
(2) AcDbHandle:dwg文件中每一個實體都有一個唯一的標識符,用AcDbHandle表示,在一個AutoCAD中,不能保證每個實體的句柄都唯一。在autoCAD的兩個Dwg中同一實體的句柄是相同的。實體的AcDbHandle可以隨dwg文件被保存,所以即使dwg未被cad打開,也可以根據句柄搜索dwg文件獲取對象信息.

(3) AcDbObject對象指針:當一個對象被打開后,AutoCAD會返回指向AcDbObject或其派生類型的應該c++指針,然后就可以采用標准c++類對象的方式對實體進行操作.
(4)ads_name:AutoCAd定義的一個數據類型.一般用來保存用戶交互過程中成功選擇實體的節點,ads_name是不穩定的,僅當你在一旦退出 AutoCAD 或者切換到另一個圖形,ads_name 就會丟失.

ID、指針、句柄和 ads_name 之間具有下面的轉換關系:
(1)從 AcDbObjectId 到AcDbObject對象:acdbOpenAcDbObject() 或者 acdbOpenObject() 。
(2)從AcDbObject對象到 AcDbObjectId :所有的數據庫常駐對象都繼承自 AcDbObjectId 函數能獲得所指向對象的 ID。
(3)從AcDbHandle到 AcDbObjectId : AcDbDatabase::getAcDbObjectId();
(4)從 AcDbObjectId 到AcDbHandle:AcDbObjectId::handle() 。
(5)從AcDbObject到AcDbHandle:AcDbObject::getAcDbHandle().
(6) 從 ads_name 到 AcDbObjectId :使用全局函數 acdbGetObjectId()。
(7)從 AcDbObjectId到 ads_name:使用全局函數 acdbGetAdsName()。

 

來自:

https://my.oschina.net/u/2930533/blog/759617

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM