中望CAD二次開發(fā)課件 -第六章 塊操作_第1頁
中望CAD二次開發(fā)課件 -第六章 塊操作_第2頁
中望CAD二次開發(fā)課件 -第六章 塊操作_第3頁
中望CAD二次開發(fā)課件 -第六章 塊操作_第4頁
中望CAD二次開發(fā)課件 -第六章 塊操作_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第六章塊操作目錄CONTENTS01知識(shí)講解02任務(wù)一:創(chuàng)建塊03任務(wù)二:插入塊04任務(wù)三:屬性塊PART01知識(shí)講解01知識(shí)講解塊的概念塊定義塊參照屬性塊塊表學(xué)習(xí)模塊簡單理解,塊就是由簡單實(shí)體組合而成的一個(gè)整體。使用塊可以避免重復(fù)操作,并且方便修改和編輯,不同的塊還可以展示不同屬性。塊的概念01知識(shí)講解01知識(shí)講解塊定義是塊的模板,它包含了塊的圖形實(shí)體、屬性定義和其他相關(guān)信息。塊定義中定義了塊的形狀和屬性,可以用于在圖紙中創(chuàng)建塊參照。所有的實(shí)體都保存在塊表記錄中,而塊表記錄則存儲(chǔ)在塊表中。實(shí)際上,用戶在ZWCAD中定義塊相當(dāng)于增加了一個(gè)塊表記錄,塊表記錄的名稱就是塊定義的名稱。塊定義ZWCAD有塊定義和塊參照兩個(gè)概念。塊定義不是一個(gè)實(shí)體,而是一種對實(shí)體的描述,通過定義塊完成,塊參照則是一種實(shí)體,圖形窗口中顯示“塊”都是塊參照,通過插入塊獲得。塊參照是實(shí)際插入到圖紙中的塊的實(shí)例。塊參照可以使用預(yù)先設(shè)置好的塊定義創(chuàng)建,并可以在圖紙中的多個(gè)位置進(jìn)行插入和放置。塊參照是塊的副本,它可以獨(dú)立于塊定義進(jìn)行移動(dòng)、旋轉(zhuǎn)和修改屬性值。插入塊參照時(shí),CAD會(huì)將塊定義的圖形實(shí)體和屬性復(fù)制到指定位置。塊參照01知識(shí)講解屬性塊是塊的一種特殊實(shí)體,它可以包含與塊參照關(guān)聯(lián)的文本或值,是與塊參照關(guān)聯(lián)的附加信息,包含文本、值、單位等信息。屬性塊可以用于創(chuàng)建自動(dòng)化的圖紙標(biāo)注、注釋和數(shù)據(jù)提取,并且可以在塊參照中進(jìn)行編輯和修改。屬性塊01知識(shí)講解塊表是CAD圖形數(shù)據(jù)庫中的一個(gè)表,用于存儲(chǔ)所有的塊定義。塊表維護(hù)著塊定義的名稱和對應(yīng)的ObjectId,可以通過塊表來獲取、創(chuàng)建和管理塊定義。塊表01知識(shí)講解PART02創(chuàng)建塊02創(chuàng)建塊塊是CAD繪圖中的很重要的一部分,學(xué)習(xí)通過二次開發(fā)接口創(chuàng)建塊,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實(shí)施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實(shí)現(xiàn)塊的創(chuàng)建學(xué)習(xí)和了解創(chuàng)建塊的ZRX二次開發(fā)接口設(shè)計(jì)自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成塊的創(chuàng)建任務(wù)實(shí)施步驟一:獲得當(dāng)前圖形數(shù)據(jù)庫的塊表,向其中添加一條新的塊表記錄創(chuàng)建塊就是向塊表中添加一個(gè)新的塊表記錄,新的塊表記錄通過AcDbBlockTableRecord函數(shù)創(chuàng)建//創(chuàng)建新的塊表記錄AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();任務(wù)實(shí)施步驟二:設(shè)計(jì)并實(shí)現(xiàn)創(chuàng)建塊的自定義函數(shù)voidCreateBlock(){

//獲得當(dāng)前圖形數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);

//創(chuàng)建新的塊表記錄

AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();

//根據(jù)用戶的輸入設(shè)置塊表記錄的名稱

TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { pBlkTbl->close(); deletepBlkTblRcd; return; } pBlkTblRcd->setName(blkName);

//將塊表記錄添加到塊表中

