AutoCAD資料庫簡介

2021-07-15 14:12:24 字數 3479 閱讀 1556

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...