查看单个帖子
旧 2009-05-05, 10:18 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】exploding entities recursively crashes

exploding entities recursively crashes.
exploding entities recursively crashes.
when i use the following code in order to recursively explode all the entities in a file,
the program crashes when exploding some explodable entities into some block references not when exploding the block references (it seems to me as if it happens when the entities contain some kind of text, like aligned dimensions).
this is the code:
//************************************************** ************************
theapp.pdb = theapp.readfile
(strfilename);
oddbblocktableptr pblocks = theapp.pdb
->getblocktableid().safeopenobject();
oddbsymboltableiteratorptr pblkiter = pblocks
->newiterator();
for (pblkiter->start(); ! pblkiter->done();
pblkiter->step())
{
oddbblocktablerecordptr pblock = pblkiter
->getrecordid().safeopenobject();
if(theapp.pdb->getmodelspaceid() == pblkiter
->getrecordid())
{
oddbobjectiteratorptr pentiter = pblock
->newiterator();
oddbblockreferenceptr pblockreference;
for (; !pentiter->done(); pentiter->step())
{
oddbentityptr pentity = pentiter->entity();
recursivelyexplode(pentity);
}
}
}
//************************************************** ************************
void recursivelyexplode(oddbentity* pentity)
{
oddbvoidptrarray pvoidentity;
odresult odres;
odres = pentity->explode(pvoidentity);
if(odres != eok)
{
loadnonexplodableentity(pentity);
return;
}
oddbentityptr pentityaux;
int index=1;
int sizearray=0;
sizearray = pvoidentity.size();
while(index <= sizearray)
{
pentityaux = pvoidentity[index-1];
recursivelyexplode(pentityaux);
index++;
}
}
recursively exploding block references.
has this problem been resolved? i just had a problem recursively exploding block references.
void dumpblockref(oddbblockreferenceptr pblockref)
{
int numentities, i;
if (pblockref.isnull())
{
}
else
{
oddbvoidptrarray entityset;
pblockref->explode(entityset);
numentities = entityset.size();
for (i=0; i < numentities; i++)
{
oddbentityptr pent = entityset[i];
dumpallentities(pent);
}
}
void dumpallentities(oddbentityptr pent)
{
if (pent->iskindof(oddbblockreference::desc()))
{
oddbblockreferenceptr pblockref = oddbblockreference::cast(pent);
dumpblockref(pblockref);
}
}
last edited by rauli; 13th january 2004 at 12:09 pmfff">.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)