实施实用程序功能后,通过名称CREATE和SETLAYER创建两个新命令.
要使用在上一个练习中创建的实用程序功能,请在acrxEntryPoint.cpp中添加以下内容.
命令的执行:
命令 "CREATE":
在acrxEntryPoint.cpp中创建一个名为AsdkStep03_CREATE()的函数,当执行命令CREATE时将调用该函数。
在函数AsdkStep03_CREATE()中实现以下内容。
算法
-
该实现将调用我们的用户定义的实用程序函数createLayer(),以参数“ USER”作为图层名称,并调用用户定义的函数createBlockRecord(),以参数“ EMPLOYEE”作为块名称。.
- 更改图层表后,调用ObjectARX全局函数applyCurDwgLayerTableChanges()。
此功能将强制AutoCAD更新自身以使用对AutoCAD编辑器中当前在工程图中的任何图层表记录所做的任何更改.
命令 "SETLAYER":
在acrxEntryPoint.cpp中通过名称AsdkStep03_SETLAYER()创建一个函数,该命令将在执行命令SETLAYER时调用。
在函数AsdkStep03_SETLAYER()中实现以下内容(该函数将更改“ EMPLOYEE”块引用的层)。
算法
- 打开当前工作数据库的块表
- 获取MODEL SPACE块表记录(AcDbBlockTable::getAt(),
ACDB_MODEL_SPACE )
-
获取一个块表记录迭代器(AcDbBlockTableRecordIterator,AcDbBlockTableRecord :: newIterator())以遍历MODEL SPACE块表记录.
- 遍历MODEL_SPACE(AcDbBlockTableRecordIterator::start(),
AcDbBlockTableRecordIterator::done(), AcDbBlockTableRecordIterator::step()).
- 要打开对象以进行读取或写入操作,请使用acdbOpenObject()。
- 获取实体(AcDbBlockTableRecordIterator :: getEntity())。
- 检查实体是否为块引用(pEnt-> isA()!=
AcDbBlockReference :: desc())。
-
获取引用的块表记录(AcDbBlockReference :: blockTableRecord()),然后检查块表记录的名称是否为“ EMPLOYEE”。
- 更改图层(setLayer())
-
不要忘记关闭任何打开的对象并删除迭代器!
尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。
如果卡住,则可以打开
Step03解决的项目
并研究acrxEntryPoint.cpp文件中的代码.
|