中望CAD二次開發(fā)課件 全套 1-8 二次開發(fā)環(huán)境部署 - 第八章 用戶交互_第1頁
中望CAD二次開發(fā)課件 全套 1-8 二次開發(fā)環(huán)境部署 - 第八章 用戶交互_第2頁
中望CAD二次開發(fā)課件 全套 1-8 二次開發(fā)環(huán)境部署 - 第八章 用戶交互_第3頁
中望CAD二次開發(fā)課件 全套 1-8 二次開發(fā)環(huán)境部署 - 第八章 用戶交互_第4頁
中望CAD二次開發(fā)課件 全套 1-8 二次開發(fā)環(huán)境部署 - 第八章 用戶交互_第5頁
已閱讀5頁,還剩416頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第一章二次開發(fā)環(huán)境部署目錄CONTENTS01CAD二次開發(fā)和ZRX接口的基本概念02搭建開發(fā)環(huán)境03加載并調(diào)試ZRX程序PART01CAD二次開發(fā)和ZRX接口的基本概念CAD二次開發(fā)和ZRX接口的基本概念CAD是一個擴(kuò)展能力很強(qiáng)的平臺CAD軟件的核心是指其基本功能和內(nèi)部架構(gòu)。這包括CAD軟件的繪圖引擎、數(shù)據(jù)管理系統(tǒng)和用戶界面等。API提供了開發(fā)人員訪問CAD軟件核心功能的方式,使他們能夠編寫自定義程序、腳本和插件。通過API,開發(fā)人員可以創(chuàng)建新的繪圖命令、修改現(xiàn)有功能、訪問和編輯CAD文件中的數(shù)據(jù)等。什么是CAD二次開發(fā)核心API命令和二次開發(fā)CAD二次開發(fā)和ZRX接口的基本概念運(yùn)行時擴(kuò)展能做什么?什么是ZRX用戶交互視圖管理幾何算法文檔管理圖型數(shù)據(jù)庫操作PART02搭建開發(fā)環(huán)境搭建開發(fā)環(huán)境C++API最低版本:VisualStudio201715.9版本平臺工具集:VisualStudio2017(v141)ZRXSDK基礎(chǔ)環(huán)境搭建開發(fā)環(huán)境Inc:頭文件lib-Win32/lib-x64:庫文件Arxport:兼容ObjectArx的頭文件Doc/Samples:文檔/示例程序utils:擴(kuò)展庫Classmap:類派生關(guān)系圖Tools:向?qū)О惭b包ZRXSDK目錄介紹搭建開發(fā)環(huán)境向?qū)鋵嵤荲S的一種插件,可以在創(chuàng)建工程的時候讓用戶選取指定的模板向?qū)Э梢钥焖俚厣蒢RX工程在安裝ZRXSDK的時候可以同時安裝向?qū)?,也可以在sdk目錄里手動安裝使用向?qū)?chuàng)建ZRX工程搭建開發(fā)環(huán)境使用向?qū)?chuàng)建ZRX工程搭建開發(fā)環(huán)境使用向?qū)?chuàng)建ZRX工程搭建開發(fā)環(huán)境注冊/注銷命令使用向?qū)?chuàng)建ZRX工程搭建開發(fā)環(huán)境命令組:分散注冊,集中管理,集中注銷命令名稱:_HelloGlobalHelloLocal使用向?qū)?chuàng)建ZRX工程PART03加載并調(diào)試ZRX程序加載并調(diào)試ZRX程序Appload命令ZRX命令手動加載/卸載加載并調(diào)試ZRX程序啟動組自動加載加載并調(diào)試ZRX程序RX文件自動加載加載并調(diào)試ZRX程序調(diào)試ZRX程序加載并調(diào)試ZRX程序在調(diào)試過程中如果需要修改ZRX的內(nèi)容需要使用附加調(diào)試點(diǎn)擊生成對應(yīng)的ZRX文件,打開ZWCAD并加載點(diǎn)擊調(diào)試->附加到進(jìn)程選擇附加到選擇本機(jī)代碼進(jìn)程選擇ZWCAD.exe附加調(diào)試加載并調(diào)試ZRX程序感謝支持THANKYOUFORWATCHING第二章直線段繪制與屬性修改目錄CONTENTS01知識講解02創(chuàng)建直線03創(chuàng)建多線段04修改屬性PART01知識講解01知識講解DWG數(shù)據(jù)庫概述直線、多段線的概念直線、多段線屬性創(chuàng)建直線步驟學(xué)習(xí)模塊01知識講解1.圖形數(shù)據(jù)庫 ZWCAD數(shù)據(jù)庫是用來存儲組成ZWCAD圖的對象,ZWCAD圖是一個存儲在數(shù)據(jù)庫中的對象的集合?;镜臄?shù)據(jù)庫對象是實體、符號表和詞典。2.實體

實體是在ZWCAD圖內(nèi)部表示圖的一種數(shù)據(jù)庫對象,線、圓、弧、文本、實心體、區(qū)域、復(fù)合線和橢圓都是實體,用戶可以在屏幕上看見實體并能對其進(jìn)行操作。3.符號表

符號表是用于存儲數(shù)據(jù)庫對象的容器,映射一個符號表(文本串)到一個數(shù)據(jù)庫對象,一個ZWCAD數(shù)據(jù)庫包含一套固定的符號表,每一個符號表包含一個特定符號表記錄類的實例,我們不能向數(shù)據(jù)庫添加新符號表。例如層表(AcDbLayerTable)是符號表之一,包含層表記錄;塊表(AcDbBlockTable)也是一個符號表,包含塊表記錄。所有ZWCAD實體都包含在某個塊表記錄里。4.對象ID