AcDbObjectIdblkDefId; autoes=pBlkTbl->add(blkDefId,pBlkTblRcd); if(es!=Acad::eOk){ acutPrintf(TEXT("添加塊定義失敗")); deletepBlkTblRcd; pBlkTbl->close(); return; } pBlkTbl->close(); pBlkTblRcd->close();}成果展示://驗(yàn)證函數(shù)功能voidCreateBlock(){

//獲得當(dāng)前圖形數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);

//創(chuàng)建新的塊表記錄

AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();

//根據(jù)用戶的輸入設(shè)置塊表記錄的名稱

TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { pBlkTbl->close(); deletepBlkTblRcd; return; } pBlkTblRcd->setName(blkName);

//將塊表記錄添加到塊表中

AcDbObjectIdblkDefId; autoes=pBlkTbl->add(blkDefId,pBlkTblRcd); if(es!=Acad::eOk){ acutPrintf(TEXT("添加塊定義失敗")); deletepBlkTblRcd; pBlkTbl->close(); return; } pBlkTbl->close(); pBlkTblRcd->close();}課后思考:調(diào)用ZRX二次開發(fā)接口創(chuàng)建一個(gè)塊定義,該塊定義中是一個(gè)軸承的塊。PART03插入塊03插入塊塊是CAD繪圖中的很重要的一部分,學(xué)習(xí)通過二次開發(fā)接口插入塊,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實(shí)施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實(shí)現(xiàn)塊的插入學(xué)習(xí)和了解創(chuàng)建塊的ZRX二次開發(fā)接口設(shè)計(jì)自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成塊的插入任務(wù)實(shí)施步驟一:學(xué)習(xí)插入塊的ZRX二次開發(fā)接口在ZRX編程中,塊參照由AcDbBlockReference類來表示AcDbBlockReference(

//position是塊參照的插入點(diǎn)constAcGePoint3d&position,//blockTableRec是塊參照所參照的塊表記錄(塊定義)的ID。AcDbObjectIdblockTableRec);任務(wù)實(shí)施步驟二:設(shè)計(jì)并實(shí)現(xiàn)插入塊的自定義函數(shù)voidInsertBlock(){ //獲得用戶輸入的塊定義名稱

TCHARblkName[40]; if(acedGetString(0,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { return; }

//獲得當(dāng)前數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);

//查找用戶指定的塊定義是否存在

if(!pBlkTbl->has(blkName)) { acutPrintf(TEXT("\n當(dāng)前圖形中未包含指定名稱的塊定義!")); pBlkTbl->close(); return; }

//獲得用戶指定的塊表記錄

AcDbObjectIdblkDefId; pBlkTbl->getAt(blkName,blkDefId); pBlkTbl->close();

//獲得用戶輸入的塊參照的插入點(diǎn)

ads_pointpt; if(acedGetPoint(NULL,TEXT("\n輸入塊參照的插入點(diǎn):"),pt)!=RTNORM) { pBlkTbl->close(); return; } AcGePoint3dptInsert=asPnt3d(pt); //創(chuàng)建塊參照對象

AcDbBlockReference*pBlkRef=newAcDbBlockReference(ptInsert,blkDefId);

//將塊參照添加到模型空間

UtilsFunc::PostToModel(pBlkRef);}成果展示://驗(yàn)證插入塊的函數(shù)功能voidInsertBlock(){ //獲得用戶輸入的塊定義名稱

TCHARblkName[40]; if(acedGetString(0,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { return; }

//獲得當(dāng)前數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);

//查找用戶指定的塊定義是否存在

if(!pBlkTbl->has(blkName)) { acutPrintf(TEXT("\n當(dāng)前圖形中未包含指定名稱的塊定義!")); pBlkTbl->close(); return; }

//獲得用戶指定的塊表記錄

AcDbObjectIdblkDefId; pBlkTbl->getAt(blkName,blkDefId); pBlkTbl->close();

//獲得用戶輸入的塊參照的插入點(diǎn)

ads_pointpt; if(acedGetPoint(NULL,TEXT("\n輸入塊參照的插入點(diǎn):"),pt)!=RTNORM) { pBlkTbl->close(); return; } AcGePoint3dptInsert=asPnt3d(pt); //創(chuàng)建塊參照對象

AcDbBlockReference*pBlkRef=newAcDbBlockReference(ptInsert,blkDefId);

//將塊參照添加到模型空間

UtilsFunc::PostToModel(pBlkRef);}課后思考:結(jié)合上一節(jié)內(nèi)容,調(diào)用ZRX二次開發(fā)接口,插入一個(gè)圖形為軸承的塊參照。PART04塊屬性03屬性塊屬性塊是CAD繪圖中的很重要的一部分,學(xué)習(xí)通過二次開發(fā)接口創(chuàng)建和插入屬性塊,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實(shí)施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實(shí)現(xiàn)屬性塊的創(chuàng)建和插入學(xué)習(xí)和了解創(chuàng)建和插入屬性塊的ZRX二次開發(fā)接口設(shè)計(jì)自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成屬性塊的創(chuàng)建和插入任務(wù)實(shí)施步驟一:創(chuàng)建屬性塊的自定義函數(shù)在ZRX編程中,屬性塊的創(chuàng)建與塊定義的創(chuàng)建類似voidCreateAttBlk(){

//獲得當(dāng)前圖形數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite);

//創(chuàng)建新的塊表記錄

AcDbBlockTableRecord*pBlkTblRcd=newAcDbBlockTableRecord();

//根據(jù)用戶的輸入設(shè)置塊表記錄的名稱

TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { pBlkTbl->close(); deletepBlkTblRcd; return; } pBlkTblRcd->setName(blkName);

//將塊表記錄添加到塊表中

AcDbObjectIdblkDefId; pBlkTbl->add(blkDefId,pBlkTblRcd); pBlkTbl->close();

//向塊表記錄中添加實(shí)體

AcGePoint3dptStart(-10,0,0),ptEnd(10,0,0); AcDbLine*pLine1=newAcDbLine(ptStart,ptEnd); //創(chuàng)建一條直線

ptStart.set(0,-10,0); ptEnd.set(0,10,0); AcDbLine*pLine2=newAcDbLine(ptStart,ptEnd); //創(chuàng)建一條直線

AcGeVector3dvecNormal(0,0,1); AcDbCircle*pCircle=newAcDbCircle(AcGePoint3d::kOrigin,vecNormal,6);//創(chuàng)建一個(gè)圓

AcDbAttributeDefinition*pAttDef=newAcDbAttributeDefinition(AcGePoint3d(0,0,0),TEXT("20"),TEXT("直徑"),TEXT("輸入直徑"));

AcDbObjectIdentId; pBlkTblRcd->appendAcDbEntity(entId,pLine1); pBlkTblRcd->appendAcDbEntity(entId,pLine2); pBlkTblRcd->appendAcDbEntity(entId,pCircle); pBlkTblRcd->appendAcDbEntity(entId,pAttDef); pLine1->close(); pLine2->close(); pCircle->close(); pAttDef->close(); pBlkTblRcd->close();}任務(wù)實(shí)施步驟二:插入屬性塊的自定義函數(shù)voidInsertAttBlk(){

//獲得用戶輸入的塊定義名稱

TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { return; }

//獲得當(dāng)前數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite); //查找用戶指定的塊定義是否存在

if(!pBlkTbl->has(blkName)) { acutPrintf(TEXT("\n當(dāng)前圖形中未包含指定名稱的塊定義!")); pBlkTbl->close(); return; }

//獲得用戶指定的塊表記錄

AcDbObjectIdblkDefId; pBlkTbl->getAt(blkName,blkDefId); pBlkTbl->close(); //獲得用戶輸入的塊參照的插入點(diǎn)

ads_pointpt; if(acedGetPoint(NULL,TEXT("\n輸入塊參照的插入點(diǎn):"),pt)!=RTNORM) { pBlkTbl->close(); return; } AcGePoint3dptInsert=asPnt3d(pt); //創(chuàng)建塊參照對象

AcDbBlockReference*pBlkRef=newAcDbBlockReference(ptInsert,blkDefId); //創(chuàng)建塊屬性對象

AcDbAttribute*pAtt=newAcDbAttribute(); pAtt->setTag(TEXT("直徑")); pAtt->setTextString(TEXT("50")); pAtt->setPosition(ptInsert); pBlkRef->appendAttribute(pAtt);

//將塊參照添加到模型空間

UtilsFunc::PostToModel(pBlkRef);}成果展示://驗(yàn)證插入屬性塊的函數(shù)功能voidInsertAttBlk(){

//獲得用戶輸入的塊定義名稱

TCHARblkName[40]; if(acedGetString(Adesk::kFalse,TEXT("\n輸入圖塊的名稱:"),blkName)!=RTNORM) { return; }

//獲得當(dāng)前數(shù)據(jù)庫的塊表

AcDbBlockTable*pBlkTbl=NULL; acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlkTbl,AcDb::kForWrite); //查找用戶指定的塊定義是否存在

if(!pBlkTbl->has(bl

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論