enum CenterType
{
CenterMark = 0,
CenterLine
};
AcString SmartCenters[] = { L"CenterMark", L"CenterLine" };
Acad::ErrorStatus getTypeOfSmartCenterObject(const AcDbObjectId& blockRefObjId, CenterType& type)
{
AcDbSmartObjectPointer pCenter(blockRefObjId, AcDb::kForRead, true);
if (pCenter.openStatus() != Acad::eOk)
return Acad::eNullEntityPointer;
AcDbObjectIdArray actionIds;
Acad::ErrorStatus err = AcDbAssocAction::getActionsDependentOnObject(pCenter, false, true, actionIds);
if (!eOkVerify(err))
return err;
for (int i = 0; i < actionIds.length(); i++)
{
AcDbObjectId actionBody = AcDbAssocAction::actionBody(actionIds[i]);
auto objClass = actionBody.objectClass();
AcString objClassName = objClass->name();
if (objClassName == L"AcDbCenterMarkActionBody")
{
type = CenterType::CenterMark;
return Acad::eOk;
}
else if (objClassName == L"AcDbCenterLineActionBody")
{
type = CenterType::CenterLine;
return Acad::eOk;
}
else;
}
return Acad::eNotApplicable;
}
void testIt()
{
ads_name ename;
ads_point pt;
AcDbObjectId objId = AcDbObjectId::kNull;
AcDbEntity* pEnt = nullptr;
if (RTNORM != acedEntSel(_T(""), ename, pt)) return;
if (!eOkVerify(acdbGetObjectId(objId, ename))) return;
if (!eOkVerify(acdbOpenAcDbEntity(pEnt, objId, AcDb::kForRead))) return;
//isCenterLineOrNot(pEnt);
CenterType type;
if (eOkVerify(getTypeOfSmartCenterObject(objId, type)))
{
acutPrintf(_T("CenterType : %s"), SmartCenters[type].kACharPtr());
}
}