高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】not iterating through a xref block
not iterating through a xref block
not iterating through a xref block
hi,
i am finding that i am unable to iterate through a block reference that is an xref, yet i can do it using the example odreadex code, 2.6.3.
i attach a dwg with one xref in it. when i run the odreadex example, i can analyse the entities in the ref, e.g text, etc... in my code though, the iterator does not find anything to iterate. something iss different in my code environment, but i can't see what it is. any clues about how i may work out what the problem is?
pdb = svcs.readfile(szinfilename, false, false, oda::ksharedenyno );
...
oddbblocktableptr ptable = pdb->getblocktableid().safeopenobject();
oddbsymboltableiteratorptr pblkiter = ptable->newiterator();
/* step through the blocktable */
/************************************************** ********************/
for (pblkiter->start(); ! pblkiter->done(); pblkiter->step())
{
/************************************************** ******************/
/* open the blocktablerecord for reading */
/************************************************** ******************/
oddbblocktablerecordptr pblock = pblkiter->getrecordid().safeopenobject();
if (pblock->xrefstatus()!=oddb::kxrfnotanxref)
{
...
}
/************************************************** ******************/
/* get a smartpointer to a new objectiterator */
/************************************************** ******************/
oddbobjectiteratorptr pentiter = pblock->newiterator();
/************************************************** ******************/
/* step through the blocktablerecord */
/************************************************** ******************/
for (; !pentiter->done(); pentiter->step())
{
/************************************************** ******************/
/* dump the entity */
/************************************************** ******************/
dumpentity(pentiter->objectid(), indent+1); // not getting here in my code, when the block is the xref
}
}
tony rowe
attached files
to load xref block you need to call oddbxrefman::load() (xrefman.h)
vectorization framework calls it while vectorizing.
i'm trying to see how that is called in the odreadex project, but can't find where it is. when should i call it?
ok, i've found out what is different between my code and the example. in the course of iterating through the blocks, the example code innocuously calls getgeomextents on the modelspace block. i had left this out of my code. it seems that in this call the xref is being loaded, and that is why the example was working, but mine wasn't. if there was some better way of notifying the developer that this function will also load an xref and not just return the extents of a block, that would be much appreciated. i could have saved two days of mucking around with project settings, dlls, etc...
in the previous post i wrote that vectorization framework (dwgdirect not odreadex) invokes xref loading.
getting extents works via vectorization.
|