中望CAD二次開發(fā)課件 -第二章 直線段繪制與屬性修改_第1頁
中望CAD二次開發(fā)課件 -第二章 直線段繪制與屬性修改_第2頁
中望CAD二次開發(fā)課件 -第二章 直線段繪制與屬性修改_第3頁
中望CAD二次開發(fā)課件 -第二章 直線段繪制與屬性修改_第4頁
中望CAD二次開發(fā)課件 -第二章 直線段繪制與屬性修改_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第二章直線段繪制與屬性修改目錄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實體對象的一種,用于表示直線圖形。它包含了起點和終點兩個點的坐標(biāo)屬性,可以通過這些屬性來確定直線的位置、長度和方向等信息。多段線由多個線段或曲線段組成,并可以被視為一個整體,它具有一些特殊的屬性和方法,例如閉合、平滑擬合、插入頂點等等。多段線對象可以用于表示各種復(fù)雜的二維圖形,例如多邊形、輪廓線、路徑等等,還可以用于描述道路、管道、電纜等物理系統(tǒng)的布局和設(shè)計。2、直線、多段線的概念01知識講解3、直線、多段線屬性直線屬性:起始端點、終止端點添加標(biāo)題多段線屬性:頂點序號、頂點位置、頂點處凸度、線寬、頂點標(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代表直線的起點(三維坐標(biāo)點) constAcGePoint3d&ptEnd,//ptEnd代表直線的終點(三維坐標(biāo)點));任務(wù)實施步驟二:設(shè)計并實現(xiàn)創(chuàng)建直線的自定義函數(shù)根據(jù)輸入直線的兩個端點坐標(biāo)參數(shù),實現(xiàn)創(chuàng)建直線的函數(shù)://函數(shù):給定直線的兩個端的實現(xiàn)直線的創(chuàng)建//ptStart:直線起始端點的三維坐標(biāo)點//ptEnd:直線的終止端點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(){

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

//直線的終止端點三維坐標(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í)向多段線對象添加頂點的ZRX二次開發(fā)接口創(chuàng)建完多段線對象后,通過addvertexAt函數(shù),將每一個頂點添加到多段線中。virtualAcad::ErrorStatusaddVertexAt( //頂點的序號 unsignedintindex,

//頂點的位置 constAcGePoint2d&pt,

//頂點處的凸度 doublebulge=0,

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

doubleendWidth=-1,

//輸入頂點標(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);

//把頂點添加到多段線中

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); //把頂點添加到多段線中

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) {

//遍歷模型空間里

溫馨提示

  • 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

提交評論