找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 127|回复: 0

[每日一码] (块变换矩阵的应用)图块中的圆坐标转换到当前WCS下的方法

[复制链接]

0

主题

0

回帖

28

积分

管理员

积分
28
发表于 2024-3-14 19:31:36 | 显示全部楼层 |阅读模式
  1. 以下代码通过选择一个块参照,将块内的圆对象的坐标转换为该圆在当前dwg中的坐标并输出。相当于炸开块参照后再读取圆对象坐标的效果  
  2.     ads采用name ObjName;  
  3.     ads采用point pnt;  
  4.     AcDbObjectId objId;  
  5.     if (RTNORM != acedEntSel(采用T(""),ObjName,pnt))  
  6.     {  
  7.         return;  
  8.     }  
  9.       
  10.     acdbGetObjectId(objId,ObjName);  
  11.     AcDbEntity *pEnt=NULL;  
  12.     acdbOpenObject(pEnt,objId,AcDb::kForRead);  
  13.     if(pEnt->isKindOf(AcDbBlockReference::desc()))  
  14.     {  
  15.        AcDbBlockReference *pBlkRef=AcDbBlockReference::cast(pEnt);  
  16.        AcGeMatrix3d mat= pBlkRef->blockTransform();  
  17.          
  18.        AcDbBlockTableRecordPointer BlkTBRec采用Ptr(pBlkRef->blockTableRecord(),AcDb::kForRead);  
  19.        if(Acad::eOk  == BlkTBRec采用Ptr.openStatus())  
  20.        {  
  21.             AcDbBlockTableRecordIterator *pIt=NULL;  
  22.             BlkTBRec采用Ptr->newIterator(pIt);  
  23.             for (pIt->start();!pIt->done();pIt->step())  
  24.             {  
  25.                 AcDbEntity *pEntItem=NULL;  
  26.                 pIt->getEntity(pEntItem,AcDb::kForRead);  
  27.                 if(pEntItem->isKindOf(AcDbCircle::desc()))  
  28.                 {  
  29.                     AcDbCircle *pCircle=AcDbCircle::cast(pEntItem);  
  30.                     AcGePoint3d transPnt= mat * pCircle->center(); //将变换矩阵应用到对象的块内位置上,即得其在当前dwg图中的位置   
  31.                     acutPrintf(采用T("块内位置:%f,%f\n"),pCircle->center().x,pCircle->center().y);  
  32.                     acutPrintf(采用T("在当前图中的位置%f,%f\n"),transPnt.x,transPnt.y);  
  33.                 }  
  34.                 pEntItem->close();  
  35.             }  
  36.             delete pIt;  
  37.        }  
  38.     }  
  39.     pEnt->close();
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-29 05:05 , Processed in 0.127062 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表