某些时候想在arx中获取到图元的DXF名称,如
AcDbCircle->CIRCLE
AcDbLine->LINE
也就是获取DXF组码的0对应的内容,通过两天的寻找,最后在ARX的例子中找到,下面的代码可以实现获取,有需要的人可拿去。
static void getEntityDXFName(void)
{
ads_name ent99;
ads_point pt99;
if(acedEntSel(_T("\n请选择对象:"),ent99,pt99)==RTNORM)
{
AcDbObjectId entId;
//获取图元ID
Acad::ErrorStatus es=acdbGetObjectId(entId,ent99);
if(es == Acad::eOk)
{
//以智能指针方式打开对象
AcDbObjectPointer<AcDbCurve> pCur(entId,AcDb::kForRead); //打开曲线物体
if(pCur.openStatus() != Acad::eOk)
{
acutPrintf(_T("\n无法读取点的信息!"));
return;
}
if(pCur->isKindOf(AcRxObject::desc()))
{
AcRxObject* obj = AcRxObject::cast(pCur);
AcRxClass* rxClass = obj->isA();
if (rxClass != NULL)
{
//CString DXFName = obj->isA()->name();
acutPrintf(_T("\n类型名:%s,DXF名:%s"),obj->isA()->name(),obj->isA()->dxfName());
}
}
}
}
else
{
acutPrintf(_T("\n您退出了命令!"));
}
}
代码中主要的部分就是首先要知道使用AcRxClass,而且派生于AcDbEntity的图元如何转化为AcRxClass
EData的方法
pEnt->isA()->dxfName()
objId.objectClass()->dxfName()
对象类型,AcRxClass::name就可以得到
arx显示实体的dxf名和类名
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();
}
}
}
文章评论