|
[code]ObjectARX CAD 扩展数据读写应用
// 为实体添加扩展数据
void addxdata()
{
int rc;
ads_name ent;
ads_point pickPt;
acedInitGet(RSG_NONULL, NULL);
rc = acedEntSel("\n请选择实体: ", ent, pickPt);
if (RTNORM == rc)
{
// 获取Id
AcDbObjectId entId;
acdbGetObjectId(entId, ent);
// 注册应用程序名称
acdbRegApp(_T("SHOUT"));
// 组织扩展数据
struct resbuf *rbl;
rbl = acutBuildList(AcDb::kDxfRegAppName, _T("SHOUT"), // 应用程序名称
AcDb::kDxfXdAsciiString, _T("202111"),
RTNONE);
// 打开选择的实体
AcDbEntity *pEnt;
acdbOpenAcDbEntity(pEnt, entId, AcDb::kForWrite);
// 添加扩展数据
pEnt->setXData(rbl);
// 清空结果缓冲区
acutRelRb(rbl);
pEnt->close();
}
acutPrintf(_T("\n扩展数据添加完毕!"));
}
// 显示实体的扩展数据
void printXdata()
{
struct resbuf *pRbx;
struct resbuf *pTemp;
char appName[] = {_T("SOUTH")};
ads_name ename;
AcDbObjectId entId;
AcDbObject *pObj;
ads_point pickPt;
// 选择要查看的实体
acedInitGet(RSG_NONULL, NULL);
acedEntSel(_T("\n请选择要查看的实体:"), ename, pickPt);
// 获得实体的ID
acdbGetObjectId(entId, ename);
// 打开实体
acdbOpenObject(pObj, entId, AcDb::kForRead);
// 获得扩展数据链表
pRbx = pObj->xData(appName);
// 关闭实体
pObj->clone();
// 遍历实体
pTemp = pRbx;
while(pTemp->rbnext)
{
switch (pTemp->restype)
{
case 1001: // 应用程序名
acutPrintf(_T("\n程序名:%s"), pTemp->resval.rstring);
break;
case 1000: // 字符串
acutPrintf(_T("\n字符串:%s"), pTemp->resval.rstring);
break;
case 1003: // 图层名
acutPrintf(_T("\n图层名:%s"), pTemp->resval.rstring);
break;
case 1040: // 一个实数
acutPrintf(_T("\n实数:%.2f"), pTemp->resval.rreal);
break;
}
// 指向下一个位置
pTemp = pTemp->rbnext;
}
// 释放结果缓冲区
acutRelRb(pRbx);
}
[/code] |
|