通過使用對象ID可以獲得一個指向當(dāng)前數(shù)據(jù)庫對象的指針,籍此可以對對象進(jìn)行操作1、DWG數(shù)據(jù)庫概述01知識講解數(shù)據(jù)庫、實體、符號表之間的關(guān)系1、DWG數(shù)據(jù)庫概述01知識講解直線是CAD實體對象的一種,用于表示直線圖形。它包含了起點(diǎn)和終點(diǎn)兩個點(diǎn)的坐標(biāo)屬性,可以通過這些屬性來確定直線的位置、長度和方向等信息。多段線由多個線段或曲線段組成,并可以被視為一個整體,它具有一些特殊的屬性和方法,例如閉合、平滑擬合、插入頂點(diǎn)等等。多段線對象可以用于表示各種復(fù)雜的二維圖形,例如多邊形、輪廓線、路徑等等,還可以用于描述道路、管道、電纜等物理系統(tǒng)的布局和設(shè)計。2、直線、多段線的概念01知識講解3、直線、多段線屬性直線屬性:起始端點(diǎn)、終止端點(diǎn)添加標(biāo)題多段線屬性:頂點(diǎn)序號、頂點(diǎn)位置、頂點(diǎn)處凸度、線寬、頂點(diǎn)標(biāo)識符01知識講解3、創(chuàng)建直線步驟添加標(biāo)題要創(chuàng)建一條直線并將其添加到數(shù)據(jù)庫中,首先調(diào)用已有的直線類方法來創(chuàng)建一條直線,然后按照之前的層級圖依次獲取數(shù)據(jù)庫的塊表、塊表記錄,然后將之前創(chuàng)建的直線對象添加到塊表記錄中,最后關(guān)閉數(shù)據(jù)庫即可PART02創(chuàng)建直線02創(chuàng)建直線直線是CAD繪圖中的基本圖元,學(xué)習(xí)創(chuàng)建直線的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)直線的繪制學(xué)習(xí)和了解創(chuàng)建直線的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成直線的繪制任務(wù)實施步驟一:學(xué)習(xí)創(chuàng)建直線的ZRX二次開發(fā)接口在ZRX中,使用AcDbLine類來表示直線:AcDbLine( constAcGePoint3d&ptStart,//ptStart代表直線的起點(diǎn)(三維坐標(biāo)點(diǎn)) constAcGePoint3d&ptEnd,//ptEnd代表直線的終點(diǎn)(三維坐標(biāo)點(diǎn)));任務(wù)實施步驟二:設(shè)計并實現(xiàn)創(chuàng)建直線的自定義函數(shù)根據(jù)輸入直線的兩個端點(diǎn)坐標(biāo)參數(shù),實現(xiàn)創(chuàng)建直線的函數(shù)://函數(shù):給定直線的兩個端的實現(xiàn)直線的創(chuàng)建//ptStart:直線起始端點(diǎn)的三維坐標(biāo)點(diǎn)//ptEnd:直線的終止端點(diǎn)voidCreateLine(){ AcGePoint3dptStart(0.0,0.0,0.0); AcGePoint3dptEnd(100.0,100.0,0.0); AcDbLine*pLine=newAcDbLine(ptStart,ptEnd); //將直線對象pLine添加到模型空間中 AcDbObjectIdlineId=Postmodel(pLine);}任務(wù)實施步驟三:設(shè)計并實現(xiàn)將對象添加到模型空間的函數(shù)AcDbObjectIdPostmodel(AcDbEntity*ent){ //獲取指向當(dāng)前活動的圖形數(shù)據(jù)庫指針 AcDbDatabase*pDb=acdbHostApplicationServices()->workingDatabase();

AcDbBlockTable*pBT=nullptr;

//從數(shù)據(jù)庫獲取塊表 pDb->getBlockTable(pBT,AcDb::kForRead);

if(pBT)

{ AcDbBlockTableRecord*pBTR=nullptr;

//從塊表獲取模型空間的塊表記錄 pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);

pBT->close();

if(pBTR) { AcDbObjectIdentId; pBTR->appendAcDbEntity(entId,ent); pBTR->close(); ent->close(); returnentId; } }}成果展示://驗證函數(shù)功能voidCreateLine(){

//直線起始端點(diǎn)的三維坐標(biāo)點(diǎn)(0.0,0.0,0.0) AcGePoint3dptStart(0.0,0.0,0.0);

//直線的終止端點(diǎn)三維坐標(biāo)(100.0,100.0,0.0) AcGePoint3dptEnd(100.0,100.0,0.0); AcDbLine*pLine=newAcDbLine(ptStart,ptEnd); //將直線對象pLine添加到模型空間中 AcDbObjectIdlineId=Postmodel(pLine);}PART03創(chuàng)建多段線03創(chuàng)建多段線多段線是CAD繪圖中的基本圖元,學(xué)習(xí)創(chuàng)建多段線的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)多段線的繪制學(xué)習(xí)和了解創(chuàng)建多段線的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成多段線的繪制任務(wù)實施步驟一:學(xué)習(xí)創(chuàng)建多段線的ZRX二次開發(fā)接口ZRX中常用的多段線類有AcDbPolyline和AcDb3dPolyline。AcDbPolyline用于創(chuàng)建二維多段線,AcDb3dPolyline用于創(chuàng)建三維多段線。//創(chuàng)建平面多段線對象AcDbPolyline*pPoly=newAcDbPolyline();任務(wù)實施步驟二:學(xué)習(xí)向多段線對象添加頂點(diǎn)的ZRX二次開發(fā)接口創(chuàng)建完多段線對象后,通過addvertexAt函數(shù),將每一個頂點(diǎn)添加到多段線中。virtualAcad::ErrorStatusaddVertexAt( //頂點(diǎn)的序號 unsignedintindex,

//頂點(diǎn)的位置 constAcGePoint2d&pt,

//頂點(diǎn)處的凸度 doublebulge=0,

//起始線寬和終止線寬 doublestartWidth=-1,

doubleendWidth=-1,

//輸入頂點(diǎn)標(biāo)識符(默認(rèn)為0) Adesk::Int32vertexIdentifier=0 );任務(wù)實施步驟三:設(shè)計并實現(xiàn)多段線的創(chuàng)建自定義函數(shù)voidCreatePoly(){ AcDbPolyline*pPoly=newAcDbPolyline();

AcGePoint2dpt0(0,0); AcGePoint2dpt1(10,0); AcGePoint2dpt2(5,10); AcGePoint2dpt3(0,0);

//把頂點(diǎn)添加到多段線中

pPoly->addVertexAt(pPoly->numVerts(),pt0); pPoly->addVertexAt(pPoly->numVerts(),pt1); pPoly->addVertexAt(pPoly->numVerts(),pt2); pPoly->addVertexAt(pPoly->numVerts(),pt3); AcDbObjectIdlineId=Postmodel(pPoly);}成果展示://驗證函數(shù)功能voidCreatePoly(){ AcDbPolyline*pPoly=newAcDbPolyline();

AcGePoint2dpt0(0,0); AcGePoint2dpt1(10,0); AcGePoint2dpt2(5,10); AcGePoint2dpt3(0,0); //把頂點(diǎn)添加到多段線中

