高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】reading geometric data
reading geometric data
reading geometric data
hello, i'm a beginner, so excuse my question:
i want to write a converter to transform all walls of a building-autocad file into my own fileformat. i have study the odreadex example, but i don't understand how i can read the geometric data of a oddb3dsolid.
- are walls allways saved as oddb3dsolid?
- how can i read the geometric data?
thanks a lot!
jörg
i don't think that all walls are always represented as 3dsolids
maybe you'll find something useful in odvectorizeex sample?
sincerely yours,
george udov
can you give me a hint, please? i can't find any usefull information in odvectorizeex ..
i only need 2 coordinates(x/y/z) of one wall (cuboid) for example the upper/right and lower/left...
last edited by joerg; 20th october 2005 at 02:41 amfff">.
i found some out:
in the odamfcapp tool is a option "convert acis".
after converting i can read the oddbblockreference values!
now i just need one little tip: which funktion must i call in code, to convert my database automaticaly on load?
now i have following code:
code:
if (!pdb.isnull())
{
std(cout) << "file version: " << pdb->originalfileversion() << std(endl);
oddbblocktablerecordptr pms = pdb->getmodelspaceid().openobject();
oddbobjectiteratorptr pentiter = pms->newiterator();
while(!pentiter->done())
{
oddbentityptr pent = pentiter->entity(oddb::kforwrite);
pentiter->step();
if (!pent.isnull()
&& (pent->iskindof(oddbregion::desc())
|| pent->iskindof(oddbbody::desc())
|| pent->iskindof(oddb3dsolid::desc())))
{
bool exchangexdata;
oddbobjectid replaceid;
oddbobjectptr pnewobj = pent->decomposeforsave(oddb::vac12, replaceid, exchangexdata);
if (!pnewobj.isnull())
{
pent->handoverto(pnewobj);
}
}
}
dbdumper dumper;
dumper.dump(pdb, &svcs, std(cout));
}
in result, i don't get 3dsolids anymore ...but unfortunately i get no blockreferences.
what have i forgotten?
have you defined next section in your app ?
#ifndef _toolkit_in_dll_
odrx_declare_static_module_entry_point(modelermodu le);
odrx_begin_static_module_map()
odrx_define_static_application("modelergeometry", modelermodule)
odrx_end_static_module_map()
#endif
possibly, you havn't loaded modelergeometry.
yes, i have the defined section in my code.
the code is running, but i have no blockreferences in result.
does i need any refresh or something else after this method?
last edited by joerg; 20th october 2005 at 08:31 amfff">.
i still have the same problem...
3dsolids are decomposed (?) , but pnewobj is allways null ?!?
i need blockreferences!!
code:
bool fff"> exchangexdata;
oddbobjectid replaceid;
oddbobjectptr pnewobj = pent->decomposeforsave(oddb::vac12, replaceid, exchangexdata);
if fff"> (!pnewobj.isnull()) //pnewobj is allways null ?!?!?!?
{
pent->handoverto(pnewobj);
}
attached is my dwg-file and the modified odreadex sample. can someone help me please?
thanks much!
jörg
attached files (1.9 kb, 27 views)
(77.2 kb, 16 views)
last edited by joerg; 21st october 2005 at 02:30 amfff">.
hi,
it works fine for me.
most likely dd can't load modelergeometry service:
if you use dll version of dd - modelergeometry.drx or dll it depends on can't be loaded.
if you use lib version of dd -
quote:
odrx_declare_static_module_entry_point(modelermodu le);
odrx_begin_static_module_map()
odrx_define_static_application("modelergeometry", modelermodule)
odrx_end_static_module_map()
that's it! thank you very, much!!!
modelergeometry.drx was not in the directory!
thanks again and best regards
jörg
problem with oddbregion vectorization
hi,
i am using dd 1.13.02.
i have a dll which statically links to the dd libs. the dll is then loaded/used by the main application.
i can vectorize all entities except oddbregion. i have written:
quote:
odrx_declare_static_module_entry_point(modelermodu le);
odrx_begin_static_module_map()
odrx_define_static_application("modelergeometry", modelermodule)
odrx_end_static_module_map()
in one of my cpp files and called:
quote:
odrx_init_static_module_map();
just after odinitialize().
..but the oddbregion entities are not vectorized. i can see the draw() function being called for them though.
the odvectorize example calls odrx_init_static_module_map(); before odinitialize() while the dwgdirect help file says that
quote:
after the static module map has been declared, the dwgdirect client application should call the odrx_init_static_module_map macro once to initialize the static module map. this should be done after odinitialize,
i tried both..but it still didn't work. i cannot reproduce the problem with the odvectorize sample though.
01. do i have to do something special to initialize modelergeometry library when the libs are statically linked to a dll??
02. how can i know if the modeleregeometry.lib has been initialized properly?
thanks
alex
odrxclassptr prxclass =odrxgetmodelergeometrycreatorservice();
if prxclass is null, you have a problem with modelergeometry.drx loading or it is not linked.
hi,
are oddb3dsolid entities vectorized properly in both 2d wireframe and flat/gouraud shading modes ?
>>01. do i have to do something special to initialize modelergeometry library when the libs are statically linked to a dll??
>>02. how can i know if the modeleregeometry.lib has been initialized properly?
you can call odrxdynamiclinker()->loadapp("modelergeometry"); it should return not null if modeleregeometry.lib is initialized properly.
last edited by dmitry a. novikov; 28th october 2005 at 03:03 amfff">.
yes, dd is able to vectorize both 2dwireframe sphere and shademode=gouard sphere..
also the odrxdynamiclinker()->loadapp("modelergeometry"); function returned non-null value with the vtable looking correct.
is this a bug in oddbregion's vectorization?
plz help.
thanks
alex
please, try both release and debug dd libs, does problem appear with both ?
|