提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上。

(1)ObjectARX2015 + vs2012创建直线_qq_42981953的博客-CSDN博客

(4)ObjectARX2015 + vs2012扩展绘制直线的功能为绘制实体_qq_42981953的博客-CSDN博客

1. 说明

        本篇介绍提示用户选择所要组成面域的对象,然后在命令行显示创建面域的结果。这与 AutoCAD 中 REGION 命令的操作基本一致。
2. 思路
        AcDbRegion 类代表 AutoCAD 中的面域。        
        在 ObjectARX 中创建面域对象非常特别,它一般不利用构造函数来完成对象的创建,而是使用 AcDbRegion 类的一个静态成员函数 createFromCurves 来完成。
        createFromCurves 函数的定义为:
static Acad::ErrorStatus createFromCurves( const AcDbVoidPtrArray& curveSegments, //CurveSegments 是一个指向曲线实体的指针数组,用来定义面域的边界,作为面域边界的曲线必须首尾相连;AcDbVoidPtrArray& regions);            //regions 是一个指针数组,返回指向新创建的面域的指针。
        在创建面域时,需要注意,作为面域边界的对象必须是 AcDbLine、AcDbArc、AcDbEllipse、 AcDbCircle、AcDbSpline、AcDb3dPolyline 或 AcDbPolyline 类的对象。

3. 步骤

(1) 创建面域

//面域
static AcDbObjectIdArray CreateRegion(AcDbObjectIdArray curveIds);
//创建面域
AcDbObjectIdArray CCreateEnt::CreateRegion(AcDbObjectIdArray curveIds)
{ AcDbObjectIdArray regionIds; // 生成的面域的ID数组AcDbVoidPtrArray curves; // 指向作为面域边界的曲线的指针的数组AcDbVoidPtrArray regions; // 指向创建的面域对象的指针的数组AcDbEntity *pEnt; // 临时指针,用来关闭边界曲线AcDbRegion *pRegion; // 临时对象,用来将面域添加到模型空间// 用curveIds初始化curvesfor (int i = 0; i < curveIds.length(); i++) { acdbOpenAcDbEntity(pEnt, curveIds.at(i), AcDb::kForRead); if (pEnt->isKindOf(AcDbCurve::desc())) { curves.append(static_cast<void*>(pEnt)); } } Acad::ErrorStatus es = AcDbRegion::createFromCurves(curves, regions); if (es == Acad::eOk) { // 将生成的面域添加到模型空间for (int i = 0; i < regions.length(); i++) { // 将空指针(可指向任何类型)转化为指向面域的指针pRegion = static_cast<AcDbRegion*>(regions[i]); pRegion->setDatabaseDefaults(); AcDbObjectId regionId; regionId = CCreateEnt::PostToModelSpace(pRegion); regionIds.append(regionId); } } else // 如果创建不成功,也要删除已经生成的面域{ for (int i = 0; i < regions.length(); i++) { delete (AcRxObject*)regions[i]; } } // 关闭作为边界的对象for (int i = 0; i < curves.length(); i++) { pEnt = static_cast<AcDbEntity*>(curves[i]); pEnt->close(); }return regionIds;
}

(2) 在acrxEntryPoint.cpp中添加

ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyDrawRegion, MyDrawRegion, ACRX_CMD_MODAL, NULL) //画多段线
//当前项目中注册一个命令 AddRegionstatic void MidasMyGroupMyDrawRegion() { // 使用选择集,提示用户选择作为面域边界的对象ads_name ss; int rt = acedSSGet(NULL, NULL, NULL, NULL, ss); // 提示用户选择对象AcDbObjectIdArray objIds; // 根据选择集中的对象构建边界曲线的ID数组if (rt == RTNORM) { long length; acedSSLength(ss, &length); // 获得选择集中的对象个数for (int i = 0; i < length; i++) { ads_name ent; acedSSName(ss, i, ent); AcDbObjectId objId; acdbGetObjectId(objId, ent); objIds.append(objId); } } acedSSFree(ss); // 及时释放选择集AcDbObjectIdArray regionIds;regionIds = CCreateEnt::CreateRegion(objIds); int number = regionIds.length(); if (number > 0) { acutPrintf(_T("\n已经创建%d个面域!"), number); } else { acutPrintf(_T("\n创建0个面域!")); }}

