- UID
- 5043
- 积分
- 1347
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-5-13
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
[code=code]
//以下代码通过选择一个块参照,将块内的圆对象的坐标转换为该圆在当前dwg中的坐标并输出。相当于炸开块参照后再读取圆对象坐标的效果
ads_name ObjName;
ads_point pnt;
AcDbObjectId objId;
if (RTNORM != acedEntSel(_T(""),ObjName,pnt))
{
return;
}
acdbGetObjectId(objId,ObjName);
AcDbEntity *pEnt=NULL;
acdbOpenObject(pEnt,objId,AcDb::kForRead);
if(pEnt->isKindOf(AcDbBlockReference::desc()))
{
AcDbBlockReference *pBlkRef=AcDbBlockReference::cast(pEnt);
AcGeMatrix3d mat= pBlkRef->blockTransform();
AcDbBlockTableRecordPointer BlkTBRec_Ptr(pBlkRef->blockTableRecord(),AcDb::kForRead);
if(Acad::eOk == BlkTBRec_Ptr.openStatus())
{
AcDbBlockTableRecordIterator *pIt=NULL;
BlkTBRec_Ptr->newIterator(pIt);
for (pIt->start();!pIt->done();pIt->step())
{
AcDbEntity *pEntItem=NULL;
pIt->getEntity(pEntItem,AcDb::kForRead);
if(pEntItem->isKindOf(AcDbCircle::desc()))
{
AcDbCircle *pCircle=AcDbCircle::cast(pEntItem);
AcGePoint3d transPnt= mat * pCircle->center(); //将变换矩阵应用到对象的块内位置上,即得其在当前dwg图中的位置
acutPrintf(_T("块内位置:%f,%f\n"),pCircle->center().x,pCircle->center().y);
acutPrintf(_T("在当前图中的位置%f,%f\n"),transPnt.x,transPnt.y);
}
pEntItem->close();
}
delete pIt;
}
}
pEnt->close(); [/code] |
|