将块中的文字设置成属性,即实现块中文字可拖动的功能

bool CInsertTyDlg::AlterDefinition(AcDbBlockReference *pRef, AcDbObjectId objId)
{
AcDbBlockTableRecord *pBlkTabRcd = NULL;
acdbOpenObject(pBlkTabRcd, objId, AcDb::kForWrite);
if (pBlkTabRcd->hasAttributeDefinitions())
{
AcDbBlockTableRecordIterator *pItr = NULL;
pBlkTabRcd->newIterator(pItr);
AcDbEntity *pEnt = NULL;
for (pItr->start(); !pItr->done(); pItr->step())
{
pItr->getEntity(pEnt, AcDb::kForWrite);
AcDbAttributeDefinition *pAttDef = NULL;
pAttDef = AcDbAttributeDefinition::cast(pEnt);
if (pAttDef != NULL)
{
AcDbAttribute *pAtt = new AcDbAttribute();
pAtt->setPropertiesFrom(pAttDef);
pAtt->setInvisible(pAttDef->isInvisible());
AcGePoint3d ptBase = pAttDef->position();
ptBase += pRef->position().asVector();
pAtt->setPosition(ptBase);
pAtt->setHeight(pAttDef->height());
pAtt->setRotation(pAttDef->rotation());
pAtt->setTag(pAttDef->tag());
CString str = pAttDef->textString();
pAtt->setTextString(str);
pRef->appendAttribute(pAtt);
pAtt->close();
}
pEnt->close();
pAttDef->close();
}
delete pItr;
}
pRef->close();
pBlkTabRcd->close();
return true;
}

 

AcDbAttributeDefinition *pAttDef = new AcDbAttributeDefinition();
pAttDef->setPosition(ptInsert);
pAttDef->setTag(strProperty);
pAttDef->setTextString(strValue);
pAttDef->setTextStyle(textId);
pAttDef->setHeight(pText->height());
pBlkTabRcd->appendAcDbEntity(pAttDef);
pAttDef->close();
pText->erase();

 

posted @ 2015-12-09 15:28  xzh1993  阅读(928)  评论(0编辑  收藏  举报