![]() |
【转帖】请教各位,图中的块参照如何遍历?
请教各位,图中的块参照如何遍历?
请教各位,图中的块参照如何遍历? 我现在要取图层上的所有块参照的块名,使用选择集没做出来,程序如下 rb.restype =2; char sbuf[16]; strcpy(sbuf,"blockreference"); rb.resval.rstring = sbuf; rb.rbnext = null; ads_name ss; acedssget("x",null,null,&rb,ss); 不知道失败的原因,只好采用遍历的方法,看到前面有帖子有遍历块表里的块名的方法,采用之,发现没办法用取到的块表块名来取块参照的块名,苦思两天了,不知道是为什么,请大家不吝赐教!!谢谢了!! ptable->getat(sablockname.getat(i),id); //acdbentity *pent; acdbobject *pobj; acad::errorstatus es; es = acdbopenacdbobject(pobj,id,acdb::kforread); //es = acdbopenobject(pent,id,acdb::kforread);(使用时出错es ==enotanentity,因此采用acdbopenacdbobject) //acrxobject ent = pent->acrxobject; acdbblockreference *pblkref=new acdbblockreference;//= (acdbblockreference*)pobj if(pblkref->iskindof(acdbblockreference::desc())) { pblkref= acdbblockreference::cast(pobj);(!!!!!!!出错地点:pblkref的返回值为0) } acdbobjectid pblktblrecid; //pblktblrecid = pblkref->blocktablerecord(); pblktblrecid = pblkref->objectid(); acdbblocktablerecord *pblockdef; acdbopenobject(pblockdef, blockid, acdb::kforread); acdbblocktablerecorditerator *piterator; pblockdef->newiterator(piterator); acgepoint3d basepoint; acdbentity *pent; acdbattributedefinition *pattdef; for (piterator->start(); !piterator->done(); piterator->step())//将source.dwg中所有的attibute进行遍历 { piterator->getentity(pent, acdb::kforread); pattdef = acdbattributedefinition::cast(pent); if (pattdef != null && !pattdef->isconstant()) { acdbattribute *patt = new acdbattribute(); patt->setpropertiesfrom(pattdef); patt->setinvisible(pattdef->isinvisible()); basepoint = pattdef->position(); basepoint += pblkref->position().asvector(); patt->setposition(basepoint); patt->setheight(pattdef->height()); patt->setrotation(pattdef->rotation()); patt->settag("tag"); patt->setfieldlength(25); char *pstr = pattdef->tag(); patt->settag(pstr); acutdelstring(pstr); patt->setfieldlength(pattdef->fieldlength()); patt->settextstring("-"); acdbobjectid attid; pblkref->appendattribute(attid, patt); patt->close(); } pent->close(); // use pent... pattdef might be null } delete piterator; 和我的要求不一样啊,我要遍历的是块参照的块名啊,这个得到的是attibute,继续求答案,大侠们再帮帮忙啊, 而且我这边的基础不是很好,有没有介绍基础的好书推荐一下呢? |
| 所有的时间均为北京时间。 现在的时间是 10:20 AM. |