pPoly->addVertexAt(pPoly->numVerts(),pt0); pPoly->addVertexAt(pPoly->numVerts(),pt1); pPoly->addVertexAt(pPoly->numVerts(),pt2); pPoly->addVertexAt(pPoly->numVerts(),pt3); AcDbObjectIdlineId=Postmodel(pPoly);}課后思考:調(diào)用ZRX二次開發(fā)接口創(chuàng)建一個五角星。PART04修改屬性04修改屬性屬性是CAD繪圖中很重要的部分,學(xué)習(xí)修改屬性的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)屬性的修改學(xué)習(xí)和了解修改屬性的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成屬性的修改任務(wù)實施步驟一:學(xué)習(xí)獲取實體指針的ZRX二次開發(fā)接口要修改實體屬性,首先要獲取實體指針,zrx二次開發(fā)中通過acdbOpenAcDbEntity函數(shù)獲取函數(shù)指針Acad::ErrorStatusacdbOpenAcDbEntity( //返回指向圖形數(shù)據(jù)庫實體的指針 AcDbEntity*&pEnt, //輸入要獲得的實體的ID號 AcDbObjectIdid, //打開該實體的方式 AcDb::OpenModemode, //是否允許訪問一個已經(jīng)被刪除的實體 boolopenErasedEntity=false);任務(wù)實施步驟二:設(shè)計并實現(xiàn)屬性修改的自定義函數(shù)voidChangeColor(){ AcDbDatabase*pDb=acdbHostApplicationServices()->workingDatabase();//獲取指向當(dāng)前活動的圖形數(shù)據(jù)庫指針

AcDbBlockTable*pBT=nullptr; pDb->getBlockTable(pBT,AcDb::kForRead);//從數(shù)據(jù)庫獲取塊表

if(pBT)//判斷是否成功

{ AcDbBlockTableRecord*pBTR=nullptr; //ACDB_MODEL_SPACE="*Model_Space" pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);//從塊表獲取模型空間的塊表記錄

pBT->close();//用完后馬上關(guān)閉

if(pBTR) {

//遍歷模型空間里的所有實體

AcDbBlockTableRecordIterator*pIter=nullptr; pBTR->newIterator(pIter); for(pIter->start();!pIter->done();pIter->step()) {

//利用迭代器獲取每一個實體

AcDbEntity*pEnt=nullptr; pIter->getEntity(pEnt,AcDb::kForRead); if(pEnt->isKindOf(AcDbLine::desc()))//判斷實體是否是直線

{ pEnt->upgradeOpen();//升級打開權(quán)限

pEnt->setColorIndex(1);//把直線顏色設(shè)成紅色

pEnt->downgradeOpen();//降級權(quán)限

} pEnt->close();//關(guān)閉實體

}deletepIter;//刪除迭代器

pBTR->close(); } }}成果展示://驗證函數(shù)功能voidChangeColor(){ AcDbDatabase*pDb=acdbHostApplicationServices()->workingDatabase();//獲取指向當(dāng)前活動的圖形數(shù)據(jù)庫指針

AcDbBlockTable*pBT=nullptr; pDb->getBlockTable(pBT,AcDb::kForRead);//從數(shù)據(jù)庫獲取塊表

if(pBT)//判斷是否成功

{ AcDbBlockTableRecord*pBTR=nullptr; //ACDB_MODEL_SPACE="*Model_Space" pBT->getAt(ACDB_MODEL_SPACE,pBTR,AcDb::kForWrite);//從塊表獲取模型空間的塊表記錄

pBT->close();//用完后馬上關(guān)閉

if(pBTR) {

//遍歷模型空間里的所有實體

AcDbBlockTableRecordIterator*pIter=nullptr; pBTR->newIterator(pIter); for(pIter->start();!pIter->done();pIter->step()) {

//利用迭代器獲取每一個實體

AcDbEntity*pEnt=nullptr; pIter->getEntity(pEnt,AcDb::kForRead); if(pEnt->isKindOf(AcDbLine::desc()))//判斷實體是否是直線

{ pEnt->upgradeOpen();//升級打開權(quán)限

pEnt->setColorIndex(1);//把直線顏色設(shè)成紅色

pEnt->downgradeOpen();//降級權(quán)限

} pEnt->close();//關(guān)閉實體

}deletepIter;//刪除迭代器

pBTR->close(); } }}課后思考:調(diào)用ZRX二次開發(fā)接口對多線段的字體進(jìn)行修改。任務(wù)評價...任務(wù)評價表任務(wù)評價內(nèi)容自評師評得分1創(chuàng)建直線

2創(chuàng)建多段線

3修改屬性

05任務(wù)評價感謝支持THANKYOUFORWATCHING第三章圓弧和文字的繪制01知識講解02任務(wù)一:創(chuàng)建圓03任務(wù)二:創(chuàng)建圓弧目錄CONTENTS04任務(wù)三:創(chuàng)建橢圓05任務(wù)四:創(chuàng)建文字PART01知識講解01知識講解圓、圓弧、橢圓的概念與屬性圓、圓弧和橢圓的構(gòu)造函數(shù)函數(shù)重載文字的基本屬性學(xué)習(xí)模塊圓屬性:半徑和中心點(diǎn)圓、圓弧、橢圓都是CAD實體對象的一種。這些對象具有特定的屬性和方法,利用這些屬性和方法,我們可以便捷的創(chuàng)建、編輯和操縱圖形實體添加標(biāo)題01知識講解圓弧屬性:半徑、中心點(diǎn)、起點(diǎn)和終點(diǎn)橢圓屬性:中心點(diǎn)、長半軸、短半軸和旋轉(zhuǎn)角度圓、圓弧、橢圓的概念與屬性01知識講解構(gòu)造函數(shù)是一種特殊的函數(shù),在對象創(chuàng)建時自動調(diào)用,用于初始化對象的屬性和狀態(tài)。構(gòu)造函數(shù)性質(zhì):1.與類同名2.沒有返回類型3.自動調(diào)用構(gòu)造函數(shù)時的注意點(diǎn):1.參數(shù)的選擇2.參數(shù)的正確性3.初始化對象的屬性4.構(gòu)造函數(shù)的重載(二)圓、圓弧、橢圓的構(gòu)造函數(shù)01知識講解圓的構(gòu)造函數(shù)方式:1.通過半徑和中心點(diǎn)創(chuàng)建圓2.通過直徑和中心點(diǎn)創(chuàng)建圓圓弧的構(gòu)造函數(shù)方式:1.通過半徑、中心點(diǎn)、起點(diǎn)和終點(diǎn)創(chuàng)建圓弧2.通過圓心角、半徑和中心點(diǎn)創(chuàng)建圓弧橢圓的構(gòu)造函數(shù)方式:1.通過中心點(diǎn)、長軸和短軸長度創(chuàng)建橢圓2.通過中心點(diǎn)、長軸長度和長軸與X軸的夾角創(chuàng)建橢圓(二)圓、圓弧、橢圓的構(gòu)造函數(shù)01知識講解函數(shù)重載(FunctionOverloading)是指在同一個作用域內(nèi),可以定義多個同名但參數(shù)列表不同的函數(shù)。函數(shù)重載允許使用相同的函數(shù)名來處理不同類型或不同數(shù)量的參數(shù),從而提供更靈活的函數(shù)調(diào)用方式。函數(shù)重載的特點(diǎn):1.函數(shù)名稱相同2.參數(shù)列表不同3.返回類型不影響函數(shù)重載函數(shù)重載的優(yōu)勢:可以根據(jù)不同的參數(shù)需求提供更多靈活的函數(shù)接口,使函數(shù)調(diào)用更簡潔、方便,并提高代碼的可讀性和可維護(hù)性(三)函數(shù)重載01知識講解1.文字內(nèi)容2.位置3.高度4.字體5.對齊方式6.旋轉(zhuǎn)角度7.對象顏色(四)文字的基本屬性PART02任務(wù)一:創(chuàng)建圓02創(chuàng)建圓圓是CAD繪圖中的基本圖元,學(xué)習(xí)創(chuàng)建圓的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)圓的繪制學(xué)習(xí)和了解創(chuàng)建圓的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成圓的繪制任務(wù)實施步驟一:學(xué)習(xí)創(chuàng)建圓的ZRX二次開發(fā)接口在ZRX中,使用AcDbCircle類來表示圓。該類有兩個構(gòu)造函數(shù),其形式分別為:AcDbCircle();//默認(rèn)構(gòu)造函數(shù)AcDbCircle( constAcGePoint3d&cntr,//cntr代表圓心坐標(biāo)(三維坐標(biāo)點(diǎn)) constAcGeVector3d&nrm,//nrm代表圓的法向量(三維向量) doubleradius//radius代表圓的半徑(雙精度浮點(diǎn)數(shù)));任務(wù)實施步驟二:設(shè)計創(chuàng)建圓的自定義函數(shù)考慮根據(jù)不同的輸入?yún)?shù),以函數(shù)重載的形式實現(xiàn)兩種創(chuàng)建圓的函數(shù)://函數(shù)一:給定圓心和半徑實現(xiàn)圓的創(chuàng)建//cenPt:圓心的三維坐標(biāo)點(diǎn)//radius:圓的半徑AcDbObjectIdCreateCircle(constAcGePoint3d&cenPt,constdoubleradius);//函數(shù)二:給定直徑的兩個點(diǎn)實現(xiàn)圓的創(chuàng)建//pt1:直線的起點(diǎn)二維坐標(biāo)點(diǎn)//pt2:直線的終點(diǎn)二維坐標(biāo)點(diǎn)AcDbObjectIdCreateCircle(constAcGePoint2d&pt1,constAcGePoint2d&pt2);.任務(wù)實施步驟三:函數(shù)一實現(xiàn)AcDbObjectIdCreateCircle(constAcGePoint3d&cenPt,constdoubleradius){

