屬性塊屬性值遍歷參考代碼.
//獲取塊參照屬性
ads_name ent;
ads_point pt;
if (RTNORM != acedEntSel(NULL,ent,pt))
{
acutPrintf(_T("\n未選擇有效對象!"));
return;
}
AcDbObjectId objId;
acdbGetObjectId(objId,ent);
AcDbObjectPointer<AcDbBlockReference> pBlkRef(objId,AcDb::kForRead);
if (Acad::eOk != pBlkRef.openStatus())
{
acutPrintf(_T("\n打開塊參照失敗,錯誤碼: %s "),pBlkRef.openStatus());
return;
}
//直接獲取圖塊的屬性迭代器
AcDbObjectIterator *pIter=pBlkRef->attributeIterator();
//無論圖塊是否有屬性,迭代器一般不會為NULL
if (NULL == pIter)
{
acutPrintf(_T("\n獲取屬性迭代器失敗!"));
return;
}
//設置判斷是否能獲取到屬性
bool bIsAttribBlock=false;
for (pIter->start();!pIter->done();pIter->step())
{
AcDbObjectId attribId=pIter->objectId();
AcDbObjectPointer<AcDbAttribute> pAttrib(attribId,AcDb::kForRead);
if (Acad::eOk != pAttrib.openStatus())
{
continue;
}
//方式一
/*
CString strTag;
strTag=pAttrib->tag();
CString strValue;
strValue=pAttrib->textString();
acutPrintf(_T("\n屬性名: %s 屬性值: %s"),strTag,strValue);
*/
//方式二
ACHAR *szTag=pAttrib->tag();
ACHAR *szValue=pAttrib->textString();
if (szTag!=NULL && szValue!=NULL)
{
acutPrintf(_T("\n屬性名: %s 屬性值: %s"),szTag,szValue);
}
else
{
acutPrintf(_T("\n獲取屬性值失敗!"),szTag,szValue);
}
if (szTag!=NULL)
{
acutDelString(szTag);
}
if (szValue!=NULL)
{
acutDelString(szValue);
}
//獲取到屬性,設置標志
bIsAttribBlock=true;
}
//釋放迭代器
delete pIter;
if (!bIsAttribBlock)
{
acutPrintf(_T("\n該塊參照無屬性!"));
}

