![]() |
【转帖】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 ? |
所有的时间均为北京时间。 现在的时间是 03:54 AM. |