I need to update the tag, prompt, value tab in the current block attribute.
I can change the tag and the value tab but not the prompt.
Any help will be appreciated.
The approach am taking is;
AcDbDatabase *dwgDb;
AcDbBlockTable *pBlockTbl;
AcDbBlockTableRecord *pModelSpaceTblRcd;
AcDbBlockTableRecordIterator *pModelSpaceItr;
AcDbEntity *pEntity;
AcDbBlockReference *pBlockRef;
AcDbAttribute *pAttribute;
AcDbObjectIterator *pAttrItr;
AcDbObject *pObject;
TCHAR tagBuffer[SINGLE_LINE_INPUT_LENGTH_SHORT];
// Prepare attribute location measurements
AcDbObjectId idOfEntity;
dwgDb = NULL;
dwgDb = acdbHostApplicationServices()->workingDatabase();
if (dwgDb == NULL)
{ AfxMessageBox(_T("Internal Error !"));
return false; }
dwgDb->getSymbolTable(pBlockTbl, AcDb::kForWrite);
pBlockTbl->getAt(ACDB_MODEL_SPACE, pModelSpaceTblRcd, AcDb::kForWrite);
pBlockTbl->close();
// Get an iterator to that we can iterate / pinpoint
// the desired entity via the objectID
pModelSpaceTblRcd->newIterator(pModelSpaceItr);
// Go to the block reference / objectID
if(pModelSpaceItr->seek(thePANBLKBlockId) != Acad::eOk)
{ AfxMessageBox(_T("Internal Error !"));
delete pModelSpaceItr; pModelSpaceTblRcd->close(); return false; }
// Access the block reference
pModelSpaceItr->getEntity(pEntity, AcDb::kForWrite);
pBlockRef = AcDbBlockReference::cast(pEntity);
// Prepare iterator to move through block's attributes
pAttrItr = pBlockRef->attributeIterator();
for(pAttrItr->start();
!pAttrItr->done();
pAttrItr->step())
{
acdbOpenAcDbObject(pObject, pAttrItr->objectId(), AcDb::kForWrite);
pAttribute = AcDbAttribute::cast(pObject);
_tcscpy_s(tagBuffer, SINGLE_LINE_INPUT_LENGTH_SHORT, pAttribute->tag());
pAttribute->upgradeOpen();
// LEFTBFHGT
if(_tcscmp(tagBuffer, _T("LEFTBFHGT")) == 0 ||
_tcscmp(tagBuffer, _T("LEFTHEIGHT")) == 0 )
{
TCHAR attrText[COMMENT_LENGTH_SHORT];
_tcscpy_s(attrText, COMMENT_LENGTH_SHORT, pAttribute->textString() );
AcDbAttributeDefinition *tempAttrDefinition = new AcDbAttributeDefinition();
tempAttrDefinition->setPosition(pAttribute->position() );
tempAttrDefinition->setTag(_T("LEFTFFHGHT"));
tempAttrDefinition->setPrompt(_T("Left Front Face Height."));
tempAttrDefinition->setTextStyle(idTextStyleLeroy);
tempAttrDefinition->setHeight(.32);
tempAttrDefinition->setRotation(0);
pAttribute->setAttributeFromBlock(tempAttrDefinition, pBlockRef->blockTransform() );
pAttribute->transformBy(pBlockRef->blockTransform() );
pAttribute->downgradeOpen();
pModelSpaceTblRcd->appendAcDbEntity(pEntity);
pBlockTbl->upgradeOpen();
pModelSpaceTblRcd->upgradeOpen();
tempAttrDefinition->close();
}
pAttribute->close();
}
// Free the attribute iterator
delete pAttrItr;
pBlockRef->close();
delete pModelSpaceItr;
pModelSpaceTblRcd->close();