请教各位,图中的块参照如何遍历?
<p>我现在要取图层上的所有块参照的块名,使用选择集没做出来,程序如下</p><p>rb.restype =2;<br/>char Sbuf;<br/>strcpy(Sbuf,"BLOCKREFERENCE");<br/>rb.resval.rstring = Sbuf;<br/>rb.rbnext = NULL;<br/>ads_name ss;<br/>acedSSGet("X",NULL,NULL,&rb,ss);</p><p>不知道失败的原因,只好采用遍历的方法,看到前面有帖子有遍历块表里的块名的方法,采用之,发现没办法用取到的块表块名来取块参照的块名,苦思两天了,不知道是为什么,请大家不吝赐教!!谢谢了!!</p><p> pTable->getAt(saBlockName.GetAt(i),Id);<br/> //AcDbEntity *pEnt;<br/> AcDbObject *pObj;<br/> Acad::ErrorStatus es;<br/> es = acdbOpenAcDbObject(pObj,Id,AcDb::kForRead);<br/> //es = acdbOpenObject(pEnt,Id,AcDb::kForRead);(使用时出错es ==eNotAnEntity,因此采用acdbOpenAcDbObject)<br/> //AcRxObject ent = pEnt->AcRxObject;<br/> AcDbBlockReference *pBlkRef=new AcDbBlockReference;//= (AcDbBlockReference*)pObj<br/> <br/> if(pBlkRef->isKindOf(AcDbBlockReference::desc()))<br/> {<br/> pBlkRef= AcDbBlockReference::cast(pObj);(!!!!!!!出错地点:pBlkRef的返回值为0)<br/> }<br/> <br/> AcDbObjectId pBlkTblRecId;<br/> //pBlkTblRecId = pBlkRef->blockTableRecord();<br/> pBlkTblRecId = pBlkRef->objectId();</p> AcDbBlockTableRecord *pBlockDef; <br/>acdbOpenObject(pBlockDef, blockId, AcDb::kForRead); <br/><br/>AcDbBlockTableRecordIterator *pIterator; <br/>pBlockDef->newIterator(pIterator); <br/>AcGePoint3d basePoint; <br/>AcDbEntity *pEnt; <br/>AcDbAttributeDefinition *pAttdef; <br/>for (pIterator->start(); !pIterator->done(); <br/>pIterator->step())//将source.dwg中所有的Attibute进行遍历 <br/>{ <br/>pIterator->getEntity(pEnt, AcDb::kForRead); <br/>pAttdef = AcDbAttributeDefinition::cast(pEnt); <br/>if (pAttdef != NULL && !pAttdef->isConstant()) { <br/>AcDbAttribute *pAtt = new AcDbAttribute(); <br/>pAtt->setPropertiesFrom(pAttdef); <br/>pAtt->setInvisible(pAttdef->isInvisible()); <br/>basePoint = pAttdef->position(); <br/>basePoint += pBlkRef->position().asVector(); <br/>pAtt->setPosition(basePoint); <br/>pAtt->setHeight(pAttdef->height()); <br/>pAtt->setRotation(pAttdef->rotation()); <br/>pAtt->setTag("Tag"); <br/>pAtt->setFieldLength(25); <br/>char *pStr = pAttdef->tag(); <br/>pAtt->setTag(pStr); <br/>acutDelString(pStr); <br/>pAtt->setFieldLength(pAttdef->fieldLength()); <br/>pAtt->setTextString("-"); <br/><br/>AcDbObjectId attId; <br/><br/>pBlkRef->appendAttribute(attId, pAtt); <br/>pAtt->close(); <br/>} <br/>pEnt->close(); // use pEnt... pAttdef might be NULL <br/>} <br/>delete pIterator; <p>和我的要求不一样啊,我要遍历的是块参照的块名啊,这个得到的是attibute,继续求答案,大侠们再帮帮忙啊,</p><p>而且我这边的基础不是很好,有没有介绍基础的好书推荐一下呢?</p>
页:
[1]