//定義圓的法向量,二維繪圖空間,法向量指向Z方向(0,0,1) AcGeVector3dnormal(0,0,1); //創(chuàng)建圓 AcDbCircle*pCir=newAcDbCircle(cenPt,normal,radius); returnUtilsFunc::PostToModel(pCir);}任務(wù)實施步驟三:函數(shù)二實現(xiàn)AcDbObjectIdCreateCircle(constAcGePoint2d&pt1,constAcGePoint2d&pt2){

//根據(jù)直線的兩個端點(diǎn)計算中點(diǎn),即圓心 doublex=(pt1.x+pt2.x)*0.5; doubley=(pt1.y+pt2.y)*0.5; doublez=0; AcGePoint3dcenPt(x,y,z);

//計算半徑 doubleradius=pt1.distanceTo(pt2)*0.5;

//定義圓的法向量,二維繪圖空間,法向量指向Z方向(0,0,1) AcGeVector3dnormal(0,0,1);

//創(chuàng)建圓 AcDbCircle*pCir=newAcDbCircle(cenPt,normal,radius); returnUtilsFunc::PostToModel(pCir);}成果展示://驗證函數(shù)功能voidZWCreateCircle(){

//調(diào)用函數(shù)一,圓心坐標(biāo)為(0,0,0),半徑為10 CreateCircle(AcGePoint3d(0,0,0),10); //調(diào)用函數(shù)二,直線起點(diǎn)為(20,0),終點(diǎn)為(-20,0) CreateCircle(AcGePoint2d(20,0),AcGePoint2d(-20,0));}課后思考:調(diào)用ZRX二次開發(fā)接口創(chuàng)建一條線段,以這個線段的兩端創(chuàng)建一個圓,以這個線段作為半徑,一端做為圓心創(chuàng)建另一個圓。03創(chuàng)建圓弧圓弧是CAD繪圖中的基本圖元,學(xué)習(xí)創(chuàng)建圓弧的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路掌握使用構(gòu)造函數(shù)初始化圓弧實體的方法學(xué)習(xí)和了解創(chuàng)建圓弧的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成圓弧的繪制任務(wù)實施步驟一:學(xué)習(xí)創(chuàng)建圓弧的ZRX二次開發(fā)接口在ZRX中,使用AcDbArc類來表示圓弧。該類的構(gòu)造函數(shù)如下形式:AcDbArc(

constAcGePoint3d¢er,//center代表圓心坐標(biāo)(三維坐標(biāo)點(diǎn))

constAcGeVector3d&normal,//normal代表圓的法向量(三維向量)

doubleradius,//radius代表半徑

doublestartAngle,//

startAngle代表起始角度

doubleendAngle//

