how to handle the dimension block reference?
how to handle the dimension block reference?
if a custom entity object consists of a dimension, line, etc. how processed the simple entities? the dimension element are saved in the block which is named for "*dx" and a group. is need the dimension exploded?
you can get dimension block use "oddbobjectid dimblockid() const " method and then iterate on entity.
or you can explode dimension.
best regards,
sergey z.
but this is error if i write as follow code to explode dimension.
int impreader::explodeinternalblocks()
{
oddbblocktableptr pblocktable = m_pdb->getblocktableid().safeopenobject();
oddbblocktableiteratorptr pblkiter = pblocktable->newiterator();
for ( pblkiter->start(); !pblkiter->done(); pblkiter->step() )
{
oddbblocktablerecordptr pblock = pblkiter->getrecordid().safeopenobject(oddb::kforwrite);
if ( pblkiter->getrecordid() != m_pdb->getmodelspaceid() )
{
oddbobjectiteratorptr pmsiter = pblock->newiterator();
while ( !pmsiter->done())
{
oddbobjectid entid = pmsiter->objectid();
oddbentityptr pmsent = oddbentity::cast(entid.openobject(oddb::kforwrite) ;
if ( pmsent->iskindof(oddbdimension::desc()))
{
odresult res = pmsent->explodetoblock(pblock); // there is error, why can't explode diemsion?
if ( res == eok )
{
pmsent->erase();
}
}
pmsiter->step();
}
}
}
}
how handle the dimension according to your first way what you can get dimension block use "oddbobjectid dimblockid() const " method and then iterate on entity? thanks!
last edited by
dud@rib.de; 30th october 2008 at 07:34 pmfff">.
hello
in thread i wrote what was problem with explode dimension with annotation scale.
quote:
originally posted by
dud@rib.de
how handle the dimension according to your first way what you can get dimension block use "oddbobjectid dimblockid() const " method and then iterate on entity? thanks!
oddbblocktablerecordptr pblock = pdimension->dimblockid().safeopenobject();
oddbblocktableiteratorptr pblkiter = pblock->newiterator();
for ( pblkiter->start(); !pblkiter->done(); pblkiter->step() )
{
oddbobjectid entid = pblkiter->objectid();
oddbentityptr pmsent = oddbentity::cast(entid.openobject();
if ( pmsent->iskindof(oddbline::desc()))
{
} else if ( pmsent->iskindof(oddbmtext::desc()))
{
} else if ( pmsent->iskindof(oddbsolid::desc()))
{
} else if ( pmsent->iskindof(oddbarc::desc()))
{
} else if ( pmsent->iskindof(oddbpoint::desc()))
{
}
}
best regards,
sergey z.
hello,
do you use the base point field when draw dimension block?
(base point is dxf 10 in acdbblockbegin entity)
see attachment: dimension_block.dwg
oddbblocktablerecord block; // dimension block entity
block.origin(); // the base point for the dimension block dxf 10
i don't know how treat this field correctly.
best regards,
andrey.
attached files (48.2 kb, 1 views)
hello andrey,
this point is used in recompute dimension block ( dimension line defined point ). see recomputedimblock project (m_dimlinedefpt variable ).
best regards,
sergey z.