找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ObjectARX开发创建直线、圆、圆弧和修改对象属性

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 2024-7-30 08:29:40 | 显示全部楼层 |阅读模式
  1. Arx二次开发创建直线、圆、圆弧和修改对象属性
  2. 二、本节要讲解的知识点
  3. 1、如何应用C++ ARX二次开发创建直线。
  4. 2、如何应用C++ ARX二次开发创建圆。
  5. 3、如何应用C++ ARX二次开发创建圆弧。
  6. 4、如何修改对象的属性。
  7. 5、腾讯课堂云幽学院详细的内容讲解。
  8. 三、具体内容
  9. 1、创建一条直线,直线的起点是(0,0,0),直线的终点(100,100,0)。
  10. 2、表:表是数据库的组成单位,一个数据库至少含有一个表。
  11. 3、记录:记录是表的组成单位,一个表可能含有多个记录,也可能不包含任何记录。
  12. 4、用一个图来描述AUTOCAD图形数据库的基本结构。
  13. 5、创建图形对象的步骤:
  14. (1)确定要创建对象的图形数据库:acdbHostApplicationServices->workingDatabase()
  15. (2)获得这个图形数据库的块表:->getBlockTable(块表指针,打开的方式)
  16. (3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记录里面。
  17. (4)创建实体类对象,将该对象附加到特定的块表记录中。
  18. 6、创建命令需要修改两个地方:拷贝模板提供的代码,将里面的命令修改成自己想要定义的命令名字(命令的全局名和本地名)。
  19. 实现命令的函数:static void YunyouMyGroupCreateLine (),命令函数名字由三部分组成,包括前缀标识“Yunyou”,命令组的名字“MyGroup”、命令名字“CreateLine”。
  20. 7、创建直线的实现代码如下
  21. static AcDbObjectId  YunyouMyGroupCreateLine ()
  22. {
  23. //(1)确定要创建对象的图形数据库:acdbHostApplicationServices()->workingDatabase()
  24. //(2)获得这个图形数据库的块表:acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
  25. //(3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记录里面:pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite)
  26. //(4)创建实体类对象,将该对象附加到特定的块表记录中。 AcDbLine *pLine=new AcDbLine(ptStart,ptEnd); pBlockTableRecord->appendAcDbEntity(lineId,pLine);
  27. //关闭我们实体、块表记录、块表。否则导致致命错误AUTOCAD的退出。
  28. AcGePoint3d ptStart(0,0,0);
  29. AcGePoint3d ptEnd(100,100,0);
  30. AcDbLine *pLine=new AcDbLine(ptStart,ptEnd);
  31. AcDbBlockTable *pBlockTable=NULL;
  32. acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);
  33. AcDbBlockTableRecord *pBlockTableRecord;
  34. pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//模型空间就是一个块表记录
  35. AcDbObjectId lineId;
  36. pBlockTableRecord->appendAcDbEntity(lineId,pLine);
  37. pBlockTable->close();
  38. pBlockTableRecord->close();
  39. pLine->close();
  40. return lineId;
  41. }
  42. 8、对于高版本(AutoCAD2016及以上)来说,编译后生成的ARX文件需要放置在AUTOCAD的安装目录或者其目录下,在加载ARX时就不会有“安全性提示”。
  43. 9、加载ARX: 在命令行ARX 回车 Load,  APPLOAD
  44. 10、调用命令:CreateLine,效果如下:
  45. 在模型空间创建了一条直线,直线的起点是(0,0,0)直线的终点是(100,100,0)。
  46. 11、修改对象属性的思路:需要打开图形数据库的对象,AcDbObjectId
  47. 打开和关闭图形数据库的对象:
  48. (1)acdbOpenAcDbEntity适用于打开继承于AcDbEntity的数据库常驻对象。
  49. Acad::ErrorStatus acdbOpenAcDbEntity(
  50.     AcDbEntity*& pEnt,
  51.     AcDbObjectId id,
  52.     AcDb::OpenMode mode,
  53.     bool openErasedEntity = false
  54. );
  55. (2)acdbOpenAcDbObject适合于打开未继承于AcDbEntity的数据库常驻对象。
  56. Acad::ErrorStatus acdbOpenAcDbObject(
  57.     AcDbObject*& pObj,
  58.     AcDbObjectId id,
  59.     AcDb::OpenMode mode,
  60.     bool openErasedObject = false
  61. );
  62. (3)acdbOpenObject不知道要打开的对象是否继承于AcDbEntity时采用此方法。
  63. ACDB_PORT Acad::ErrorStatus acdbOpenObject(
  64.     AcDbObject*& pObj,
  65.     AcDbObjectId id,
  66.     AcDb::OpenMode mode,
  67.     bool openErased = false,
  68.     const AcRxClass * pClass = nullptr
  69. );
  70. 打开对象之后使用close()方法将其关闭。
  71. 12、ID(AcDbObjectId)、指针、句柄(handle)、和ads_name
  72. (1)ID:AcDbObjectId,在一个AUTOCAD任务中,可能会加载有多个图形数据库,但是所有对象的ID在这次任务中都是独一无二的,在不同任务中,同一图形对象的ID可能不同。适合编程使用。
  73. (2)句柄:handle,在一个DWG图形文件里面是唯一的,但是不同的DWG文件句柄有可能重复。句柄随DWG文件一起保存的,两次任务中同一对象的句柄是相同的。
  74. (3)ads_name :不稳定的,在AUTOCAD中的一个特定图形中工作时可以使用,一旦退出AUTOCAD或者切换到另外一个图形,就会消失。
  75. 13、转化问题:
  76. (1) ID-->对象指针:acdbOpenAcDbEntity、acdbOpenAcDbObject、acdbOpenObject
  77. (2) 对象指针->ID:所有的对象都继承于AcDbObject,包含了一个叫做objectId()的函数可以获取到对象的指针。
  78. (3) 句柄到ID:AcDbDataBase:getAcDbObjectId.
  79. (4) ID到句柄:使用AcDbObjectId的handle函数。
  80. (5) 指针到句柄:AcdbObject的getAcDbHandle函数
  81. (6) ads_name到ID:使用全局函数acdbGetObjectId
  82. (7) ID到ads_name:使用全局函数acdbGetAdsName。
  83. 四、总结
  84. (1)图形数据库组成单位是表,表的组成单位是记录,实体包含在块表记录里面,要创建实体的步骤是:需要确定图形数据库,打开块表,获取特定的块表记录(通常来说就是模型空间),创建实体,并将实体添加到块表记录里面。
  85. (2)高版本的ARX模块如果不在AUTOCAD“内部路径”则会有安全性提示,建议开发阶段将生成的文件放置于AUTOCAD安装路径的子目录中,避免恼人提示。
  86. (3)几种标识:  ID\句柄\ads_name\对象指针,特点以及如何使用、如何转换。
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-27 22:03 , Processed in 0.121714 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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