endAngle代表終止角度);對比AcDbCircle(

constAcGePoint3d&cntr,//cntr代表圓心坐標(biāo)(三維坐標(biāo)點(diǎn))

constAcGeVector3d&nrm,//nrm代表圓的法向量(三維向量)

doubleradius//radius代表半徑);我們發(fā)現(xiàn)其構(gòu)造函數(shù)和AcDbCircle的構(gòu)造函數(shù)是類似的,只是AcDbArc多了兩個角度的選項,也可以理解為圓其實是起始角度和終止角度重合的圓弧任務(wù)實施步驟二:設(shè)計創(chuàng)建圓弧的自定義函數(shù)//ptStart:起始點(diǎn)//ptOnArc:圓弧上任意點(diǎn)//ptEnd:終止點(diǎn)AcDbObjectIdCreateArc(constAcGePoint2d&ptStart,constAcGePoint2d&ptOnArc,constAcGePoint2d&ptEnd)任務(wù)實施步驟三:自定義函數(shù)實現(xiàn)AcDbObjectIdCreateArc(constAcGePoint2d&ptStart,constAcGePoint2d&ptOnArc,constAcGePoint2d&ptEnd){//使用幾何類獲得半徑、圓心AcGeCircArc2dgetArc(ptStart,ptOnArc,ptEnd);AcGePoint2dptCenter=getArc.center();doubleradius=getArc.radius();//使用幾何類計算起始角度和終止角度AcGeVector2dvecStart(ptStart.x-ptCenter.x,ptStart.y-ptCenter.y);AcGeVector2dvecEnd(ptEnd.x-ptCenter.x,ptEnd.y-ptCenter.y);doublestartAngle=vecStart.angle();doubleendAngle=vecEnd.angle();AcGePoint3dcen3d(ptCenter.x,ptCenter.y,0);//創(chuàng)建一個3D圓心點(diǎn)cen3d,將2D圓心坐標(biāo)轉(zhuǎn)換為3D,z坐標(biāo)設(shè)為0AcGeVector3dnormal(0,0,1);//創(chuàng)建一個3D法向量normal,表示圓弧在XY平面中AcDbArc*pArc=newAcDbArc(cen3d,normal,radius,startAngle,endAngle)//創(chuàng)建一個ZWCAD圓弧對象pArc,使用圓心、法向量、半徑、起始角度和終止角度}成果展示://驗證函數(shù)功能voidZWCreateArc(){

//調(diào)用自定義函數(shù),起始點(diǎn)坐標(biāo)為(30.0,20.0),弧上點(diǎn)坐標(biāo)為(15.0,36.6),終止點(diǎn)坐標(biāo)為(15.0,3.4) CreateArc(AcGePoint2d(30.0,20.0),AcGePoint2d(15.0,36.6),AcGePoint2d(15.0,3.4));}課后思考:調(diào)用ZRX二次開發(fā)接口創(chuàng)建一個直角三角形,獲取這個直角三角形的三個頂點(diǎn)創(chuàng)建一個圓弧。04創(chuàng)建橢圓橢圓是CAD繪圖中的基本圖元,學(xué)習(xí)創(chuàng)建橢圓的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路掌握使用構(gòu)造函數(shù)初始化橢圓實體的方法學(xué)習(xí)和了解創(chuàng)建橢圓的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成橢圓的繪制任務(wù)實施步驟一:學(xué)習(xí)創(chuàng)建橢圓的ZRX二次開發(fā)接口在ZRX中,使用AcDbEllipse類來表示圓,其形式如下:AcDbEllipse( constAcGePoint3d¢er,//橢圓中心 constAcGeVector3d&unitNormal,//橢圓所在平面法向量 constAcGeVector3d&majorAxis,//長軸矢量 doubleradiusRatio,//長軸和短軸的比例 doublestartAngle=0.0,//橢圓的起始弧度,默認(rèn)為0 doubleendAngle=6.28318530717958647692);//橢圓的終止弧度,默認(rèn)值是2pi任務(wù)實施步驟二:設(shè)計創(chuàng)建橢圓的自定義函數(shù)//cenPt:橢圓的圓心//majorLength:橢圓的長軸矢量//minorLength:橢圓的短軸矢量AcDbObjectIdCreateEllipse(constAcGePoint2d&cenPt,constdoublemajorLength,constdoubleminorLength)任務(wù)實施步驟三:橢圓函數(shù)實現(xiàn)AcDbObjectIdCreateEllipse(constAcGePoint2d&cenPt,constdoublemajorLength,constdoubleminorLength){AcGePoint3dcen(cenPt.x,cenPt.y,0);//定義橢圓中心點(diǎn)AcGeVector3dunitNormal(0,0,1);//定義橢圓法向量AcGeVector3dmajorAxis(majorLength/2,0,0);//定義橢圓長軸矢量,起點(diǎn)默認(rèn)是0,0,0doubleradius=minorLength/majorLength;//定義長短軸比例AcDbEllipse*pEllipse=newAcDbEllipse(cen,unitNormal,majorAxis,radius);//創(chuàng)建一個AutoCAD橢圓對象pEllipse,使用定義的參數(shù)returnUtilsFunc::PostToModel(pEllipse);//將創(chuàng)建的橢圓對象添加到AutoCAD模型空間中,并返回其唯一標(biāo)識符}成果展示://驗證函數(shù)功能voidZWCreateEllipse(){AcGePoint2dpt(10,10);//定義橢圓的中心點(diǎn)坐標(biāo)(10,10)doublemajor=20;//定義橢圓的長軸長度為20doubleminor=10;//定義橢圓的短軸長度為10CreateEllipse(pt,major,minor);//調(diào)用CreateEllipse函數(shù)以創(chuàng)建橢圓,使用上述參數(shù)}課后思考:調(diào)用ZRX二次開發(fā)接口創(chuàng)建一個矩形,以這個矩形的中心點(diǎn)為橢圓圓心,創(chuàng)建一個橢圓使該矩形的四個頂點(diǎn)都落在橢圓上。05創(chuàng)建文字在CAD二次開發(fā)中,文字是繪圖中常用的元素之一。學(xué)習(xí)創(chuàng)建文字的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路能夠使用CAD二次開發(fā)工具創(chuàng)建文字實體,并設(shè)置其屬性。學(xué)習(xí)和了解創(chuàng)建文字的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成文字創(chuàng)建的方法任務(wù)實施步驟一:學(xué)習(xí)文字的ZRX二次開發(fā)接口在ZRX中,使用AcDbText類來表示文字,其構(gòu)造函數(shù)形式如下://單行文字的構(gòu)造函數(shù)AcDbText(

constAcGePoint3d&position,//位置

constACHAR*text,//文本內(nèi)容

AcDbObjectIdstyle=AcDbObjectId::kNull,//在不輸入樣式ID的情況下,CAD會自動讀取應(yīng)用中當(dāng)前的文字樣式和對應(yīng)的字高

doubleheight=0,//高度

doublerotation=0//旋轉(zhuǎn)角度);//多行文字只有一個空的構(gòu)造函數(shù)AcDbMText()任務(wù)實施步驟二:設(shè)計創(chuàng)建單行文字的自定義函數(shù)voidZWCreateText(){AcDbText*pText=newAcDbText(AcGePoint3d(0,0,0),TEXT("單行文字\n單行文字第二行\(zhòng)n"));//創(chuàng)建一個單行文本對象,位置為(0,0,0),文本內(nèi)容為"單行文字\n單行文字第二行\(zhòng)n"UtilsFunc::PostToModel(pText);//將創(chuàng)建的單行文本對象添加到AutoCAD模型空間中}任務(wù)實施步驟三:設(shè)計創(chuàng)建多行文字的自定義函數(shù)//由于多行文字只有空的構(gòu)造函數(shù),所以只能通過先創(chuàng)建一個初始對象,然后通過方法來添加屬性voidZWCreateMText(){AcDbMText*pMText=newAcDbMText();//創(chuàng)建一個多行文本對象pMText->setLocation(AcGePoint3d(10,10,0));//設(shè)置多行文本對象的位置為(10,10,0)pMText->setContents(TEXT("多行文字\n多行文字第二行"));//設(shè)置多行文本對象的內(nèi)容,文本內(nèi)容為"多行文字\n多行文字第二行"pMText->setTextHeight(2.5);//設(shè)置多行文本對象的文本高度為2.5pMText->setWidth(10);//設(shè)置多行文本對象的寬度為10UtilsFunc::PostToModel(pMText);//將創(chuàng)建的多行文本對象添加到AutoCAD模型空間中}成果展示:課后思考:結(jié)合本章和上一章的內(nèi)容,調(diào)用ZRX接口,創(chuàng)建一個簡單的螺母的平面截圖,并在該螺母中心點(diǎn)的位置標(biāo)明“螺母”,在螺母一段多行文字介紹螺母。任務(wù)評價...任務(wù)評價表任務(wù)評價內(nèi)容自評師評得分1創(chuàng)建圓

2創(chuàng)建圓弧

3創(chuàng)建橢圓

4創(chuàng)建文字

06任務(wù)評價謝謝!THANKYOU!第四章幾何變換01知識講解02任務(wù)一:幾何變換03任務(wù)二:復(fù)制目錄CONTENTS04任務(wù)三:陣列05任務(wù)四:偏移PART01知識講解01知識講解幾何變換復(fù)制陣列偏移學(xué)習(xí)模塊01知識講解矩陣的直接引用是對實體或者選擇集進(jìn)行幾何變換,但是它實際上是一個功能非常完善的類。一般我們在對實體進(jìn)行變換時會用到AcGeMatrix3d,內(nèi)部包含了平移、縮放和旋轉(zhuǎn)的數(shù)據(jù):setToMirroring:設(shè)置以某一點(diǎn)為對稱的鏡像變換。setToRotation:設(shè)置繞某一點(diǎn)旋轉(zhuǎn)一定角度的旋轉(zhuǎn)變換。setToScaling:設(shè)置以某一個基點(diǎn)縮放一定比例的縮放變換。setToTranslation:設(shè)置以某個矢量為移動基準(zhǔn)的移動變換。det:計算矩陣對應(yīng)的行列式的值。inverse:計算矩陣的逆矩陣,原矩陣不受影響。invert:對矩陣進(jìn)行逆矩陣操作,返回該矩陣的引用。transpose:計算矩陣的轉(zhuǎn)置矩陣,原矩陣不受影響。transposelt:對矩陣進(jìn)行轉(zhuǎn)置操作,返回該矩陣的引用。幾何變換的概念01知識講解進(jìn)行平移、縮放、旋轉(zhuǎn)、鏡像變換,首先要選中一個要進(jìn)行變換的實體,然后再創(chuàng)建一個變換矩陣,設(shè)置變換類型和相應(yīng)參數(shù),變換完成后關(guān)閉實體,這樣我們就完成了實體的變換。幾何變換的流程01知識講解復(fù)制流程復(fù)制實體需要調(diào)用CAD對象的Clone接口,它可以返回任意一個clone的對象。對于實體對象,我們可以直接使用(AcDbEntity*)(pEnt->clone())的方式獲取新克隆出來的實體。最后把實體添加到數(shù)據(jù)庫中。01知識講解陣列陣列也是對已有的實體進(jìn)行的變換,在CAD中有以下三種陣列方式,分別是矩形陣列、路徑陣列和環(huán)形陣列。01知識講解偏移實體面是指一個實體表面按照指定的距離進(jìn)行偏移,偏移實體面常用來改變孔的大小,可以選擇將面從原始位置向內(nèi)或向外偏移指定的距離,從而擴(kuò)大或者縮小孔徑。例如下圖,該圖為一矩形經(jīng)過向外偏移,得到了一個外邊框。偏移的概念PART02幾何變換02幾何變換幾何變換可以應(yīng)用于各種領(lǐng)域的CAD二次開發(fā),學(xué)習(xí)幾何變換的二次開發(fā)方式,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)平移變換、圖形縮放、旋轉(zhuǎn)、鏡像變換四種幾何變換學(xué)習(xí)和了解幾何變換的ZRX二次開發(fā)變換矩陣設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)變換矩陣完成圖形的幾何變換任務(wù)實施步驟一:學(xué)習(xí)和了解幾何變換的ZRX二次變換矩陣在ZRX中,使用transformMatrix類來表示幾何變換的變換矩陣。//創(chuàng)建一個幾何變換矩陣AcGeMatrix3dtransformMatrix;//按照變換矩陣方式進(jìn)行變換transformBy(transformMatrix);任務(wù)實施步驟二:給變換矩陣設(shè)置不同的變換方式//通過setToTranslation函數(shù),給變換矩陣設(shè)置平移變換方式x+100,y+100transformMatrix.setToTranslation(AcGeVector3d(100,100,0));//通過setToRotation函數(shù),給變換矩陣設(shè)置旋轉(zhuǎn)方式,該方法的參數(shù)分別是旋轉(zhuǎn)弧度-0.5PI、主軸向量(0,0,1),旋轉(zhuǎn)中心點(diǎn)默認(rèn)為原點(diǎn)。transformMatrix.setToRotation(-PI*0.5,AcGeVector3d(0,0,1));//通過setToMirroring函數(shù),給變換矩陣設(shè)置鏡像變換方式,該函數(shù)的參數(shù)做鏡像變換需要的鏡像線,由mirrorLine方法通過兩點(diǎn)(10,10,0),(10,-10,0)生成。AcGeLine3dmirrorLine(AcGePoint3d(10,10,0),AcGePoint3d(10,-10,0));transformMatrix.setToMirroring(mirrorLine);//通過setToScaling函數(shù),給變換矩陣設(shè)置縮放變換方式,參數(shù)為縮放倍數(shù)2,中心點(diǎn)默認(rèn)為原點(diǎn)。transformMatrix.setToScaling(2);任務(wù)實施步驟三:平移函數(shù)實現(xiàn)voidEntTranslate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置平移矩陣

