ObjectArx填充边界的获取.docx

上传人:b****1 文档编号:3316408 上传时间:2023-05-05 格式:DOCX 页数:9 大小:16.51KB
下载 相关 举报
ObjectArx填充边界的获取.docx_第1页
第1页 / 共9页
ObjectArx填充边界的获取.docx_第2页
第2页 / 共9页
ObjectArx填充边界的获取.docx_第3页
第3页 / 共9页
ObjectArx填充边界的获取.docx_第4页
第4页 / 共9页
ObjectArx填充边界的获取.docx_第5页
第5页 / 共9页
ObjectArx填充边界的获取.docx_第6页
第6页 / 共9页
ObjectArx填充边界的获取.docx_第7页
第7页 / 共9页
ObjectArx填充边界的获取.docx_第8页
第8页 / 共9页
ObjectArx填充边界的获取.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ObjectArx填充边界的获取.docx

《ObjectArx填充边界的获取.docx》由会员分享,可在线阅读,更多相关《ObjectArx填充边界的获取.docx(9页珍藏版)》请在冰点文库上搜索。

ObjectArx填充边界的获取.docx

ObjectArx填充边界的获取

//遍历填充对象的边界信息。

boolCAcUiSelDialog:

:

OpenDwgFile(constACHAR*fileName)

