天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 134|回复: 0

OBJECT ARX 扩展数据 使用

[复制链接]
  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 20 天

    [LV.4]偶尔看看III

    115

    主题

    11

    回帖

    1393

    积分

    管理员

    积分
    1393
    QQ
    发表于 2024-5-2 22:51:55 | 显示全部楼层 |阅读模式
    1. 添加扩展数据======================
    2. static void TESTaddxdatacmd(){
    3. ads采用name en;
    4. ads采用point pt;
    5. 选择要添加扩展数据的对象
    6. if(acedEntSel(采用T("\n选择要添加扩展数据的实体"),en,pt) != RTNORM){
    7. return;
    8. }
    9. AcDbObjectId entId;
    10. Acad::ErrorStatus es = acdbGetObjectId(entId,en);
    11. 扩展数据的内容
    12. struct resbuf* pRb;
    13. 注册应用程序名称
    14. acdbRegApp(采用T("XData"));
    15. CString strAppName(采用T("XData"));;
    16. CString str(采用T("hello"));
    17. 创建结果缓冲区链表
    18. pRb = acutBuildList(AcDb::kDxfRegAppName,strAppName,
    19. AcDb::kDxfXdAsciiString,str,
    20. AcDb::kDxfXdInteger32,2,
    21. AcDb::kDxfXdReal,3.14,
    22. AcDb::kDxfXdWorldXCoord,pt,
    23. RTNONE);
    24. 为选择的实体添加扩展数据
    25. AcDbEntity* pEnt;
    26. acdbOpenAcDbEntity(pEnt,entId,AcDb::kForWrite);
    27. struct resbuf* pTemp;
    28. pTemp = pEnt->xData(采用T("XData"));
    29. if(pTemp != NULL){如果已经包含扩展数据,不再重复添加
    30. acutRelRb(pTemp);
    31. acutPrintf(采用T("它已经包含了扩展数据"));
    32. }
    33. else{
    34. pEnt->setXData(pRb);
    35. acutPrintf(采用T("\n扩展数据已赋值"));
    36. }
    37. pEnt->close();
    38. acutRelRb(pRb);
    39. }
    40. //查看扩展数据==================
    41. static void TESTviewxdatacmd(){
    42. 提示用户选择要查看的扩展数据对象
    43. ads采用name en;
    44. ads采用point pt;
    45. if(acedEntSel(采用T("\n选择要查看的扩展数据实体"),en,pt) != RTNORM){
    46. return;
    47. }
    48. AcDbObjectId entId;
    49. Acad::ErrorStatus es = acdbGetObjectId(entId,en);
    50. 打开图形对象,查看是否包含扩展数据
    51. AcDbEntity* pEnt;
    52. acdbOpenAcDbEntity(pEnt,entId,AcDb::kForRead);
    53. struct resbuf* pRb;
    54. pRb = pEnt->xData(采用T("XData"));
    55. pEnt->close();
    56. if(pRb != NULL){
    57. 在命令行显示所有的扩展数据
    58. struct resbuf* pTemp;
    59. pTemp = pRb;
    60. 首先要跳过应用程序名称
    61. pTemp = pTemp->rbnext;
    62. acutPrintf(采用T("\n字符串类型的扩展数据是:%s"),pTemp->resval.rstring);
    63. pTemp = pTemp->rbnext;
    64. acutPrintf(采用T("\n整数类型的扩展数据是:%d"),pTemp->resval.rint);
    65. pTemp = pTemp->rbnext;
    66. acutPrintf(采用T("\n实数类型的扩展数据是:%.2f"),pTemp->resval.rreal);
    67. pTemp = pTemp->rbnext;
    68. acutPrintf(采用T("\n点坐标类型的扩展数据是:%.2f,%.2f,%.2f"),pTemp->resval.rpoint[X],pTemp->resval.rpoint[Y],pTemp->resval.rpoint[Z]);
    69. acutRelRb(pRb);
    70. }
    71. else{
    72. acutPrintf(采用T("\n该实体不包含任何的扩展数据"));
    73. }
    74. }
    75. //添加扩展字典======================
    76. static void TESTaddrcdcmd(){
    77. ads采用name en;
    78. ads采用point pt;
    79. if(acedEntSel(采用T("\n选择要添加扩展记录的实体"),en,pt) != RTNORM){
    80. return;
    81. }
    82. AcDbObjectId entId;要添加扩展记录实体ID
    83. Acad::ErrorStatus es = acdbGetObjectId(entId,en);
    84. AcDbXrecord* pXrec = new AcDbXrecord;//= new AcDbxRecord;
    85. AcDbObject* pObj;
    86. AcDbObjectId dictObjId,xRecObjId;
    87. AcDbDictionary* pDict;
    88. 要在扩展记录中保存的字符串
    89. struct resbuf* pRb;
    90. /向实体中添加扩展字典
    91. acdbOpenObject(pObj,entId,AcDb::kForWrite);
    92. pObj->createExtensionDictionary();
    93. dictObjId = pObj->extensionDictionary();
    94. pObj->close();
    95. 向扩展字典中添加一条记录
    96. acdbOpenObject(pDict,dictObjId,AcDb::kForWrite);
    97. pDict->setAt(采用T("XRecord"),pXrec,xRecObjId);
    98. pDict->close();
    99. 设置扩展记录的内容
    100. pRb = acutBuildList(AcDb::kDxfText,采用T("\n直线"),
    101. AcDb::kDxfInt32,12,
    102. AcDb::kDxfReal,3.14,
    103. AcDb::kDxfXCoord,pt,
    104. RTNONE);
    105. pXrec->setFromRbChain(*pRb);
    106. pXrec->close();
    107. acutRelRb(pRb);
    108. }
    109. //查看扩展字典==============
    110. static void TESTviewrcdcmd(){
    111. 提示用户选择要查看扩展记录的图形对象
    112. ads采用name en;
    113. ads采用point pt;
    114. if(acedEntSel(采用T("\n选择要查看扩展记录的实体"),en,pt) != RTNORM)
    115. return;
    116. AcDbObjectId entId;
    117. Acad::ErrorStatus es = acdbGetObjectId(entId,en);
    118. 打开图形对象,获得实体扩展字典的OBJID
    119. AcDbEntity* pEnt;
    120. acdbOpenAcDbEntity(pEnt,entId,AcDb::kForRead);
    121. AcDbObjectId dictObjId = pEnt->extensionDictionary();
    122. pEnt->close();
    123. 查看实体是否包含扩展字典
    124. if(dictObjId == AcDbObjectId::kNull){
    125. acutPrintf(采用T("\n所选择的实体不包含扩展字典"));
    126. return;
    127. }
    128. 打开扩展字典,获得与关键字'XRECORD'关联的扩展记录
    129. AcDbDictionary* pDict;
    130. AcDbXrecord* pXrec;
    131. acdbOpenObject(pDict,dictObjId,AcDb::kForRead);
    132. pDict->getAt(采用T("XRecord"),(AcDbObject* &)pXrec,AcDb::kForRead);
    133. pDict->close();
    134. 获得扩展记录的数据链表并关闭扩展数据对象
    135. struct resbuf* pRb;
    136. pXrec->rbChain(&pRb);
    137. pXrec->close();
    138. if(pRb != NULL){
    139. 在命令行显示所有的扩展数据
    140. struct resbuf* pTemp;
    141. pTemp = pRb;
    142. acutPrintf(采用T("\n字符串类型的扩展数据是:%s"),pTemp->resval.rstring);
    143. pTemp = pTemp->rbnext;
    144. acutPrintf(采用T("\n整数类型的扩展数据是:%d"),pTemp->resval.rint);
    145. pTemp = pTemp->rbnext;
    146. acutPrintf(采用T("\n实数类型的扩展数据是:%.2f"),pTemp->resval.rreal);
    147. pTemp = pTemp->rbnext;
    148. acutPrintf(采用T("\n点坐标类型的扩展数据是:%.2f,%.2f,%.2f"),pTemp->resval.rpoint[X],pTemp->resval.rpoint[Y],pTemp->resval.rpoint[Z]);
    149. acutRelRb(pRb);
    150. }
    151. else{
    152. acutPrintf(采用T("\n没有找到它的扩展数据"));
    153. }
    154. }
    复制代码

     

     

     

     

    OBJECT ARX 扩展数据 使用
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-5 12:32 , Processed in 0.135304 second(s), 28 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表