AcGeMatrix3dtransformMatrix; transformMatrix.setToTranslation(AcGeVector3d(100,100,0)); pEnt->transformBy(transformMatrix); pEnt->close();}任務(wù)實施步驟三:旋轉(zhuǎn)函數(shù)實現(xiàn)voidEntRotate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置旋轉(zhuǎn)矩陣

AcGeMatrix3dtransformMatrix; transformMatrix.setToRotation(-PI*0.5,AcGeVector3d(0,0,1)); pEnt->transformBy(transformMatrix); pEnt->close();}任務(wù)實施步驟三:鏡像函數(shù)實現(xiàn)voidEntMirror(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置鏡像矩陣

AcGeMatrix3dtransformMatrix; AcGeLine3dmirrorLine(AcGePoint3d(10,10,0),AcGePoint3d(10,-10,0)); transformMatrix.setToMirroring(mirrorLine); pEnt->transformBy(transformMatrix); pEnt->close();}任務(wù)實施步驟三:縮放函數(shù)實現(xiàn)voidEntScale(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置縮放矩陣

AcGeMatrix3dtransformMatrix; transformMatrix.setToScaling(2); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://驗證平移函數(shù)功能voidEntTranslate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置平移矩陣

AcGeMatrix3dtransformMatrix; transformMatrix.setToTranslation(AcGeVector3d(100,100,0)); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://驗證旋轉(zhuǎn)函數(shù)功能voidEntRotate(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置旋轉(zhuǎn)矩陣

AcGeMatrix3dtransformMatrix; transformMatrix.setToRotation(-PI*0.5,AcGeVector3d(0,0,1)); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://驗證鏡像函數(shù)功能voidEntMirror(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置鏡像矩陣

AcGeMatrix3dtransformMatrix; AcGeLine3dmirrorLine(AcGePoint3d(10,10,0),AcGePoint3d(10,-10,0)); transformMatrix.setToMirroring(mirrorLine); pEnt->transformBy(transformMatrix); pEnt->close();}成果展示://驗證縮放函數(shù)功能voidEntScale(){ AcDbObjectIdentId=UtilsFunc::SelectEnt(); AcDbEntity*pEnt=nullptr; acdbOpenObject(pEnt,entId,AcDb::kForWrite); //設(shè)置縮放矩陣

AcGeMatrix3dtransformMatrix; transformMatrix.setToScaling(2); pEnt->transformBy(transformMatrix); pEnt->close();}課后思考:在zwcad中創(chuàng)建一個復(fù)雜圖形,調(diào)用ZRX二次開發(fā)接口,對這個圖形以不同順序進(jìn)行四種幾何變換,看看得到的結(jié)果是否一樣。PART03復(fù)制03復(fù)制復(fù)制可以應(yīng)用于各種領(lǐng)域的CAD二次開發(fā),學(xué)習(xí)復(fù)制的二次開發(fā)方式,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)實體的復(fù)制學(xué)習(xí)和了解復(fù)制變換的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)變換矩陣完成實體的復(fù)制任務(wù)實施步驟一:學(xué)習(xí)和了解復(fù)制的ZRX二次開發(fā)接口在ZRX中,使用clone()方法來表示實現(xiàn)實體的復(fù)制。//使用AcDbEntity的clone()方法對實體進(jìn)行克隆//因為這個方法是寫在基類AcDbObject里的,所以要將其轉(zhuǎn)換成AcDbEntity類型使用。AcDbEntity*newEnt=(AcDbEntity*)(pEnt->clone());任務(wù)實施步驟二:設(shè)計并實現(xiàn)克隆的自定義函數(shù)voidEntClone(){

