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


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » DirectDWG
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 2009-05-05, 10:16 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】exploding 3dsolid access violates

exploding 3dsolid access violates
exploding 3dsolid access violates
opendwg'ers
the attached file access violates on the line "solid3dptr->explode(primitives);"
please let me know if i have done something wrong, or how i can work around this.
my code for testing this is as simple as follows:
:dinitialize(&dwgsvcs);
:drxinitwinntcrypt();
odrx_init_static_module_map();
{
oddbdatabaseptr dwgdb = dwgsvcs.readfile( "p:\\drawings\\downloads\\3d_objects\\fur studio furniture\\x-3d62fur.dwg", false, false, oda::ksharedenyno );
oddbblocktablerecordptr blocktableptr = dwgdb->getmodelspaceid().safeopenobject();
oddbobjectiteratorptr entityiteratorptr = blocktableptr->newiterator();
while( !entityiteratorptr->done() ) {
oddbentityptr entityptr = entityiteratorptr->entity(oddb::kforread);
oddbobjectid entityid = entityptr->objectid();
oddbhandle hentity = entityid.gethandle();
oddbobjectptr objectptr = entityid.openobject();
odrxobjectptrarray primitives;
if (entityptr->isa() == aecdbwall::desc()) {
aecdbwallptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbdoor::desc()) {
aecdbdoorptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbwindow::desc()) {
aecdbwindowptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbslab::desc() ) {
aecdbslabptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbopening::desc() ) {
aecdbopeningptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbspace::desc() ) {
aecdbspaceptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbstair::desc() ) {
aecdbstairptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbroof::desc() ) {
aecdbroofptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbpolygon::desc() ) {
aecdbpolygonptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbrailing::desc() ) {
aecdbrailingptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbroofslab::desc() ) {
aecdbroofslabptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbspaceboundary::desc() ) {
aecdbspaceboundaryptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdblayoutgrid3d::desc() ) {
aecdblayoutgrid3dptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdblayoutgrid2d::desc() ) {
aecdblayoutgrid2dptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdblayoutcurve::desc() ) {
aecdblayoutcurveptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbcurtainwalllayout::desc()) {
aecdbcurtainwalllayoutptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbwindowassembly::desc()) {
aecdbwindowassemblyptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbcolumngrid::desc()) {
aecdbcolumngridptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecdbmasselem::desc()) {
aecdbmasselemptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == aecsdbmember::desc()) {
aecsdbmemberptr adtptr = entityptr;
adtptr->explode(primitives);
} else if (entityptr->isa() == oddb3dsolid::desc()) {
oddb3dsolidptr solid3dptr = entityptr;
if( solid3dptr->isnull() == false ) {
odrxobjectptrarray primitives;
solid3dptr->explode(primitives); // crashes here
odrxobjectptrarray::iterator iter = primitives.begin();
}
}
entityiteratorptr->step();
}
}
:drxuninitwinntcrypt();
:duninitialize();
cheers
jason
attached files
hi,
thank you for attachment. i have found problems in our explode code. fixes will be available in next release.
please, use try {} catch(...) {} block as temporary fix.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭

相似的主题
主题 主题发起者 论坛 回复 最后发表
【转帖】access violation yang686526 DirectDWG 0 2009-05-04 03:32 PM
【转帖】access objectdatarecords associated with entities yang686526 DirectDWG 0 2009-05-04 03:28 PM
【转帖】[vba]请教:ado如何在access数据库中新建一个表 yang686526 数据库ObjectDBX 0 2009-04-19 04:54 PM
【转帖】[arx]access存图纸时发现的问题,个人拙见,欢迎讨论 yang686526 ObjectARX(C++) 0 2009-04-16 11:37 AM
【转帖】get write access button yang686526 SolidWorks二次开发 0 2009-04-13 11:03 AM


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


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多