天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 64|回复: 0

ObjectARX 遍历指定动态块的所有可见性名称方法(二)

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
遍历指定动态块的所有可见性名称方法(二)

依然采用了entget dxf大法
  1.                 ads_name ent;
  2.                 ads_point pt;
  3.                 if(RTNORM != acedEntSel(NULL,ent,pt))
  4.                 {
  5.                         acutPrintf(_T("\n未选择到对象!"));
  6.                         return;
  7.                 }               
  8.                 AcDbObjectId objId;
  9.                 acdbGetObjectId(objId,ent);
  10.                 AcDbObjectPointer<AcDbBlockReference> pBlkRef(objId,AcDb::kForRead);
  11.                 if(Acad::eOk != pBlkRef.openStatus())
  12.                 {
  13.                         acutPrintf(_T("\n打开块参照失败!"));
  14.                         return;
  15.                 }
  16.                 AcDbDynBlockReference dynBlkRef(objId);
  17.                 if(!dynBlkRef.isDynamicBlock())
  18.                 {
  19.                         acutPrintf(_T("\n非动态块参照!"));
  20.                         return;
  21.                 }
  22.                 AcDbObjectId blkDefId=dynBlkRef.dynamicBlockTableRecord();
  23.                 AcDbBlockTableRecordPointer pBlkDef(blkDefId,AcDb::kForRead);
  24.                 if(Acad::eOk != pBlkDef.openStatus())
  25.                 {
  26.                         acutPrintf(_T("\n块定义打开失败!"));
  27.                         return;
  28.                 }
  29.                 AcDbObjectId dicId= pBlkDef->extensionDictionary();
  30.                 AcDbObjectPointer<AcDbDictionary> pDic(dicId,AcDb::kForRead);
  31.                 if(Acad::eOk != pDic.openStatus())
  32.                 {
  33.                         acutPrintf(_T("\n扩展词典打开失败!"));
  34.                         return;
  35.                 }
  36.                 AcDbObjectId enhancedblkId;
  37.                 pDic->getAt(_T("ACAD_ENHANCEDBLOCK"),enhancedblkId);
  38.                 AcDbObjectPointer<AcDbEvalGraph> pEnhancedBlk(enhancedblkId,AcDb::kForRead);
  39.                 if(Acad::eOk != pEnhancedBlk.openStatus())
  40.                 {
  41.                         acutPrintf(_T("\nACAD_ENHANCEDBLOCK打开失败!"));
  42.                         return;
  43.                 }
  44.                 AcDbEvalNodeIdArray nodeIdArray;
  45.                 pEnhancedBlk->getAllNodes(nodeIdArray);
  46.                 for(int i=0;i<nodeIdArray.length();i++)
  47.                 {
  48.                         AcDbEvalNodeId subId=nodeIdArray.at(i);
  49.                         AcDbObject *pNode=NULL;
  50.                         pEnhancedBlk->getNode(subId,AcDb::kForRead,&pNode);
  51.                         if(pNode == NULL) continue;
  52.                         if(pNode->isKindOf(AcDbEvalExpr::desc()))
  53.                         {
  54.                                 CString strDxfName=pNode->objectId().objectClass()->dxfName();
  55.                                 if (_T("BLOCKVISIBILITYPARAMETER") == strDxfName)
  56.                                 {
  57.                                         ads_name nodeEnt;
  58.                                         Acad::ErrorStatus es= acdbGetAdsName(nodeEnt,pNode->objectId());
  59.                                         resbuf *elist= acdbEntGet(nodeEnt);
  60.                                         if (elist!=NULL)
  61.                                         {
  62.                                                 for (resbuf *eb = elist; eb != NULL; eb = eb->rbnext)
  63.                                                 {
  64.                                                         if (eb->restype == 301)                                               
  65.                                                         {
  66.                                                                 printdxf(eb);
  67.                                                         }
  68.                                                         else if (eb->restype == 303)
  69.                                                         {
  70.                                                                 printdxf(eb);
  71.                                                         }                                               
  72.                                                 }                                                                                               
  73.                                                 acutRelRb(elist);
  74.                                         }
  75.                                 }
  76.                                
  77.                         }
  78.                         pNode->close();                                                                       
  79.                 }
复制代码

 

 

 

 

ObjectARX 遍历指定动态块的所有可见性名称方法(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:46 , Processed in 0.138840 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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