找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ObjectARX_面域

[复制链接]

1

主题

0

回帖

35

积分

管理员

积分
35
发表于 2024-5-2 22:25:08 | 显示全部楼层 |阅读模式
  1. void ZffCHAP2AddRegion()
  2. {
  3. // 使用选择集,提示用户选择作为面域边界的对象
  4. ads采用name ss;
  5. int rt = acedSSGet(NULL, NULL, NULL, NULL, ss); // 提示用户
  6. 选择对象
  7. AcDbObjectIdArray objIds;
  8. // 根据选择集中的对象构建边界曲线的ID数组
  9. if (rt == RTNORM)
  10. {
  11. long length;
  12. acedSSLength(ss, &length);  // 获得选择集中的对象个数
  13. for (int i = 0; i < length; i++)
  14. {
  15. ads采用name ent;
  16. acedSSName(ss, i, ent);
  17. AcDbObjectId objId;
  18. acdbGetObjectId(objId, ent);
  19. objIds.append(objId);
  20. }
  21. }
  22. acedSSFree(ss); // 及时释放选择集
  23. AcDbObjectIdArray regionIds;
  24. regionIds = CCreateEnt::CreateRegion(objIds);
  25. int number = regionIds.length();
  26. if (number > 0)
  27. {
  28. acutPrintf("\n已经创建%d个面域!", number);
  29. }
  30. else
  31. {
  32. acutPrintf("\n创建0个面域!");
  33. }
  34. }
  35. AcDbObjectIdArray CCreateEnt::CreateRegion(const AcDbObjectIdArray& curveIds)
  36. {
  37. AcDbObjectIdArray regionIds;  // 生成的面域的ID数组
  38. AcDbVoidPtrArray curves; // 指向作为面域边界的曲线的指针的数组
  39. AcDbVoidPtrArray regions; // 指向创建的面域对象的指针的数组
  40. AcDbEntity *pEnt; // 临时指针,用来关闭边界曲线
  41. AcDbRegion *pRegion; // 临时对象,用来将面域添加到模型空间
  42. // 用curveIds初始化curves
  43. for (int i = 0; i < curveIds.length(); i++)
  44. {
  45. acdbOpenAcDbEntity(pEnt, curveIds.at(i), AcDb::kForRead);
  46. if (pEnt->isKindOf(AcDbCurve::desc()))
  47. {
  48. curves.append(static采用cast<void*>(pEnt));
  49. }
  50. }
  51. Acad::ErrorStatus es = AcDbRegion::createFromCurves(curves,
  52. regions);
  53. if (es == Acad::eOk)
  54. {
  55. // 将生成的面域添加到模型空间
  56. for (i = 0; i < regions.length(); i++)
  57. {
  58. // 将空指针(可指向任何类型)转化为指向面域的指针
  59. pRegion = static采用cast<AcDbRegion*>(regions[i]);
  60. pRegion->setDatabaseDefaults();
  61. AcDbObjectId regionId;
  62. regionId = CCreateEnt::PostToModelSpace(pRegion);
  63. regionIds.append(regionId);
  64. }
  65. }
  66. else // 如果创建不成功,也要删除已经生成的面域
  67. {
  68. for (i = 0; i < regions.length(); i++)
  69. {
  70. delete (AcRxObject*)regions[i];
  71. }
  72. }
  73. // 关闭作为边界的对象
  74. for (i = 0; i < curves.length(); i++)
  75. {
  76. pEnt = static采用cast<AcDbEntity*>(curves[i]);
  77. pEnt->close();
  78. }
  79. return regionIds;
  80. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-1-1 18:28 , Processed in 0.128159 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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