ObjectARX屬性塊參照遍歷屬性值實例代碼


屬性塊屬性值遍歷參考代碼.

 

		//獲取塊參照屬性
		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該塊參照無屬性!"));
		}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM