通过选择实体AcDbObjectId,怎么样得到AcDbBlockTableRecord的Id呀
<p>通过选择实体AcDbObjectId,怎么样得到AcDbBlockTableRecord的Id呀; </p><p>困扰了好几天了;</p> <p>是一般实体所在的BlockTableRecord还是块定义的BlockTableRecord</p><p>实体所在BlockTableRecord,打开实体AcDbEnitity::ownerId()</p><p>块定义:AcDbBlockReference::blockTableRecord()</p> <p>我用的是第一种;一般实体所在BlockTableRecord,现在还要用Id来打开Record;</p><p>acdbOpenObjectId()这个能实现吗?</p> <p>上一贴中的那个没有Id;</p><p>问一下各位,这样写能改变记录中的属性吗?</p><p>acdbOpenObject(pRec,RecId,AcDb::kForRead);<br/> if(pRec->hasAttributeDefinitions())<br/> {<br/> AcDbBlockTableRecordIterator *pIter;<br/> pRec->newIterator(pIter);<br/> AcDbEntity *pEnt;<br/> for(pIter->start();!pIter->done();pIter->step())<br/> {<br/> pIter->getEntity(pEnt,AcDb::kForRead);<br/> //acdbOpenObject(pEnt,blkDefId,AcDb::kForWrite);<br/> //检查是否是属性定义<br/> AcDbAttributeDefinition *pAttDef;<br/> pAttDef=AcDbAttributeDefinition::cast(pEnt);<br/> if(pAttDef!=NULL)<br/> {<br/> //pAttDef->setTag(Data);<br/> <br/> //创建一个新的属性对象<br/> AcDbAttribute *pAtt=new AcDbAttribute();<br/> //从属性定义获得属性对象的属性特性;<br/> pAtt->setPropertiesFrom(pAttDef);<br/> //设置属性对象的其它特性;<br/> pAtt->setInvisible(pAttDef->isInvisible());<br/> AcGePoint3d ptBase=pAttDef->position();<br/> ptBase+=pBlkRef->position().asVector();<br/> pAtt->setPosition(pAttDef->position());<br/> pAtt->setHeight(pAttDef->height());<br/> pAtt->setRotation(pAttDef->rotation());<br/> //获得属性对象的Tag、Prompt和TextString;<br/> char *pStr;<br/> pStr=pAttDef->tag();<br/> pAtt->setTag("123456789");</p><p> pAtt->setTextString("Yuan");</p><p> //向块参照追加属性对象;<br/> pBlkRef->appendAttribute(pAtt);<br/> pAtt->close();<br/> }<br/> pEnt->close();<br/> }<br/> delete(pIter);<br/> }<br/> pRec->close();</p> 学习ActiveX 的小白表示无助中
页:
[1]