在Step05 ObjectARX项目中通过名称“ ADDENTRY”,“ LISTENTRIES”和“ REMOVEENTRY”创建新命令 .  


命令的执行:


命令 "ADDDETAIL":

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

算法

  1. 让用户选择一个块引用(acedEntSel())。
    1. 将ads_name转换为AcDbObjectId(acdbGetObjectId())。
    2. 打开对象(acdbOpenAcDbObject())。
    3. 使用isKindOf()函数检查用户是否已选择块引用(AcDbBlockReference :: desc())
    4. 如果不是块引用,则返回.
  2. 输入员工数据作为员工编号; 员工多维数据集; 员工名字; 员工姓氏(acedGetInt(),acedGetString()).
  3. 获取EMPLOYEE块引用的扩展字典(AcDbObject :: extensionDictionary())。
  4. 如果EMPLOYEE块引用没有扩展字典,则创建一个(AcDbObject :: createExtensionDictionary())。
  5. 打开扩展字典。 如果扩展字典先前已删除,请打开已删除的扩展字典,因为我们可以重复使用扩展字典.
  6. 如果扩展字典被删除(AcDbObject :: isErased()),请取消删除它(AcDbObject :: erase(Adesk :: kFalse))。
  7. 检索“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary :: getAt())。
    1. 如果“ ASDK_EMLOYEE_DICTIONARY” AcDbDictionary不存在,请创建“ ASDK_EMPLOYEE_DICTIONARY” AcDbDictionary,并将其添加到EMPLOYEE块参考扩展字典中.
  8. 检查“ ASDK_EMPLOYEE_DICTIONARY”中是否已存在AsdkEmployeeDetails对象(我们将AsdkEmployeeDetails对象存储在键“ DETAILS”下)。
    1. 如果AsdkEmployeeDetails对象不存在,请创建一个新的AsdkEmployeeDetails对象并设置其数据.
    2. 在“ ASDK_EMPLOYEE_DICTIONARY”中的键“ DETAILS”下添加一个新的AsdkEmployeeDetails对象。

命令 "LISTDETAILS":

在acrxEntryPoint.cpp中通过名称AsdkStep05_LISTDETAILS()创建一个函数,该函数将在执行“ LISTDETAILS”命令时调用。 实施以下.

算法

    1. 让用户选择一个块引用(acedEntSel())。
      1. 将ads_name转换为AcDbObjectId(acdbGetObjectId())。
      2. 打开对象(acdbOpenAcDbObject())。
      3. 使用isKindOf()函数检查用户是否已选择块引用(AcDbBlockReference :: desc())。
      4. 如果不是块引用,则返回.
    2. 检索块引用的扩展字典。 如果没有返回。 (AcDbObject :: extensionDictionary())。
    3. 检索“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary :: getAt())。 如果没有回报.
    4. 从“ DETAILS”键下的“ ASDK_EMPLOYEE_DICTIONARY”中检索AsdkEmployeeDetails对象.
    5. 检索AsdkEmployeeDetails对象数据并打印详细信息.

 


命令 "REMOVEDETAIL":

在为命令REMOVEDETAIL创建的函数中实现以下内容.

算法

  1. 让用户选择一个块引用(acedEntSel())。
    1. 将ads_name转换为AcDbObjectId(acdbGetObjectId())。
    2. 打开对象(acdbOpenAcDbObject())。
    3. 使用isKindOf()函数检查用户是否已选择块引用(AcDbBlockReference :: desc())。
    4. 如果不是块引用,则返回.
  2. 检索块引用的扩展字典。 如果没有返回。 (AcDbObject :: extensionDictionary())。
  3. 检索“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary :: getAt())。 如果没有回报.
  4. 从“ DETAILS”键下的“ ASDK_EMPLOYEE_DICTIONARY”中检索AsdkEmployeeDetails对象.
  5. 擦除AsdkEmployeeDetails对象(AcDbObject :: erase())。
  6. 如果字典不包含更多条目,请删除它们。 (AcDbDictionary :: numEntries())

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

 

NEXT: 加载ObjectDBX应用程序

Implementation of the ADDDETAIL, LISTDETAILS and REMOVEDETAIL commands
Copyright ? 2013 Autodesk, Inc.