下面介绍两种: 一种是在ARX程序中,一种是在CAD中,获取DXF信息
1. 在CAD中,可以在Command中输入以下信息,然后点选实体,就可以获取到实体的信息:
命令: (entget(car(entsel)))
命令: (entsel)
选择对象: (<图元名: 7ffffb05380> (792.588 573.405 0.0))
命令: (car(entsel))
选择对象: <图元名: 7ffffb05380>
命令: (entget(car(entsel)))
选择对象: ((-1 . <图元名: 7ffffb05380>) (0 . "TEXT") (330 . <图元名: 7ffffb039f0>) (5 .
"140") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "注释层") (100 .
"AcDbText") (10 789.655 572.652 0.0) (40 . 2.5) (1 . "未命名") (50 . 0.0) (41 .
1.0) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0
0.0 1.0) (100 . "AcDbText") (73 . 0))
2. 在Arx程序中,通过这这个函数实现获取
函数:acdbEntGet
struct resbuf *
acdbEntGet(const ads_name ent);
Retrieves the specified entity from the drawing database and returns its definition data as a linked list of result buffers. This function is used also to examine dictionaries.
例如,在已知objid情况下,获取信息:
ads_name ads; acdbGetAdsName(ads, objid); resbuf* pResbuf = acdbEntGet(ads); resbuf* pNext = pResbuf; for (; pNext != NULL; pNext=pNext->rbnext) { if (pNext->restype == 0) { // DXF == 0时,内容为String型,代表类型名称,例如 TEXT break; } }
Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源
————————————————
版权声明:本文为CSDN博主「春夜喜雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chunyexiyu/article/details/38421409
ObjectArx查看实体DXF信息
-
在cad中使用
(entget(car(entsel)))
命令查看实体DXF信息 -
在arx中使用
acdbEntGet
函数查看实体DXF信息()
void ZffChap5EntInfo() { // 提示用户选择实体 ads_name entName; ads_point pt; if (acedEntSel(TEXT("\n选择实体:"), entName, pt) != RTNORM) return; struct resbuf *rbEnt; // 保存实体数据的结果缓冲区 struct resbuf *rb; // 用于遍历rbEnt的结果缓冲区 // 从entName获得保存实体数据的结果缓冲区 rbEnt = acdbEntGet(entName); rb = rbEnt; while (rb != NULL) { switch (rb->restype) { case -1: // 图元名 acutPrintf(TEXT("\n图元名: %x"), rb->resval.rstring); break; case 0: // 图元类型 acutPrintf(TEXT("\n图元类型: %s"), rb->resval.rstring); break; case 8: // 图层 acutPrintf(TEXT("\n图层:%s"), rb->resval.rstring); break; case 10: // 圆心 acutPrintf(TEXT("\n圆心:(%.2f, %.2f, %.2f)"), rb->resval.rpoint[X], rb->resval.rpoint[Y], rb->resval.rpoint[Z]); break; case 40: // 半径 acutPrintf(TEXT("\n半径:%.4f"), rb->resval.rreal); break; case 210: // 圆所在平面的法向矢量 acutPrintf(TEXT("\n平面的法向矢量:(%.2f, %.2f, %.2f)"), rb->resval.rpoint[X], rb->resval.rpoint[Y], rb->resval.rpoint[Z]); break; default: break; } // switch rb = rb->rbnext; // 切换到下一个节点 } // while if (rbEnt != NULL) { acutRelRb(rbEnt); } }
————————————————
版权声明:本文为CSDN博主「A彡安静氵」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/phd17621680432/article/details/102607902
void ShowDxfAndClassName()
{
const TCHAR *szTempPrompts[2]={_T("\n选择一个元素<退出>:"), _T("") };
ads_name ssEnt;
if (RTNORM != acedSSGet(_T(":$:S"), szTempPrompts, NULL, NULL, ssEnt))
return;
ads_name ent;
acedSSName(ssEnt, 0L, ent);
resbuf* pResbuf = acdbEntGet(ent);
resbuf* pNext = pResbuf;
for (; pNext != NULL; pNext=pNext->rbnext)
{
if (pNext->restype == 0)
{
acutPrintf(_T("\nDXF name:%s"), pNext->resval.rstring);
break;
}
}
AcDbObjectId idEnt;
acdbGetObjectId(idEnt, ent);
AcDbEntity *pEnt = NULL;
if (Acad::eOk == acdbOpenAcDbEntity(pEnt, idEnt, AcDb::kForWrite))
{
if (NULL != pEnt)
{
acutPrintf(_T("\nclassName:%s"), pEnt->isA()->name());
pEnt->close();
}
}
}
————————————————
版权声明:本文为CSDN博主「Time2017」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Time2017/article/details/103665965
文章评论