{

Acad:

:

ErrorStatuses;

//AcDbObjectIdArrayobjectIds;//边界id数组

AcGeVector3dnormal;//填充平面

boolbAssociative;//关联型

AcDbHatch:

:

HatchPatternTypepatternType;//填充图案类型

constACHAR*patternName;//填充图案名

AcDbHatch:

:

HatchStylehatchStyle;

//2.读取.dwg文件

AcDbDatabase*pDb=newAcDbDatabase(Adesk:

:

kFalse);

es=pDb->readDwgFile(_T("D:

\\***.dwg"));//.dwg文件路径

if(Acad:

:

eOk!

=es)

{

acedAlert(_T("临时数据库打开失败"));

deletepDb;

returnfalse;

}

//3.获取块表

AcDbBlockTable*pBlkTbl;

es=pDb->getSymbolTable(pBlkTbl,AcDb:

:

kForRead);

if(Acad:

:

eOk!

=es)

{

acedAlert(_T("获取块表错误!

"));

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("获取块表记录错误!

"));

returnfalse;

}

pBlkTbl->close();

//5.创建块表记录迭代器,遍历模型空间块表记录

CStringhClass;

AcDbBlockTableRecordIterator*pBlkTblRcdItr;

pBlkTblRcd->newIterator(pBlkTblRcdItr);

AcGePoint3d*pPt3D=newAcGePoint3d();

if(NULL==pPt3D)

{

pBlkTblRcd->close();

deletepDb;

//deletepHatch;

deletepBlkTblRcdItr;

returnfalse;

}

//遍历块表记录中的实体

for(pBlkTblRcdItr->start();!

pBlkTblRcdItr->done();pBlkTblRcdItr->step())

{

//6.得到实体对象

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->close();

//deletepatternName;

deletepBlkTblRcdItr;

returnfalse;

}

pHatch=AcDbHatch:

:

cast(pEnt);

if(pHatch!

=NULL)

{

intloopNums=pHatch->numLoops();

//acutPrintf(_T("%d"),loopNums);//此处可用

normal=pHatch->normal();//平面向量

bAssociative=pHatch->associative();//关联性

patternName=pHatch->patternName();//填充图案名

patternType=pHatch->patternType();//填充类型

hatchStyle=pHatch->hatchStyle();//hatchstyleofthehatchentity,填充风格color=pHatch->colorIndex();//得到为indicatestheentityusesthecolorspecifiedintheLayerTableRecorditreferences.

//acutPrintf(_T("填充对象的颜色:

%d"),color);

/////////////////////////////////////////////

AcDbHatch*pHatch2=newAcDbHatch();//新建填充对象

es=pHatch2->setNormal(normal);//设置填充平面

if(Acad:

:

eOk!

=es)

{

acedAlert(_T("构造向量失败"));

returnfalse;

}

es=pHatch2->setElevation(0);

es=pHatch2->setAssociative(bAssociative);//设置关联性

if(Acad:

:

eOk!

=es)

{

acedAlert(_T("构造关联性失败"));

returnfalse;

}

es=pHatch2->setPattern(patternType,patternName);//设置填充图案

if(Acad:

:

eOk!

=es)

{

acedAlert(_T("构造图案失败"));

returnfalse;

}

es=pHatch2->setHatchStyle(hatchStyle);//设置填充类型

es=pHatch2->setColorIndex(color);//设置颜色

for(intloopIndex=0;loopIndex

//为每一条边界长久存放数组

AcGeVoidPointerArrayedgePtrs;

AcGeIntArrayedgeTypes;

AcGeVoidPointerArrayVoidPtrAry;

AcGeIntArrayIntAry;

if(Acad:

:

eNotApplicable!

=pHatch->getLoopAt(loopIndex,loopType,vertices,bulges))//获取kPolyLine的边界

{

//多义线----kPolyLine-----获取其顶点;

intiIndex=0;

for(iIndex=0;iIndex

{

pPt3D->x=vertices.at(iIndex).x;//Thisfunctionreturnstheelementofthearrayatpositioni

pPt3D->y=vertices.at(iIndex).y;

acutPrintf(_T("多义线的坐标是:

%d,%d"),pPt3D->x,pPt3D->y);//pPenStroke->m_Stroke.push_back(pPt3D);//保存多义线顶点}

}

//非多义线

else

{

//分别获取第-61条边界,每一条边界都是AcGe对像数组

es=pHatch->getLoopAt(loopIndex,//InputindexofselectedlooploopType,//Outputlooptype

edgePtrs,//OutputasetofAcGeCurvepointersedgeTypes);//Outputasetofenumeratededgetypesfor(intj=0;j

/*

elseif(edgeTypes[j]==AcDbHatch:

:

kCirArc)//圆弧

{

//AcGeCircArc2d*CirArc=(AcGeCircArc2d*)edgePtrs;

acutPrintf(_T("\n圆弧"));

//可以根据数学圆弧构造相应的AcDb圆弧,取决于你(以下同)}

elseif(edgeTypes[j]==AcDbHatch:

:

kEllArc)//椭圆弧

{

//AcGeEllipArc2d*EllArc=(AcGeEllipArc2d*)edgePtrs;acutPrintf(_T("\n椭圆弧"));

}

elseif(edgeTypes[j]==AcDbHatch:

:

kSpline)//NURBS曲线

{

//AcGeNurbCurve2d*Spline=(AcGeNurbCurve2d*)edgePtrs;对象acutPrintf(_T("\nNURBS曲线"));

}

//获取直线的起点和终点,只考虑直线,章中只有直线

if(edgeTypes[j]==AcDbHatch:

:

kLine)//线型

{

AcGeLineSeg2d*pLnSeg=(AcGeLineSeg2d*)edgePtrs.at(j);//遍历第j个AcGe}

*/

AcGeLineSeg2d*pLineSeg=NULL;

//边类型(仅当边界不是多段线时):

//1=直线;=圆弧;=椭圆弧;=样条曲线

switch(edgeTypes.at(j))//判断边类型

{

case1:

//-----直线

{

pLineSeg=(AcGeLineSeg2d*)edgePtrs.at(j);}

}

if(NULL!

=pLineSeg)

{

AcGePoint3d*pPt3D1=newAcGePoint3d();//起点,并转换为DpPt3D1->x=pLineSeg->startPoint().x;

pPt3D1->y=pLineSeg->startPoint().y;

AcGePoint2dBeginPt(pPt3D1->x,pPt3D1->y);

deletepPt3D1;

AcGePoint3d*pPt3D2=newAcGePoint3d();//尾点,并转为DpPt3D2->x=pLineSeg->endPoint().x;

pPt3D2->y=pLineSeg->endPoint().y;

AcGePoint2dEndPt(pPt3D2->x,pPt3D2->y);

deletepPt3D2;

AcGeLineSeg2d*pObj=newAcGeLineSeg2d(BeginPt,EndPt);////acutPrintf(_T("添加第%d对象数组")),loopIndex;VoidPtrAry.append(pObj);

IntAry.append(AcDbHatch:

:

kLine);

}

}//遍历边界(AcGe对象数组)中AcGe对象结束,得到AcGe对象数组//es=pHatch2->appendLoop(loopType,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;

}

}//将每一条边界添加进自定义实体,//将得到的每条边界加入到填充对象中}//边界循环结束,得到填充对象的整边界

es=pHatch2->evaluateHatch();//显示填充对象

AcDbObjectIdhatchId;//添加到模型空间

hatchId=PostToModelSpace(pHatch2);

if(hatchId!

=NULL)

{

acedAlert(_T("获取填充对象成功\n"));

}

pEnt->close();

pHatch->close();//关闭实体,

//pHatch2->close();

pBlkTblRcd->close();

deletepatternName;

deletepBlkTblRcdItr;

deletepDb;

returntrue;

}//pHatch对象为空

pEnt->close();

pHatch->close();

deletepatternName;

deletepBlkTblRcdItr;

deletepDb;

returnfalse;

}//遍历dwg文件临时库结束

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2