//首先要選中實體 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//選中實體后,使用clone方法進(jìn)行實體復(fù)制 AcDbEntity*newEnt=(AcDbEntity*)(pEnt->clone());

//關(guān)閉實體 pEnt->close();}成果展示://驗證復(fù)制函數(shù)功能voidEntClone(){

//首先要選中實體 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//選中實體后,使用clone方法進(jìn)行實體復(fù)制 AcDbEntity*newEnt=(AcDbEntity*)(pEnt->clone()); pEnt->close();

//復(fù)制后的實體坐標(biāo)與原實體一樣,這里平移操作便于驗證 AcGeMatrix3dtransformMatrix; transformMatrix.setToTranslation(AcGeVector3d(100,100,0)); newEnt->transformBy(transformMatrix); UtilsFunc::PostToModel(newEnt);}課后思考:在zwcad中創(chuàng)建一個圓,調(diào)用ZRX二次開發(fā)接口,結(jié)合上一節(jié)內(nèi)容,綜合運(yùn)用幾何變換和復(fù)制,利用這個圓,畫出一個基本的軸承圖形。PART04陣列04陣列陣列變換可以應(yīng)用于各種領(lǐng)域的CAD二次開發(fā),學(xué)習(xí)陣列變換的二次開發(fā)方式,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)實體的陣列變換學(xué)習(xí)和了解復(fù)制變換的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)變換矩陣完成實體的復(fù)制任務(wù)實施步驟一:學(xué)習(xí)和了解陣列變換的ZRX二次開發(fā)接口在ZRX中,使用AcAxArrayRectangular方法來表示實體的陣列變換。AcAxArrayRectangular(){AcDbObjectId&objId,//代表要陣列的實體的IDLPDISPATCHpAppDisp, //代表當(dāng)前文檔的IDispatchintnumRows, //代表陣列的行數(shù)intnumCols, //代表陣列的列數(shù) intnumLvls, //代表陣列的層數(shù)doubledisRows, //代表行間的距離doubledisCols, //代表列間的距離doubledisLvls, //代表層間的距離VARIANT*pArrayObjs //代表陣列后的物體}任務(wù)實施步驟二:設(shè)計并實現(xiàn)克隆的自定義函數(shù)voidEntRectArray(){ //選中實體 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//獲取實體ID AcDbObjectIdid=pEnt->objectId(); pEnt->close();

//構(gòu)造好pDisp參數(shù)和pArrayObjs參數(shù)

LPDISPATCHpDisp; VARIANTpArrayObjs; VariantInit(&pArrayObjs); V_VT(&pArrayObjs)=VT_ARRAY|VT_DISPATCH; HRESULThr; pDisp=acedGetAcadWinApp()->GetIDispatch(true); hr=AcAxArrayRectangular(id,pDisp,1,3,1,1,200,1,&pArrayObjs);}成果展示://驗證陣列函數(shù)功能voidEntRectArray(){ //選中實體 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//獲取實體ID AcDbObjectIdid=pEnt->objectId(); pEnt->close();

//構(gòu)造好pDisp參數(shù)和pArrayObjs參數(shù)

