objectARX 常用功能實現集合

2021-06-16 21:13:34 字數 3920 閱讀 9668

一  在arx中禁用autocad的某個命令

以line命令為例,在程式中加入下面的一句即可禁用line命令:

acedcommand(rtstr, "undefine", 

rtstr, "line",

rtnone);

下面的語句則可恢復line命令的定義:

acedcommand(rtstr, "redefine", 

rtstr, "line",

rtnone);

二 在對話方塊中預覽dwg檔案

使用acdbdisplaypreviewfromdwg函式,具體的方法為:

char filename[100];

strcpy(filename, "c:\\test.dwg");

bool es;

hwnd pwnd;

cframewnd *pframe = (cframewnd*)getdlgitem(idc_picture); 

es = acdbdisplaypreviewfromdwg(filename, pframe->m_hwnd);

上面的**將在乙個picture控制項中顯示指定的圖形。

另外,需要包含「dbmain.h」標頭檔案。 

三 通過arx更改autocad視窗的標題名稱

cmdiframewnd *pp; 

pp=acedgetacadframe(); 

pp->setwindowtext ("yourname"); 

pp->updatewindow (); 

四 獲得當前資料庫

在arx程式設計中,經常需要使用當前資料庫,例如需要獲得當前圖形中設定的文字樣式、標註樣式等。

要獲得當前資料庫,都可以直接使用下面的方法:

acdbtextstyletable *ptextstyletable;

acdbobjectid textstyleid;

五 將乙個圖插入另乙個圖(兩種方法)

在實踐中常常要將外部的圖形檔案source.dwg中插入到另外乙個圖形中或者當前圖形中.以插入到當前圖形dest.dwg為例. 

為了將乙個source.dwg插入dest.dwg中,首先要找到source.dwg這個檔案. 我們可以使用各種基本的技術和相應的規則從你的機器上或pdm資料庫中檢索到你要插入的source.dwg, 返回來乙個字元竄sfilename代表整個檔案及其路徑. 

然後建立乙個空的資料庫pnewdb讀入source.dwg. 

acdbdatabase *pnewdb =new acdbdatabase(adesk::kfalse); 

//在這裡一定要用adesk::kfalse 

acdocmanager->lockdocument(acdocmanager->curdocument()) ;//如果確定你不需要lockdocument, 這一行可以不要 

es=pnewdb->readdwgfile(sfilename , _sh_denyno,false); 

if (es!=acad::eok)   

這樣,source.dwg以經用pnewdb來表示了. 我們用pdb來表示當前資料庫 

acdbdatabase *pdb; 

現在,我們用insert來插入資料庫. insert有兩種用法,一種是直接insert, source.dwg中的圖元實體被分散地插入pdb中 

pdb->insert( acgematrix3d::kidentity, pnewdb );//這裡假定不對source.dwg做比例和轉角的變換. 如果我們在這裡結束程式,我們能看到source.dwg已經被插入,但不是乙個圖塊. 

另外一種插入法是要求插入後source.dwg成為乙個圖塊,圖塊的attribute也要從source.dwg中得到.這種方法要做大量的工作.首先執行insert()

cstring pblockname=」testblock」; 

acdbobjectid blockid; 

if((es=pdb->insert(blockid, pblockname,pnewdb, true))==acad::eok)   

else   

//這裡blcokid是insert執行後產生的,它代表的是乙個塊表記錄acdbblockrecord的id. pblockname是記錄名,要在insert執行前設定其值. 

如果我們在這裡結束程式,我們看不到任何東西,因為source並沒有真正被插入.我們還要做一些事,首先是建立乙個acdbblockreference, 並將它指向blockid所代表的acdbblockrecord, 然後將這個acdbblockreference加入pdb所代表的圖形資料庫中. 

acdbblockreference *pblkref = new acdbblockreference; 

pblkref->setblocktablerecord(blockid);//指向blockid; 

pblkref->setposition(pt);//設定位置 

pblkref->setrotation(angle);//設定轉角 

pblkref->setscalefactors( xrefscale);//設定放大比例 

acdbblocktable *pblocktable; 

pdb->getsymboltable(pblocktable, acdb::kforread); 

acdbblocktablerecord *pblocktablerecord; 

pblocktable->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite); 

pblocktable->close(); 

acdbobjectid newentid; 

pblocktablerecord->close(); 

如果我們在這裡結束程式,我們將看到當前圖形中source.dwg已經被作為圖塊插入.但是圖塊中沒有source.dwg所定義的attibute. 因此我們還要做工作.後面的事情就簡單了. 

acdbblocktablerecord *pblockdef; 

acdbopenobject(pblockdef, blockid, acdb::kforread); 

acdbblocktablerecorditerator *piterator; 

pblockdef->newiterator(piterator); 

acgepoint3d basepoint; 

acdbentity *pent; 

acdbattributedefinition *pattdef; 

for (piterator->start(); !piterator->done(); 

piterator->step())//將source.dwg中所有的attibute進行遍歷   

pent->close(); // use pent... pattdef might be null  } 

delete piterator;

六 在arx開啟檔案

在autocad中開啟圖形,並且顯示在圖形視窗中,可以使用acedsyncfileopen()函式。需要注意的是,這個函式只能在單文件模式中工作,

使用者可以在autocad「選項」對話方塊的「系統」選項卡中進行設定,或者在主函式中新增下面的語句:

具體的函式如下:

//載入模板檔案

void loadtemplate()

如果在多文件模式下,下面的方法可以在執行時彈出「選擇檔案」對話方塊,使用者選擇所要開啟的檔案後,在圖形視窗中顯示該圖形。

void zffopenopendwg()

下面的方法則開啟指定位置的dwg檔案。

void opendoc( void *pdata)  

else

} // this is command 'open1'

void zffopenopen1()

SAP常用功能

1 sap外觀 幫助圖示右側的按鈕是customizing of local layout 定製本地布局 按鈕,可以用它來變更sap gui顯示介面的風格。2 sap導航 1 在sap print list視窗裡,如果不想在保持期內儲存系統假離線請求,在print screen list 列印頁面列...

IOS 常用功能

對xib檔案的處理 xib的載入可以通過 nsbundle maibundle loadnibnamed nsstring str owner nsstring temp dic nsdictionary dic 載入 xib的fileowner檔案。然後通過下標得到sub 如果要獲取xib中固定的...

PHP常用功能

1 字串 主要方法有 strops substr str split explode 等,更多方法檢視php官方手冊 字串的方法 strpos substr print r explode str sun of beach 獲取子字串在當前字串的索引位置 echo strpos str,ea 字串的...