几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   DirectDWG (http://www.dimcax.com/hust/forumdisplay.php?f=89)
-   -   【转帖】how to handle the dimension block reference (http://www.dimcax.com/hust/showthread.php?t=16706)

yang686526 2009-05-06 02:50 PM

【转帖】how to handle the dimension block reference
 
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.


所有的时间均为北京时间。 现在的时间是 03:59 AM.