TA的每日心情![](source/plugin/dsu_paulsign/img/emot/kx.gif) | 开心 昨天 15:23 |
---|
签到天数: 69 天 [LV.6]常住居民II
管理员
- 积分
- 2704
|
1、添加扩展数据
// 提示用户选择所要添加扩展数据的图形对象
ads_name en;
ads_point pt;
if (acedEntSel("\n选择所要添加扩展数据的实体:", en, pt) != RTNORM)
return;
AcDbObjectId entId;
Acad::ErrorStatus es = acdbGetObjectId(entId, en);
// 扩展数据的内容
struct resbuf* pRb;
char appName[] = {"XData"};
char typeName[] = {"道路中心线"};
// 注册应用程序名称
acdbRegApp("XData");
// 创建结果缓冲区链表
pRb = acutBuildList(AcDb::kDxfRegAppName, appName, // 应用程序名称
AcDb::kDxfXdAsciiString, typeName, // 字符串
AcDb::kDxfXdInteger32, 2, // 整数
AcDb::kDxfXdReal, 3.14, // 实数
AcDb::kDxfXdWorldXCoord, pt, // 点坐 标值
RTNONE);
// 为选择的实体添加扩展数据
AcDbEntity *pEnt;
acdbOpenAcDbEntity(pEnt, entId, AcDb::kForWrite);
struct resbuf *pTemp;
pTemp = pEnt->xData("XData");
if (pTemp != NULL) // 如果已经包含扩展数据,就不再添加新的 扩展数据
{
acutRelRb(pTemp);
acutPrintf("\n所选择的实体已经包含扩展数据!");
}
else
{
pEnt->setXData(pRb);
}
pEnt->close();
acutRelRb(pRb); //释放缓冲区
2、显示扩展数据
// 提示用户选择所要查看扩展数据的图形对象
ads_name en;
ads_point pt;
if (acedEntSel("\n选择所要查看扩展数据的实体:", en, pt) != RTNORM)
return;
AcDbObjectId entId;
Acad::ErrorStatus es = acdbGetObjectId(entId, en);
// 打开图形对象,查看是否包含扩展数据
AcDbEntity *pEnt;
acdbOpenAcDbEntity(pEnt, entId, AcDb::kForRead);
struct resbuf *pRb;
pRb = pEnt->xData("XData");
pEnt->close();
if (pRb != NULL)
{
// 在命令行显示所有的扩展数据
struct resbuf *pTemp;
pTemp = pRb;
// 首先要跳过应用程序的名称这一项
pTemp = pTemp->rbnext;
acutPrintf("\n字符串类型的扩展数据是:%s", pTemp->resval.rstring);
pTemp = pTemp->rbnext;
acutPrintf("\n整数类型的扩展数据是:%d", pTemp->resval.rint);
pTemp = pTemp->rbnext;
acutPrintf("\n实数类型的扩展数据是:%.2f", pTemp->resval.rreal);
pTemp = pTemp->rbnext;
acutPrintf("\n点坐标类型的扩展数据是:(%.2f, %.2f, %.2f)",
pTemp->resval.rpoint[X], pTemp->resval.rpoint[Y], pTemp->resval.rpoint[Z]);
acutRelRb(pRb);
}
else
{
acutPrintf("\n所选择的实体不包含任何的扩展数据!");
} |
|