-
使用ObjectARX向导创建从AcDbObjectReactor派生的对象反应堆类AsdkEmployeeReactor。 使用ObjectARX向导创建对象反应堆所涉及的步骤与创建编辑器反应堆相似。 你可以参考 添加并实现应用程序的编辑器反应器
有关完整的详细信息.
-
使用ObjectARX向导,实现基类(AcDbObjectReactor)函数opendForModify()。 检查由ObjectWizard创建的文件“
AsdkEmployeeReactor.h”和“ AsdkEmployeeReactor.cpp”。
- 将代码添加到openedForModify(),这样:
- 如果我们当前正在重新定位(m_doRepositioning ==
true),则返回。 (使用DocVars.docData()。<此处为适当的变量>)。
- 如果没有受监视的命令处于活动状态(m_editCommand
== false),则返回.
-
验证传入的AcDbObject是否为AcDbBlockReference实体(如果未返回).
-
检索AcDbBlockReference的名称。 为此,您将需要获取AcDbBlockTableRecord块定义AcDbBlockTableRecord并查询AcDbBlockTableRecord的名称。 (使用AcDbBlockReference
:: blockTableRecord())。 如果不是EMPLOYEE块引用,则返回.
-
将openedForModify()对象的位置存储在m_employeePositions(AcGePoint3dArray :: append())中。
-
将openedForModify()对象的objectId存储在m_changedObjects(AcDbObjectIdArray :: append())中。
- 创建一个AsdkEmployeeReactor反应器实例.
-
创建一个指向对象反应器的全局指针。 将该反应器如下放置在“
acrxEntryPoint.cpp”文件中:
AsdkEmployeeReactor *pEmployeeReactor =
NULL; |
-
当应用程序加载时,创建对象反应器的实例,将其放入CStep07App类的On_kInitAppMsg()方法中,"acrxEntryPoint.cpp".
pEmployeeReactor = new
AsdkEmployeeReactor(); |
-
如果应用程序卸载,请删除对象反应堆。 将以下内容放入CStep07App类的On_kUnloadAppMsg()方法中, "acrxEntryPoint.cpp".
NOTE:
在这里,我们创建一个AsdkEmployeeReactor(一个AcDbObjectReactor对象)的全局实例,正如您稍后将看到的,我们将此实例附加到EMPLOYEE块引用。 我们还可以创建AsdkEmployeeReactor的新实例,并将一个实例附加到找到的每个EMPLOYEE块引用中。 我们只希望您知道AcDbObjectReactor可以附加到多个对象上.
尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。 如果卡住,则可以打开
Step07解决的项目
并研究Step07项目的“ AsdkEmployeeReactor.cpp”和“ AsdkEmployeeReactor.h”文件中的代码.
|