实现效果:

(1) 创建两个首尾相连的图形

(2) 输入命令 MyDrawRegion后回车键

(3) 选择所有线段

(4) 回车键

(9)ObjectARX2015 + vs2012创建面域相关推荐

  1. (15)ObjectARX2015 + vs2012创建三维实体

    1. 说明         ObjectARX 中提供了三类创建三维实体的方法:                 (1)创建标准形状的实体                 (2)拉伸面域创建实体    ...

  2. (14)ObjectARX2015 + vs2012创建和编辑对象时的动态拖动技术

    提示:看之前的博客(1)(4)和(12),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线 ...

  3. (6)ObjectARX2015 + vs2012创建圆弧

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  4. (7)ObjectARX2015 + vs2012创建多段线以及实体的旋转移动放缩

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  5. (12)ObjectARX2015 + vs2012创建尺寸标注

    提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上. (1)ObjectARX2015 + vs2012创建直线_qq_ ...

  6. (24)ObjectARX2015 + vs2012创建字体样式

    1. 说明         AutoCAD 中可以使用 STYLE 命令创建新的字体样式,包括                 设置样式名.                 选择字体文件.       ...

  7. (17)ObjectARX2015 + vs2012创建块定义

    1. 说明         本篇举例块定义中包含两条直线和一个圆. 2. 思路         所有的实体都保存在块表记录中,而块表记录则存储在块表中.实际上,用户在 AutoCAD 中定义块相当于增 ...

  8. 创建BDC域控制器时,提示“出站复制验证失败。在复制源域控制器上未启用出站复制”的解决办法...

    创建BDC域控制器时,在完成角色添加后的部署界面,进行配置后的先决条件检查,提示失败如下: 后在现有DC上通过windows powershell(CMD管理员模式)运行repadmin /showr ...

  9. VS2012创建ATL工程及使用MFC测试COM组件

    VS2012创建ATL工程及使用MFC测试COM组件 原创  2015年01月22日 16:23:21

最新文章

  1. 深度学习中的优化简介
  2. @excel注解_java bean 一对多,多对一 poi导出excel表格
  3. DDD 领域驱动设计:贫血模型、充血模型的深入解读
  4. 帮中国修长城前,英特尔还用AI追踪北极熊、保护鲸鱼
  5. 亲密关系沟通-【信任感】-巩固信任感的沟通方法
  6. 源码之前,了无秘密(一)——iterator adapter
  7. 后端类型/状态/标识校验限定法
  8. pom中子模块project报红,插件运行Process terminated
  9. Python入门经典. 以解决计算问题为导向的Python编程实践
  10. BCDboot.exe
  11. Access入门简单教程
  12. sht30温湿度传感器中文手册_DHT11温湿度传感器编程思路以及代码的实现
  13. 混合移动开发 相关技术梳理(自用)
  14. Requested setting DATABASES, but settings are not configured. You must either define the environment
  15. 计算机中应用g,CH340g使用说明详解 - 全文
  16. 基因数据处理54之bwa-mem运行paird-end(1千万条100bp的reads)
  17. Word2019中Visio对象图片插入题注时自动删除标签与编号前的空格,编号后添加空格
  18. 03-多线程下载网图
  19. 可以设置时间的计时器
  20. Google play billing Alpha / Beta 测试

热门文章

  1. 低成本,高利润,高复购
  2. 心是一块田 要靠自己播种
  3. 小米旗舰机2999元?雷军说很痛苦
  4. PowerShell_零基础自学课程_6_PS中获取帮助信息详解、管道、格式化输
  5. 通过英雄联盟塞拉斯大招学习策略模式和命令模式
  6. Falco: Fast likelihood based collision avoidance with extension to human guided navigation
  7. 学计算机文化基础,第一学期计算机文化基础-5次作业
  8. 2021美赛D题艺术家思路整理
  9. 执行查询报memory is temporarily unavailable
  10. 短视频APP+不同类型社交应用发展分析+化妆品电商