判断实体的类型 相关操作
desc() 静态函数,返回指定类的描述符。
cast() 静态函数,类型转换函数,将父类指针转换为指定类的指针,如果失败,返回NULL。
isKindOf() 虚函数判断是否指定类或它的派生类的实例。
isA() 虚函数,返回调用实例的类的描述符。
如有一个实体ID,但不知道是直线还是弧,可如下操作:
AcDbEntity* pEnt = NULL;
if (Acad::eOk != acdbOpenAcDbEntity(pEnt, Id, AcDb::kForRead))
{
acutprintf(_T(“打开失败”));
return;
}
if (pEnt->isKindOf(AcDbLine::desc())) // 直线
{
AcDbLine* pLine = AcDbLine::cast(pEnt);
}
else if (pEnt->isKindOf(AcDbArc::desc())) // 弧
{
AcDbArc* pArc = AcDbArc::cast(pEnt);
}
else
{
// 其他类型
}
// 使用完毕后要关闭
pEnt->close();
isKindOf()和isA()
调用isKindOf()进行类型判定时,是向下兼容的,即如果一个实体是AcDbLine类型,它从AcDbCurve派生,调用isKindOf(AcDbCruve::desc())时返回true。如果调用isA() == AcDbCurve::desc(),返回false,只有调用isA == AcDbLine::desc()时返回true。