wuyating24 发表于 2007-7-17 17:34:00

请教各位,图中的块参照如何遍历?

<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,&amp;rb,ss);</p><p>不知道失败的原因,只好采用遍历的方法,看到前面有帖子有遍历块表里的块名的方法,采用之,发现没办法用取到的块表块名来取块参照的块名,苦思两天了,不知道是为什么,请大家不吝赐教!!谢谢了!!</p><p>&nbsp;&nbsp; pTable-&gt;getAt(saBlockName.GetAt(i),Id);<br/>&nbsp;&nbsp;&nbsp; //AcDbEntity *pEnt;<br/>&nbsp;&nbsp;&nbsp; AcDbObject *pObj;<br/>&nbsp;&nbsp;&nbsp; Acad::ErrorStatus es;<br/>&nbsp;&nbsp;&nbsp; es = acdbOpenAcDbObject(pObj,Id,AcDb::kForRead);<br/>&nbsp;&nbsp;&nbsp; //es = acdbOpenObject(pEnt,Id,AcDb::kForRead);(使用时出错es ==eNotAnEntity,因此采用acdbOpenAcDbObject)<br/>&nbsp;&nbsp;&nbsp; //AcRxObject ent = pEnt-&gt;AcRxObject;<br/>&nbsp;&nbsp;&nbsp; AcDbBlockReference *pBlkRef=new AcDbBlockReference;//= (AcDbBlockReference*)pObj<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; if(pBlkRef-&gt;isKindOf(AcDbBlockReference::desc()))<br/>&nbsp;&nbsp;&nbsp; {<br/>&nbsp;&nbsp;&nbsp;&nbsp;pBlkRef= AcDbBlockReference::cast(pObj);(!!!!!!!出错地点:pBlkRef的返回值为0)<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; AcDbObjectId pBlkTblRecId;<br/>&nbsp;&nbsp;&nbsp; //pBlkTblRecId = pBlkRef-&gt;blockTableRecord();<br/>&nbsp;&nbsp;&nbsp; pBlkTblRecId = pBlkRef-&gt;objectId();</p>

gis-liang 发表于 2007-7-17 21:34:00

AcDbBlockTableRecord *pBlockDef; <br/>acdbOpenObject(pBlockDef, blockId, AcDb::kForRead); <br/><br/>AcDbBlockTableRecordIterator *pIterator; <br/>pBlockDef-&gt;newIterator(pIterator); <br/>AcGePoint3d basePoint; <br/>AcDbEntity *pEnt; <br/>AcDbAttributeDefinition *pAttdef; <br/>for (pIterator-&gt;start(); !pIterator-&gt;done(); <br/>pIterator-&gt;step())//将source.dwg中所有的Attibute进行遍历 <br/>{ <br/>pIterator-&gt;getEntity(pEnt, AcDb::kForRead); <br/>pAttdef = AcDbAttributeDefinition::cast(pEnt); <br/>if (pAttdef != NULL &amp;&amp; !pAttdef-&gt;isConstant()) { <br/>AcDbAttribute *pAtt = new AcDbAttribute(); <br/>pAtt-&gt;setPropertiesFrom(pAttdef); <br/>pAtt-&gt;setInvisible(pAttdef-&gt;isInvisible()); <br/>basePoint = pAttdef-&gt;position(); <br/>basePoint += pBlkRef-&gt;position().asVector(); <br/>pAtt-&gt;setPosition(basePoint); <br/>pAtt-&gt;setHeight(pAttdef-&gt;height()); <br/>pAtt-&gt;setRotation(pAttdef-&gt;rotation()); <br/>pAtt-&gt;setTag("Tag"); <br/>pAtt-&gt;setFieldLength(25); <br/>char *pStr = pAttdef-&gt;tag(); <br/>pAtt-&gt;setTag(pStr); <br/>acutDelString(pStr); <br/>pAtt-&gt;setFieldLength(pAttdef-&gt;fieldLength()); <br/>pAtt-&gt;setTextString("-"); <br/><br/>AcDbObjectId attId; <br/><br/>pBlkRef-&gt;appendAttribute(attId, pAtt); <br/>pAtt-&gt;close(); <br/>} <br/>pEnt-&gt;close(); // use pEnt... pAttdef might be NULL <br/>} <br/>delete pIterator;

wuyating24 发表于 2007-7-18 09:27:00

<p>和我的要求不一样啊,我要遍历的是块参照的块名啊,这个得到的是attibute,继续求答案,大侠们再帮帮忙啊,</p><p>而且我这边的基础不是很好,有没有介绍基础的好书推荐一下呢?</p>
页: [1]
查看完整版本: 请教各位,图中的块参照如何遍历?