判断实体的类型 相关操作

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。

原文地址:https://www.cnblogs.com/xzh1993/p/4686310.html