屬性塊屬性值遍歷參考代碼.
//獲取塊參照屬性 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該塊參照無屬性!")); }