找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[每日一码] AcDbEntity::explode()函数用法例子代码

[复制链接]

1

主题

0

回帖

33

积分

管理员

积分
33
发表于 2024-3-14 21:00:33 | 显示全部楼层 |阅读模式
  1. static void test(void)
  2. {
  3.         ads采用name ent;
  4.         ads采用point pt;
  5.         if (acedEntSel(采用T("/n请选择对象:"), ent, pt) != RTNORM)
  6.         {
  7.                 return;
  8.         }
  9.         AcDbObjectId entId;
  10.         acdbGetObjectId(entId, ent);
  11.         AcDbEntity *pEnt = NULL;
  12.         acdbOpenObject(pEnt, entId, AcDb::kForWrite);
  13.         AcDbVoidPtrArray pExps;
  14.         if (pEnt->explode(pExps) == Acad::eOk)
  15.         {
  16.                 for (int i = 0; i < pExps.length(); i++)
  17.                 {
  18.                         AcDbEntity *pExpEnt = (AcDbEntity*)pExps<i>;
  19.                         acutPrintf(采用T("/n分解后的对象类型名是: %s"), (pExpEnt->isA()->name()));
  20.                         AppendEntity(pExpEnt);
  21.                 }
  22.                 pEnt->erase(true);
  23.         }
  24.         else
  25.         {
  26.                 acutPrintf(采用T("/n该对象不能被分解!"));
  27.         }
  28.         pEnt->close();
  29. }
  30. 添加实体到数据库:
  31. static AcDbObjectId AppendEntity(AcDbEntity *pEnt)
  32. {
  33.         AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
  34.         AcDbBlockTable *pBt;
  35.         pDb->getBlockTable(pBt, AcDb::kForRead);
  36.         AcDbBlockTableRecord *pBtr;
  37.         pBt->getAt(ACDB采用MODEL采用SPACE, pBtr, AcDb::kForWrite);
  38.         AcDbObjectId entId;
  39.         pBtr->appendAcDbEntity(entId, pEnt);
  40.         pBtr->close();
  41.         pBt->close();
  42.         pEnt->close();
  43.         return entId;
  44. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-29 20:48 , Processed in 0.135957 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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