1. 使用ObjectARX向导创建从AcDbObjectReactor派生的对象反应堆类AsdkEmployeeReactor。 使用ObjectARX向导创建对象反应堆所涉及的步骤与创建编辑器反应堆相似。 你可以参考 添加并实现应用程序的编辑器反应器 有关完整的详细信息.
  2. 使用ObjectARX向导,实现基类(AcDbObjectReactor)函数opendForModify()。 检查由ObjectWizard创建的文件“ AsdkEmployeeReactor.h”和“ AsdkEmployeeReactor.cpp”。
  3. 将代码添加到openedForModify(),这样:
    1. 如果我们当前正在重新定位(m_doRepositioning == true),则返回。 (使用DocVars.docData()。<此处为适当的变量>)。
    2. 如果没有受监视的命令处于活动状态(m_editCommand == false),则返回.
    3. 验证传入的AcDbObject是否为AcDbBlockReference实体(如果未返回).
    4. 检索AcDbBlockReference的名称。 为此,您将需要获取AcDbBlockTableRecord块定义AcDbBlockTableRecord并查询AcDbBlockTableRecord的名称。 (使用AcDbBlockReference :: blockTableRecord())。 如果不是EMPLOYEE块引用,则返回.
    5. 将openedForModify()对象的位置存储在m_employeePositions(AcGePoint3dArray :: append())中。
    6. 将openedForModify()对象的objectId存储在m_changedObjects(AcDbObjectIdArray :: append())中。
  4. 创建一个AsdkEmployeeReactor反应器实例.
    1. 创建一个指向对象反应器的全局指针。 将该反应器如下放置在“ acrxEntryPoint.cpp”文件中:
       
      AsdkEmployeeReactor *pEmployeeReactor = NULL;
       
    2. 当应用程序加载时,创建对象反应器的实例,将其放入CStep07App类的On_kInitAppMsg()方法中,"acrxEntryPoint.cpp".
       
      pEmployeeReactor = new AsdkEmployeeReactor();
       
    3. 如果应用程序卸载,请删除对象反应堆。 将以下内容放入CStep07App类的On_kUnloadAppMsg()方法中, "acrxEntryPoint.cpp".
       
      delete pEmployeeReactor;

      NOTE: 在这里,我们创建一个AsdkEmployeeReactor(一个AcDbObjectReactor对象)的全局实例,正如您稍后将看到的,我们将此实例附加到EMPLOYEE块引用。 我们还可以创建AsdkEmployeeReactor的新实例,并将一个实例附加到找到的每个EMPLOYEE块引用中。 我们只希望您知道AcDbObjectReactor可以附加到多个对象上.

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

 

NEXT: 实现实用程序功能

Add and implement an object reactor for the application
Copyright ? 2013 Autodesk, Inc.