实施实用程序功能后,通过名称CREATE和SETLAYER创建两个新命令.

要使用在上一个练习中创建的实用程序功能,请在acrxEntryPoint.cpp中添加以下内容. 
#include "utilities.h"

命令的执行:


命令 "CREATE":

在acrxEntryPoint.cpp中创建一个名为AsdkStep03_CREATE()的函数,当执行命令CREATE时将调用该函数。 在函数AsdkStep03_CREATE()中实现以下内容。

算法

  1. 该实现将调用我们的用户定义的实用程序函数createLayer(),以参数“ USER”作为图层名称,并调用用户定义的函数createBlockRecord(),以参数“ EMPLOYEE”作为块名称。.
  2. 更改图层表后,调用ObjectARX全局函数applyCurDwgLayerTableChanges()。 此功能将强制AutoCAD更新自身以使用对AutoCAD编辑器中当前在工程图中的任何图层表记录所做的任何更改.

命令 "SETLAYER":

在acrxEntryPoint.cpp中通过名称AsdkStep03_SETLAYER()创建一个函数,该命令将在执行命令SETLAYER时调用。 在函数AsdkStep03_SETLAYER()中实现以下内容(该函数将更改“ EMPLOYEE”块引用的层)。

算法

  1. 打开当前工作数据库的块表
  2. 获取MODEL SPACE块表记录(AcDbBlockTable::getAt(), ACDB_MODEL_SPACE )
  3. 获取一个块表记录迭代器(AcDbBlockTableRecordIterator,AcDbBlockTableRecord :: newIterator())以遍历MODEL SPACE块表记录.
  4. 遍历MODEL_SPACE(AcDbBlockTableRecordIterator::start(), AcDbBlockTableRecordIterator::done(), AcDbBlockTableRecordIterator::step()).
  5. 要打开对象以进行读取或写入操作,请使用acdbOpenObject()。
  6. 获取实体(AcDbBlockTableRecordIterator :: getEntity())。
  7. 检查实体是否为块引用(pEnt-> isA()!= AcDbBlockReference :: desc())。
  8. 获取引用的块表记录(AcDbBlockReference :: blockTableRecord()),然后检查块表记录的名称是否为“ EMPLOYEE”。
  9. 更改图层(setLayer())
  10. 不要忘记关闭任何打开的对象并删除迭代器!

尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。 如果卡住,则可以打开 Step03解决的项目 并研究acrxEntryPoint.cpp文件中的代码.

 

NEXT: 测试命令CREATE和SETLAYER

Implementation of CREATE and SETLAYER commands
Copyright ? 2013 Autodesk, Inc.