autocad圖形是儲存在資料庫中物件的集合。符號表和字典是用來儲存資料庫物件的容器物件,這兩種容器物件都可以將乙個符號名對映到乙個資料庫物件。
符號表舉例:層表acdblayertable
塊表acdbblocktable 線性表
塊表記錄acdbblocktablerecord
塊表引用
acdbblocktablereference
字典提供了乙個比符號表更加通用的容器物件來儲存。乙個字典可以包含任何acdbobject
類和子類物件。
autocad中物件id與控制代碼的區別:
物件的id是在編輯過程中用來識別不同物件(概念上物件包含實體),而在最終儲存至資料庫中時,採用控制代碼來標示相應的物件。
即從資料庫中提取或儲存物件時,才會使用或產生控制代碼。而在autocad程式中操作物件時,使用的大多為物件id。
所以,物件id在乙個應用程式中是唯一標示乙個實體,而在應用程式連線的資料庫中,不同的實體分別儲存到不同資料庫中時,可能會用到相同控制代碼。
獲取物件id的方法:
1. 可在建立物件實體並寫入資料庫的過程中獲取物件id
2. 可以用迭代器遍歷容器和物件列表獲取物件id。acdbdictionaryiterator和acdbobjectiterator.
3個塊表記錄:模型空間記錄(model_space)和兩種圖形空間記錄(parer_space,parer_space0)。層表最初只包含乙個記錄:0層記錄。線性表最初記錄:continuous記錄
1.命名物件字典:組詞典(group dictionary)、多線樣式詞典(mline style dictionary)、布局辭典(layout dictionary)和列印樣式詞典(plot style dictionary)
2.當acdbdatabase類建構函式中,builddefaultdrawing為ktrue時,可以再新的autocad資料庫中構造以上物件,開啟dwg和dxf檔案時應該設定為kfalse。
3. 開啟模型空間的塊表記錄:
pblocktable->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite);
成功返回acad::eok
4.將實體加入到塊表記錄:
acad
::errorstatus
es = pblocktablerecord->
(entid,
pent);
5.建立新層:
acdblayertable *playertable;
acdblayertablerecord *playertablerecord = newacdblayertablerecord;
playertablerecord->setname(「mynewlayer」);
acdbobjectid playerid;
playertable->add(playerid,playertablerecord);
playertable->close();
playertablerecord->close();
return playerid;
物件id於控制代碼之間的轉換
acdbdatabase::getacdbobjectid(acdbobjectid&retid,adesk::booleancreateifnotfound,const acdbhandle& objhandle, adesk::uint32 xrefid=0);
開啟objectarx
物件:acdbopenobject(acdbobject*& pobject, acdbobjectid,acdb::openmode)
acdbobject
的成員函式
voidgetacdbhandle(acdbhandle& handle) const ,
若物件沒有加入資料庫則沒有控制代碼,可以用
acdbhandle::isnull
來檢查物件在加入資料庫之前,隨時可以用
delete()
函式刪除。但是加入之後需要用
erase
將物件表示為擦除,但是資料庫中仍存在。但在存檔時會被析構。
erase(ktrue)
刪除物件
erase(kfalse)
恢復物件。但是資料庫物件被刪除後無法通過該方式恢復,需要重新
setat
。若為實體物件,則可以恢復
ads_name
資料型別相當於
acdbobjectid.
acdb
庫提供以下函式進行相互之間的轉換:
extern acad::errorstatus acdbgetadsname(ads_name&objname,acdbobjectid objid);
extern acad::errorstatus acdbgetobjectid(acdbobjectid&objid,const ads_name objname);
通過物件控制代碼來獲得
ads_name
:int acdbhandent(const char* handle, ads_name entres);
加入新組
createnewgroup
(acdbobjectidarray&objids, char* pgroupname, acdbobjectid playerid
)acdbdictionary *pgroupdict;
acdbobjectid pgroupid;
pgroupdict->setat(pgroupname,pgroup,pgroupid);
pgroup->setlayer(playerid);
pgroupdict->close();
pgroup->close();
}如果實體物件建立失敗,返回值為null,return acad::eoutofmemory
當前資料庫塊表開啟失敗,返回值非acad::eok,關閉相應資料庫表,並記錄acad::errorstatus es2物件,acrx_abort(「***」,acaderrorstatustext(es2))報出錯誤,刪除相應物件。
如何辨析autocad中資料庫不同表之間的關係?
首先我們要明確的是autocad資料庫中不同表之間,甚至表與記錄之間的關係都是平等的。並不是從表面上看到的包含關係。
初學者往往由於先要從當前主資料庫中獲取塊表,然後通過塊表來獲得塊記錄,然後在塊記錄中存入或取出實體,認為這是包含關係。
但是事實上類似於塊記錄擁有乙個儲存多個實體物件id的陣列,塊表與表記錄之間大多都類似於這種關聯關係。
所以,為了避免忘記,常常可以找到表記錄時,就可以將不需要使用的表關閉。
AutoCAD資料庫結構
autocad資料庫 acdb 是一些儲存在資料庫中的物件的集合。資料詞典,符號表是儲存資料庫物件的容器 container object 用於組織和管理資料庫物件。這兩種容器物件都有與之相關的符號名,用字元來表示。符號表是固定的,不能新增新錶,只能新增符號表記錄,有9個。資料詞典是乙個比符號表更通...
資料庫簡介
1.網型 2.層次型 3.關係型 4.物件導向的關係型 5.物件導向型 dbms 資料庫管理系統 rdbms 關係型資料庫管理系統 rodbms 物件導向的關係型資料庫管理系統 現在比較流行的大型資料庫有oracle,sqlserver,sybase,db2,都採用了sql 結構化查詢語言 作為資料...
資料庫簡介
1.關係型資料庫 sql mysql資料庫是中小型企業使用的資料。主要是使用innnodb的引擎儲存資料 orcalr資料庫是大型企業使用的資料庫 甲骨文公司 mariadb資料庫是把mysql的閉源漏洞在論壇上修復後的版本,使用時xtradb引擎 sql server是微軟設計的一種針對windo...