ObjectArx填充邊界的獲取_第1頁
ObjectArx填充邊界的獲取_第2頁
ObjectArx填充邊界的獲取_第3頁
ObjectArx填充邊界的獲取_第4頁
ObjectArx填充邊界的獲取_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、/ 遍歷填充對象的邊界信息。boolCAcUiSelDialog:OpenDwgFile(constACHAR*fileName)Acad:ErrorStatuses;/AcDbObjectIdArray objectIds ;/ 邊界 id 數(shù)組AcGeVector3d normal;/ 填充平面boolbAssociative;/ 關(guān)聯(lián)型AcDbHatch:Hatch PatternTy pep atternT yp e;/ 填充圖案類型con stACHAR* patternName;/ 填充圖案名AcDbHatch:HatchStylehatchStyle;/2.讀取.dwg文件AcD

2、bDatabase*pDb=newAcDbDatabase(Adesk:kFalse);es=pDb->readDwgFile(_T("D:*.dwg"); /.dwg 文件路徑if(Acad:eOk!=es) acedAlert(_T("臨時(shí)數(shù)據(jù)庫打開失敗");deletepDb;returnfalse;/3. 獲取塊表AcDbBlockTable*pBlkTbl;es=pDb->getSymbolTable(pBlkTbl,AcDb:kForRead);if(Acad:eOk!=es) acedAlert(_TC獲取塊表錯(cuò)誤!"

3、);deletepDb;pBlkTbl->close();returnfalse;/4. 獲取塊表記錄AcDbBlockTableRecord*pBlkTblRcd;es=pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb:kForRead);if(Acad:eOk!=es) deletepDb;pBlkTbl->close();pBlkTblRcd->close();acedAlert(_T("獲取塊表記錄錯(cuò)誤!");returnfalse;pBlkTbl->close();/5. 創(chuàng)建塊表記錄迭代

4、器 ,遍歷模型空間塊表記錄11 / 11CStringhClass;AcDbBlockTableRecordIterator*pBlkTblRcdItr;pBlkTblRcd->newIterator(pBlkTblRcdItr);AcGePoint3d*pPt3D=newAcGePoint3d();if(NULL=pPt3D)pBlkTblRcd->close();deletepDb;/delete pHatch;deletepBlkTblRcdItr;returnfalse;/ 遍歷塊表記錄中的實(shí)體for(pBlkTblRcdItr->start();!pBlkTblRc

5、dItr->done();pBlkTblRcdItr->step()/6. 得到實(shí)體對象AcDbHatch*pHatch=newAcDbHatch();AcDbEntity*pEnt;Adesk:Int32loopType;Adesk:UInt16color=0;AcGePoint2dArrayvertices;AcGeDoubleArraybulges;pBlkTblRcdItr->getEntity(pEnt,AcDb:kForRead);if(!pEnt->isKindOf(AcDbHatch:desc()pEnt->close();pHatch->c

6、lose();/delete patternName;deletepBlkTblRcdItr;returnfalse;pHatch=AcDbHatch:cast(pEnt);if(pHatch!=NULL)intloopNums=pHatch->numLoops();/acutPrintf(_T("%d"),loopNums);/ 此處可用normal=pHatch->normal();/ 平面向量bAssociative=p Hatch->associative();/關(guān) 聯(lián)性patternName二pHatch->patternName();/

7、填充圖案名p atter nType=p Hatch->p atter nTyp e();/ 填充類型hatchStyle 二p Hatch->hatchStyle();/hatch style of the hatch en tity,填充風(fēng)格 color二pHatch->colorlndex();/得至U為 indicates the entity uses the colorspecified in the LayerTableRecord it references./acutPrintf(_T(" 填充對象的顏色: %d"),color);/Ac

8、DbHatch* pHatch2二 newAcDbHatch();/新建填充對象es=pHatch2->setNormal( no rmal);/ 設(shè)置填充平面if(Acad:eOk!=es)acedAlert(_T("構(gòu)造向量失敗");returnfalse;es=pHatch2->setElevation(0);es=pHatch2->setAssociative(bAssociative);/設(shè)置關(guān)聯(lián)性if(Acad:eOk!=es)acedAlert(_T("構(gòu)造關(guān)聯(lián)性失敗");returnfalse;es=p Hatch2-&

9、gt;set Patter n(p atter nType,p atter nN ame);/ 設(shè)置填充圖案if(Acad:eOk!=es)acedAlert(_T("構(gòu)造圖案失敗");returnfalse;es=pHatch2->setHatchStyle(hatchStyle);/設(shè) 置填充類型es=pHatch2->setColorl ndex(color);/設(shè)置顏色for(intloopindex=0;loopindex<loopNums;loopindex+)/ 遍歷第-61 條邊界/ 為每一條邊界長久存放數(shù)組AcGeVoidPointerA

10、rrayedgePtrs;AcGeintArrayedgeTypes;AcGeVoidPointerArrayVoidPtrAry;AcGeintArrayintAry;if(Acad:eNotApplicable!=pHatch->getLoopAt(loopindex,loopType,vertices,bulges)/獲取kPolyLine的邊界/ 多義線 kPolyLine獲取其頂點(diǎn) ;intiindex= 0;for(iindex=0;iindex<vertices.length();iindex+)pPt3D->x=vertices.at(iindex).x;/T

11、hisfunctionreturnstheelementofthe array at position ipPt3D->y=vertices.at(iindex).y;acut Prin tf(_T("多義線的坐標(biāo)是:d,%d"),pPt3D->x,pPt3D->y);/pPenStroke->m_Stroke.push_back(pPt3D)保 存多義線頂點(diǎn) / 非多義線else/分別獲取第-61條邊界,每一條邊界都是 AcGe對像數(shù)組es=pHatch->getLoopAt(loopIndex,/Input index of selecte

12、d looploopType,/Output loop typeedgePtrs,/Output a set of AcGeCurve pointersedgeTypes);/Output a set of enumerated edge typesfor(intj=O;j<edgePtrs.length();j+)/遍歷 AcGe對象數(shù)組中的 點(diǎn)/*else if(edgeTy pesj=AcDbHatch:kCirArc)/圓弧/AcGeCircArc2d *CirArc=(AcGeCircArc2d *)edgePtrs;acutPrintf(_T("n 圓弧"

13、);/可以根據(jù)數(shù)學(xué)圓弧構(gòu)造相應(yīng)的 AcDb圓弧,取決于你(以下同)else if(edgeTy pesj=AcDbHatch:kEIIArc)/橢圓弧/AcGeElli pArc2d *EllArc=(AcGeElli pArc2d *)edge Ptrs;acut Prin tf(_T("n 橢圓弧");else if(edgeT yp esj=AcDbHatch:kS pli ne)/NURB曲線/AcGeNurbCurve2d *S pli ne=(AcGeNurbCurve2d *)edge Ptrs對象 acut Prin tf(_T("nNURBS 曲

14、線");/ 獲取直線的起點(diǎn)和終點(diǎn),只考慮直線,章中只有直線if(edgeT yp esU=AcDbHatch:kLi ne)/線 型AcGeLineSeg2d*pLnSeg=(AcGeLineSeg2d*)edgePtrs.atQ遍/歷第 j 個(gè) AcGe*/AcGeLineSeg2d*pLineSeg=NULL;/ 邊類型(僅當(dāng)邊界不是多段線時(shí)):/1 =直線; =圓?。?=橢圓??; =樣條曲線switch(edgeTy pes.at(j)/ 判斷邊類型case1:/直線pLineSeg= (AcGeLineSeg2d*)edgePtrs.at(j);if(NULL!=pLineS

15、eg)AcGePoint3d*pPt3D1=newAcGePoint3d() ;/起點(diǎn),并轉(zhuǎn)換為DpPt3D1->x=pLineSeg->startPoint().x;pPt3D1->y=pLineSeg->startPoint().y;AcGePoint2dBeginPt(pPt3D1->x,pPt3D1->y);deletepPt3D1;AcGePoint3d*pPt3D2=newAcGePoint3d() ;/尾點(diǎn),并轉(zhuǎn)為DpPt3D2->x=pLineSeg->endPoint().x;pPt3D2->y=pLineSeg->

16、endPoint().y;AcGePoint2dEndPt(pPt3D2->x,pPt3D2->y);deletepPt3D2;AcGeL in eSeg2d* pObj二 newAcGeLi neSeg2d(Begi nP t,E ndP t);/acut Prin tf(_T添 加第 %d 對象數(shù)組"),loopindex;VoidPtrAry.append(pObj);IntAry.append(AcDbHatch:kLine);/遍歷邊界(AcGe對象數(shù)組)中AcGe對象結(jié)束,得到AcGe對象數(shù)組 /es=pHatch2->appendLoop(loopTy

17、pe,VoidPtrAry,intAry);es=pHatch2->appendLoop(loopType,VoidPtrAry,IntAry);if(Acad:eOk!=es)acedAlert(_T("Acad:eInvalidInput");pHatch2->close();pHatch->close();pBlkTblRcd->close();deletepBlkTblRcdItr;deletepatternName;deletepDb;/returnfalse;/ 將每一條邊界添加進(jìn)自定義實(shí)體 , /將得到的每條邊界加入到填充對象 中/邊界循環(huán)結(jié)束 ,得到填充對象的整邊界es=pHatch2->evaluateHatch();/顯示填充對象AcDbObjectIdhatchld;/ 添加到模型空間hatchId=PostToModelSpace(pHatch2);if(hatchId!=NULL)acedAlert(_T("獲取填充對象成功n&qu

溫馨提示

  • 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

提交評論