在Step05 ObjectARX项目中通过名称“ ADDENTRY”,“ LISTENTRIES”和“ REMOVEENTRY”创建新命令 .
命令的执行:
命令 "ADDDETAIL":
在acrxEntryPoint.cpp中创建一个名为AsdkStep05_ADDDETAIL()的函数,该函数将在执行命令“
ADDDETAIL”时调用。 在函数AsdkStep05_ADDDETAIL()中实现以下内容。
算法
- 让用户选择一个块引用(acedEntSel())。
-
将ads_name转换为AcDbObjectId(acdbGetObjectId())。
- 打开对象(acdbOpenAcDbObject())。
-
使用isKindOf()函数检查用户是否已选择块引用(AcDbBlockReference :: desc())
- 如果不是块引用,则返回.
-
输入员工数据作为员工编号; 员工多维数据集; 员工名字; 员工姓氏(acedGetInt(),acedGetString()).
- 获取EMPLOYEE块引用的扩展字典(AcDbObject :: extensionDictionary())。
-
如果EMPLOYEE块引用没有扩展字典,则创建一个(AcDbObject :: createExtensionDictionary())。
-
打开扩展字典。 如果扩展字典先前已删除,请打开已删除的扩展字典,因为我们可以重复使用扩展字典.
- 如果扩展字典被删除(AcDbObject :: isErased()),请取消删除它(AcDbObject
:: erase(Adesk :: kFalse))。
- 检索“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary ::
getAt())。
-
如果“ ASDK_EMLOYEE_DICTIONARY”
AcDbDictionary不存在,请创建“ ASDK_EMPLOYEE_DICTIONARY” AcDbDictionary,并将其添加到EMPLOYEE块参考扩展字典中.
-
检查“ ASDK_EMPLOYEE_DICTIONARY”中是否已存在AsdkEmployeeDetails对象(我们将AsdkEmployeeDetails对象存储在键“
DETAILS”下)。
-
如果AsdkEmployeeDetails对象不存在,请创建一个新的AsdkEmployeeDetails对象并设置其数据.
-
在“ ASDK_EMPLOYEE_DICTIONARY”中的键“ DETAILS”下添加一个新的AsdkEmployeeDetails对象。
命令 "LISTDETAILS":
在acrxEntryPoint.cpp中通过名称AsdkStep05_LISTDETAILS()创建一个函数,该函数将在执行“ LISTDETAILS”命令时调用。 实施以下.
算法
- 让用户选择一个块引用(acedEntSel())。
-
将ads_name转换为AcDbObjectId(acdbGetObjectId())。
- 打开对象(acdbOpenAcDbObject())。
-
使用isKindOf()函数检查用户是否已选择块引用(AcDbBlockReference :: desc())。
- 如果不是块引用,则返回.
- 检索块引用的扩展字典。
如果没有返回。 (AcDbObject :: extensionDictionary())。
-
检索“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary :: getAt())。 如果没有回报.
-
从“
DETAILS”键下的“ ASDK_EMPLOYEE_DICTIONARY”中检索AsdkEmployeeDetails对象.
- 检索AsdkEmployeeDetails对象数据并打印详细信息.
命令 "REMOVEDETAIL":
在为命令REMOVEDETAIL创建的函数中实现以下内容.
算法
- 让用户选择一个块引用(acedEntSel())。
-
将ads_name转换为AcDbObjectId(acdbGetObjectId())。
- 打开对象(acdbOpenAcDbObject())。
-
使用isKindOf()函数检查用户是否已选择块引用(AcDbBlockReference :: desc())。
- 如果不是块引用,则返回.
- 检索块引用的扩展字典。
如果没有返回。 (AcDbObject :: extensionDictionary())。
-
检索“ ASDK_EMPLOYEE_DICTIONARY”(AcDbDictionary :: getAt())。 如果没有回报.
-
从“
DETAILS”键下的“ ASDK_EMPLOYEE_DICTIONARY”中检索AsdkEmployeeDetails对象.
- 擦除AsdkEmployeeDetails对象(AcDbObject :: erase())。
- 如果字典不包含更多条目,请删除它们。 (AcDbDictionary :: numEntries())
尝试自己实现上述所有功能。 不要忘记ObjectARX联机帮助以获取快速参考。
如果卡住,则可以打开 Step05解决的项目
并研究Step05项目的acrxEntryPoint.cpp文件中的代码.
|