通过名称“ ADDENTRY”,“ LISTENTRIES”和“ REMOVEENTRY”创建新命令".

命令的执行:


命令 "ADDENTRY":

在acrxEntryPoint.cpp中通过名称AsdkStep04_ADDENTRY()创建一个函数,该命令将在执行命令ADDENTRY时调用。 在函数AsdkStep04_ADDENTRY()中实现以下内容。

算法

  1. 提示用户输入雇员姓名(acedGetString())。
  2. 从当前的工作数据库(AcDbDictionary,AcDbDatabase :: getNamedObjectsDictionary())获取命名对象字典。
  3. 检查“ ASDK_EMPLOYEE_DICTIONARY”是否已经在NOD中(AcDbDictionary :: getAt())。
  4. 如果“ ASDK_EMPLOYEE_DICTIONARY”基本级别不在NOD中,则使用键“ ASDK_EMPLOYEE_DICTIONARY”创建一个新的AcDbDictionary,并将其添加到命名对象字典中(新的AcDbDictionary,AcDbDictionary :: setAt())。
  5. 检查员工名称是否已经在“ ASDK_EMPLOYEE_DICTIONARY”词典中.
  6. 如果不存在员工词典,则创建一个新的AcDbXrecord,并将其添加到“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary :: setAt())。
  7. 如果创建,请不要忘记关闭命名对象字典,“ ASDK_EMPLOYEE_DICTIONARY”和Xrecord。.
  8. 使用AcDbXrecord需要包含文件 <dbxrecrd.h>. 尽管您不必包括它,如先前在 ObjectARX标头.

命令 "LISTENTRIES":

在acrxEntryPoint.cpp中通过名称AsdkStep04_LISTENTRIES()创建一个函数,该函数将在执行LISTENTRIES命令时调用。 在函数AsdkStep04_LISTENTRIES()中实现以下内容。

算法

  1. 从当前的工作数据库(AcDbDictionary,AcDbDatabase :: getNamedObjectsDictionary())获取命名对象字典。
  2. 获取“ ASDK_EMPLOYEE_DICTIONARY”字典(AcDbDictionary :: getAt())。
  3. 遍历“ ASDK_EMPLOYEE_DICTIONARY”并打印出字典键(员工姓名)。
    1. 创建一个新的迭代器(AcDbDictionary :: newIterator(),AcDbDictionaryIterator)。
    2. 遍历“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionaryIterator :: done(),AcDbDictionaryIterator :: next())。
    3. 打印字典键(AcDbDictionaryIterator :: name())。
  4. 删除迭代器,别忘了关闭打开的对象.

命令 "REMOVEENTRY":

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

算法

  1. 从用户(acedGetString())获取员工姓名以将其删除.
  2. 从当前的工作数据库(AcDbDictionary,AcDbDatabase :: getNamedObjectsDictionary())获取命名对象字典。
  3. 获取“ ASDK_EMPLOYEE_DICTIONARY”字典(AcDbDictionary :: getAt())。
  4. 获取具有给定员工姓名的AcDbXrecord条目.
  5. 如果存在员工条目,则将其打开以进行写入,然后将其擦除(AcDbObject :: erase())。

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

 

NEXT: 测试ADDENTRY,LISTENTRIES和REMOVEENTRY命令

Implementing ADDENTRY, LISTENTRIES and REMOVEENTRY commands
Copyright ? 2013 Autodesk, Inc.