一 在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 字串的...