LPDISPATCHpDisp; VARIANTpArrayObjs; VariantInit(&pArrayObjs); V_VT(&pArrayObjs)=VT_ARRAY|VT_DISPATCH; HRESULThr; pDisp=acedGetAcadWinApp()->GetIDispatch(true); hr=AcAxArrayRectangular(id,pDisp,1,3,1,1,200,1,&pArrayObjs);}課后思考:在zwcad中創(chuàng)建一個圓,調(diào)用ZRX二次開發(fā)接口,利用環(huán)形陣列的方式,畫出一個基本的軸承圖形。PART05偏移05偏移實體偏移可以應(yīng)用于各種領(lǐng)域的CAD二次開發(fā),學(xué)習(xí)偏移變換的二次開發(fā)方式,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)實體的偏移學(xué)習(xí)和了解實體偏移的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)變換矩陣完成實體的偏移任務(wù)實施步驟一:學(xué)習(xí)和了解陣列變換的ZRX二次開發(fā)接口在ZRX中,實體的偏移是通過getOffsetCurves函數(shù)實現(xiàn)的。virtualAcad::ErrorStatusgetOffsetCurves(

//offsetDist代表偏移的距離 doubleoffsetDist,

//AcDbVoidPtrArray實體指針的集合 AcDbVoidPtrArray&offsetCurves)const;任務(wù)實施步驟二:設(shè)計并實現(xiàn)克隆的自定義函數(shù)voidCurveOffset(){

//選中實體 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//將實體類型轉(zhuǎn)換為曲線類型 AcDbCurve*pCurve{nullptr}; pCurve=dynamic_cast<AcDbCurve*>(pEnt); AcDbVoidPtrArrayentPtrArray; if(pCurve!=nullptr) {

//生成偏移曲線 pCurve->getOffsetCurves(10,entPtrArray); for(autoit:entPtrArray) { autoid=UtilsFunc::PostToModel((AcDbEntity*)it); } } pEnt->close();}成果展示://驗證偏移函數(shù)功能voidCurveOffset(){

//選中實體 AcDbEntity*pEnt{nullptr}; SelectEnt(pEnt);

//將實體類型轉(zhuǎn)換為曲線類型 AcDbCurve*pCurve{nullptr}; pCurve=dynamic_cast<AcDbCurve*>(pEnt); AcDbVoidPtrArrayentPtrArray; if(pCurve!=nullptr) {

//生成偏移曲線,偏移距離為10 pCurve->getOffsetCurves(10,entPtrArray); for(autoit:entPtrArray) { autoid=UtilsFunc::PostToModel((AcDbEntity*)it); } } pEnt->close();}課后思考:在zwcad中創(chuàng)建一個圓,調(diào)用ZRX二次開發(fā)接口,利用曲線偏移的方式,畫出兩個同心圓,半徑分別為100和200。任務(wù)評價...任務(wù)評價表任務(wù)評價內(nèi)容自評師評得分1幾何變換

2復(fù)制

3陣列

4偏移

06任務(wù)評價感謝支持THANKYOUFORWATCHING第五章尺寸標(biāo)注和引線繪制01知識講解02任務(wù)一:長度尺寸標(biāo)注03任務(wù)二:半徑與直徑標(biāo)注目錄CONTENTS04任務(wù)三:角度標(biāo)注05任務(wù)四:引線繪制PART01知識講解01知識講解標(biāo)注的作用和類型標(biāo)注的基本原理標(biāo)注的屬性和參數(shù)標(biāo)注的樣式半徑與直徑標(biāo)注角度標(biāo)注引線學(xué)習(xí)模塊標(biāo)注是CAD圖形中用于表達(dá)尺寸、位置、注釋等信息的重要元素。標(biāo)注可以分為尺寸標(biāo)注、注釋標(biāo)注、表格標(biāo)注等類型。尺寸標(biāo)注用于表示實體的尺寸信息,注釋標(biāo)注用于表示實體的注釋信息,表格標(biāo)注用于表示實體的屬性信息等。標(biāo)注的作用和類型01知識講解標(biāo)注的基本原理是在CAD圖形中添加標(biāo)注對象,該對象包括標(biāo)注線、標(biāo)注文字、標(biāo)注樣式等元素。標(biāo)注的位置和方向通?;诨鶞?zhǔn)對象進(jìn)行計算,例如尺寸標(biāo)注的起點(diǎn)和終點(diǎn)基于實體的端點(diǎn)計算,標(biāo)注文字的位置和方向根據(jù)標(biāo)注線的位置和方向進(jìn)行計算。標(biāo)注的基本原理01知識講解標(biāo)注的屬性和參數(shù)包括標(biāo)注樣式、標(biāo)注文字、標(biāo)注線、標(biāo)注方向等元素。在CAD軟件中,可以通過修改這些屬性和參數(shù)來實現(xiàn)標(biāo)注的定制化。例如,可以改變標(biāo)注文字的內(nèi)容、樣式和位置,或者修改標(biāo)注的屬性和參數(shù)等。標(biāo)注的屬性和參數(shù)01知識講解標(biāo)注的樣式01知識講解半徑標(biāo)注是用于標(biāo)記圓形或弧形對象半徑的尺寸標(biāo)注。它以圓心為中心,在圓形或弧形上繪制一條線段,并在標(biāo)注線的一側(cè)顯示半徑值。半徑標(biāo)注01知識講解直徑標(biāo)注是用于標(biāo)記圓形或弧形對象直徑的尺寸標(biāo)注。它以圓心為中心,在圓形或弧形上繪制一條水平線,并在標(biāo)注線的上方或下方顯示直徑值。直徑標(biāo)注01知識講解角度標(biāo)注是CAD繪圖中用于測量和標(biāo)記角度的尺寸標(biāo)注。它用于表示兩條線、邊界或弧之間的角度,并提供了角度的數(shù)值表示,幫助工程師和設(shè)計師準(zhǔn)確測量和布局角度。角度標(biāo)注01知識講解如果我們想讓標(biāo)注文字的位置距離要標(biāo)注的實體遠(yuǎn)一點(diǎn),可以通過引線引出來在遠(yuǎn)處標(biāo)注。引線通常用于在繪圖中添加標(biāo)簽或注釋,以說明與遠(yuǎn)處對象相關(guān)的信息。引線可以用于指示距離較遠(yuǎn)的對象、圖形或特定區(qū)域,并與它們之間建立關(guān)聯(lián)。引線標(biāo)注01知識講解PART02長度尺寸標(biāo)注02長度尺寸標(biāo)注長度尺寸標(biāo)注是CAD繪圖中的基本標(biāo)注,學(xué)習(xí)創(chuàng)建長度尺寸標(biāo)注的二次開發(fā)接口,培養(yǎng)ZRX二次開發(fā)的基礎(chǔ)能力任務(wù)背景任務(wù)目標(biāo)實施思路調(diào)用ZRX二次開發(fā)接口,自定義函數(shù)實現(xiàn)長度尺寸標(biāo)注的繪制學(xué)習(xí)和了解創(chuàng)建長度尺寸標(biāo)注的ZRX二次開發(fā)接口設(shè)計自定義函數(shù)的功能,調(diào)用二次開發(fā)接口完成長度尺寸標(biāo)注的創(chuàng)建任務(wù)實施步驟一:學(xué)習(xí)創(chuàng)建長度尺寸標(biāo)注的ZRX二次開發(fā)接口在ZRX中,長度尺寸標(biāo)注可以標(biāo)注空間內(nèi)任意兩點(diǎn)的距離,需要用到AcDbAlignedDimension函數(shù):AcDbAlignedDimension(

//xLine1Point和xLine2Point是長度尺寸標(biāo)注的兩個端點(diǎn) constAcGePoint3d&xLine1Point, constAcGePoint3d&xLine2Point,

//dimlinePoint標(biāo)識了標(biāo)注的位置 constAcGePoint3d&dimLinePoint,

//dimText是標(biāo)注的內(nèi)容,若值為空,默認(rèn)為兩端點(diǎn)間的距離 constTCHAR*dimText=NULL,

//dimStyle是標(biāo)注樣式 AcDbObjectIddimStyle=AcDbObjectId::kNull);任務(wù)實施步驟二:設(shè)計并實現(xiàn)創(chuàng)建長度尺寸標(biāo)注的自定義函數(shù)創(chuàng)建自定義函數(shù),通過調(diào)用AcDbAlignedDimension實現(xiàn)長度尺寸標(biāo)注的創(chuàng)建voidZWDimAligned(){

//訪問(創(chuàng)建)名為“樣式1”的標(biāo)注樣式 autoDimStyleId=CreateDimStyleId(TEXT("樣式1"));

//訪問(創(chuàng)建)名為“標(biāo)注”的層 autoLayerId=CreateLayerId(TEXT("標(biāo)注"));

//通過AcDbAlignedDimension函數(shù)創(chuàng)建長度尺寸標(biāo)注 AcDbAlignedDimension*pADimension=newAcDbAlignedDimension(AcGePoint3d(0,0,0),AcGePoint3d(10,0,0),AcGePoint3d(5,5,0),NULL,DimStyleId); pADimension->setLayer(LayerId); PostToModel(pADimension);}任務(wù)實施步驟三:設(shè)計并實現(xiàn)創(chuàng)建標(biāo)注樣式的自定義函數(shù)創(chuàng)建長度尺寸標(biāo)注的自定義函數(shù)中,需要調(diào)用創(chuàng)建標(biāo)注樣式的自定義函數(shù)AcDbObjectIdUtilsFunc::CreateDimStyleId(constTCHAR*DimName){ Acad::ErrorStatuses;

//獲取數(shù)據(jù)庫的標(biāo)注樣式表

AcDbDimStyleTable*pDimStyleTbl=nullptr; AcDbObjectIdDimStyleId=AcDbObjectId::kNull; es=acdbHostApplicationServices()->workingDatabase()->getDimStyleTable(pDimStyleTbl,AcDb::kForRead); //如果沒有對應(yīng)的標(biāo)注樣式則需要創(chuàng)建 if(!pDimStyleTbl->has(DimName))

{

//創(chuàng)建標(biāo)注樣式記錄

AcDbDimStyleTableRecord*pDSRecord=newAcDbDimStyleTableRecord(); es=pDSRecord->setName(DimName);

//把標(biāo)識樣式記錄添加進(jìn)標(biāo)注樣式表

es=pDimStyleTbl->upgradeOpen(); es=pDimStyleTbl->add(DimStyleId,pDSRecord); es=pDimStyleTbl->close(); es=pDSRecord->close();

}else { es=pDimStyleTbl->getAt(DimName,DimStyleId,false); } returnDimStyleId;}任務(wù)實施步驟四:設(shè)計并實現(xiàn)創(chuàng)建層表記錄的自定義函數(shù)創(chuàng)建長度尺寸標(biāo)注的自定義函數(shù)中,需要調(diào)用創(chuàng)建層表記錄的自定義函數(shù)AcDbObjectIdUtilsFunc::CreateLayerId(const

溫馨提示

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

評論

0/150

提交評論