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

get extents for oddb3dsolid
get extents for oddb3dsolid
hi,
i'm adding acis data from a file to a dwg object using the following code:
void add3dsolid(const char *filename,oddbdatabaseptr &database)
{
if(:dsystemservices()->accessfile(filename,oda::kfileread))
{
odrdfilebuf satfile(filename);
// create solid object
oddb3dsolidptr solid=oddb3dsolid::createobject();
solid->acisin(&satfile);
// add to modelspace
oddbblocktablerecordptr modelspace=
database->getmodelspaceid().safeopenobject(oddb::kforwrite) ;
modelspace->appendoddbentity(solid);
}
}
this works fine. but i need to know the bounding box of the added 3d solid. i tried the getgeomextents method on the oddb3dsolid, on the block table record, i stepped through all entities, but it does not work. either it crashes, or it just returns an invalid box.
does anybody know how to get the bounding box of a 3d solid?
thanks and best regards,
stefan waldner
last edited by stefan waldner; 13th january 2005 at 07:44 amfff">.
hi, ( ddt version? )
try next : create dwg file with simple solid ( like sphere ), load it to mfcapp, open modelspace, select acdb3dsolid, look at 3 last strings on the right panel. it is getgeomextents dump for object. is it ok?
right click on the acdb3dsolid in mfcapp, select save sat info to. select load from sat ( choose your sat file ), select set to entity and refresh info about acdb3dsolid... is it correct extents ?
try to get geomextent with getgeomextents method on the oddb3dsolid, is it ok ?
hi,
thanks for your reply.
i'm using the latest version 1.12.0.4, and it seems that the getgeomextents does not work for 3d solids based on acis input. with a simple block i had no problems, but a simple block as acis input did not deliver any result. i'm a little bit under pressure, because a customer is waiting for new functionality, so i had to find a workaround. i will do some more investigations next week and let you know.
thanks,
stefan waldner
please, email me file with acis block or attach it with forum message.
here it is. thanks for your help.
it's a dwg 2004 file with one acis solid embedded and some node points, which can be ignored.
attached files (4.7 kb, 6 views)

i have not any problem with your file. i need some additional information about.
( see my file )
attached images (62.2 kb, 15 views)

maybe the problem is, that i add the solid and directly after that i try to get the geomextents, without any save or load between the operations (see my code in the first post). maybe there is an update or refresh missing.
it are my code for testing your situation.
#include "odfilebuf.h"
#include "br\brbrep.h"
void cdwgview:neditacisconversion()
{
odchar* filename = "d:\\box.sat";
if(:dsystemservices()->accessfile(filename,oda::kfileread))
{
oddbdatabase* database = getdocument();
odrdfilebuf satfile(filename);
// create solid object
oddb3dsolidptr solid=oddb3dsolid::createobject();
odresult rrr = solid->acisin(&satfile);
// add to modelspace
oddbblocktablerecordptr modelspace=
database->getmodelspaceid().safeopenobject(oddb::kforwrite) ;
oddbobjectid id = modelspace->appendoddbentity(solid);
oddb3dsolidptr solid2 = id.safeopenobject();
odgeextents3d extents;
odresult res = solid2->getgeomextents(extents);
odbrbrep bbb;
solid2->brep(bbb);
bool b = bbb.isnull();
}
}
it works fine in mfcapp, but
if res == enullextents and bbb.isnull() return true, your app doesn't use modelergeometry.
if it true, check
odrx_declare_static_module_entry_point(modelermodu le);
odrx_define_static_application("modelergeometry", modelermodule)
is your app use ddt like lib or dll ?
last edited by sslezkin; 18th january 2005 at 04:16 amfff">.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)