通过名称“ ADDENTRY”,“ LISTENTRIES”和“ REMOVEENTRY”创建新命令".
命令的执行:
命令 "ADDENTRY":
在acrxEntryPoint.cpp中通过名称AsdkStep04_ADDENTRY()创建一个函数,该命令将在执行命令ADDENTRY时调用。
在函数AsdkStep04_ADDENTRY()中实现以下内容。
算法
- 提示用户输入雇员姓名(acedGetString())。
- 从当前的工作数据库(AcDbDictionary,AcDbDatabase
:: getNamedObjectsDictionary())获取命名对象字典。
-
检查“ ASDK_EMPLOYEE_DICTIONARY”是否已经在NOD中(AcDbDictionary :: getAt())。
-
如果“ ASDK_EMPLOYEE_DICTIONARY”基本级别不在NOD中,则使用键“ ASDK_EMPLOYEE_DICTIONARY”创建一个新的AcDbDictionary,并将其添加到命名对象字典中(新的AcDbDictionary,AcDbDictionary ::
setAt())。
- 检查员工名称是否已经在“
ASDK_EMPLOYEE_DICTIONARY”词典中.
-
如果不存在员工词典,则创建一个新的AcDbXrecord,并将其添加到“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary ::
setAt())。
-
如果创建,请不要忘记关闭命名对象字典,“ ASDK_EMPLOYEE_DICTIONARY”和Xrecord。.
-
使用AcDbXrecord需要包含文件 <dbxrecrd.h>. 尽管您不必包括它,如先前在
ObjectARX标头.
命令 "LISTENTRIES":
在acrxEntryPoint.cpp中通过名称AsdkStep04_LISTENTRIES()创建一个函数,该函数将在执行LISTENTRIES命令时调用。
在函数AsdkStep04_LISTENTRIES()中实现以下内容。
算法
- 从当前的工作数据库(AcDbDictionary,AcDbDatabase
:: getNamedObjectsDictionary())获取命名对象字典。
- 获取“ ASDK_EMPLOYEE_DICTIONARY”字典(AcDbDictionary
:: getAt())。
-
遍历“ ASDK_EMPLOYEE_DICTIONARY”并打印出字典键(员工姓名)。
- 创建一个新的迭代器(AcDbDictionary :: newIterator(),AcDbDictionaryIterator)。
- 遍历“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionaryIterator :: done(),AcDbDictionaryIterator
:: next())。
- 打印字典键(AcDbDictionaryIterator :: name())。
- 删除迭代器,别忘了关闭打开的对象.
命令 "REMOVEENTRY":
在acrxEntryPoint.cpp中创建一个名为AsdkStep04_REMOVEENTRY()的函数,该函数将在执行REMOVEENTRY命令时调用。
在函数AsdkStep04_REMOVEENTRY()中实现以下内容。
算法
-
从用户(acedGetString())获取员工姓名以将其删除.
- 从当前的工作数据库(AcDbDictionary,AcDbDatabase
:: getNamedObjectsDictionary())获取命名对象字典。
- 获取“ ASDK_EMPLOYEE_DICTIONARY”字典(AcDbDictionary
:: getAt())。
-
获取具有给定员工姓名的AcDbXrecord条目.
-
如果存在员工条目,则将其打开以进行写入,然后将其擦除(AcDbObject :: erase())。
尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。
如果卡住,则可以打开
Step04解决的项目
并研究acrxEntryPoint.cpp文件中的代码.
|