几何尺寸与公差论坛------致力于产品几何量公差标准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:09 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】explode problem in latest version 91.0.14.10

explode problem in latest version (1.0.14.1)
explode problem in latest version (1.0.14.1)
i am trying to explode all entities of type region, proxy, and insert. i have a problem on the given file (1.dwg) with the latest version.
the same code was ok with version 1.0.13 but i am probably doing something bad. the crash occurs in the destructor of odrxobjectptrarray (variable exploded_entities), in my function explodeallentitiesofblock.
do you have any ideas ? thanks
renaud
code:
bool flatten(oddbentityptr & entity)
{
if ((entity->iskindof(oddbregion::desc()) ||
(entity->iskindof(oddbproxyentity::desc()) ||
(entity->iskindof(oddbminsertblock::desc()) ||
(entity->iskindof(oddbblockreference::desc()))) return true;
return false;
}
void insertexplodedentities(odrxobjectptrarray & input,
oddbblocktablerecordptr & block)
{
odrxobjectptrarray to_explode(input);
while (!to_explode.empty()) {
odrxobjectptrarray exploded_entities;
odrxobjectptrarray::iterator it = (to_explode.begin());
while (it != to_explode.end()) {
oddbentityptr entity(*it);
if (flatten(entity)) {
odrxobjectptrarray array;
entity->explode(array);
exploded_entities.append(array);
}
else {
block->appendoddbentity(entity.get());
}
it++;
}
to_explode = exploded_entities;
};
}
void explodeallentitiesofblock(oddbblocktablerecordptr & block)
{
oddbobjectiteratorptr entity_it(block->newiterator());
{
odrxobjectptrarray exploded_entities;
while (!entity_it->done()) {
oddbentityptr entity(entity_it->entity());
if (flatten(entity)) {
odrxobjectptrarray array;
entity->explode(array);
exploded_entities.append(array);
//entity->erase();
}
entity_it->step();
};
insertexplodedentities(exploded_entities, block);
std::cout << "before crash";
}
std::cout << "after crash";
}
void explodeallentities(oddbblocktableptr & blocks)
{
oddbsymboltableiteratorptr block_it(blocks->newiterator());
while (!block_it->done()) {
oddbblocktablerecordptr
block(block_it->getrecordid().safeopenobject(oddb::kforwrite));
explodeallentitiesofblock(block);
block_it->step();
}
}
you forgot to attach the file.
sergey slezkin
the attached file
here is the attached file.
in fact i do something like
code:
odrxobjectptrarray exploded_array;
entity->explode(exploded_array);
...
while (it != explode_array.end()) {
oddbentityptr entity(*it);
block->appendoddbentity(entity.get());
}
but isn't the entity.get() a problem ? since when the exploded_array will be deleted .. this will delete the entity appended in the block ?
thanks renaud
attached files (96.5 kb, 3 views)

i can't reproduce the crash. i see 2 asserts while recomputing dimension blocks but no crash.
btw, i get exception if erase() call is uncommented because the entity is opened for read only.
sergey slezkin
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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

相似的主题
主题 主题发起者 论坛 回复 最后发表
【转帖】dwf export problem yang686526 DirectDWG 0 2009-05-04 08:19 PM
【转帖】color conversion problem dd 1.14.01 yang686526 DirectDWG 0 2009-05-04 05:53 PM
【转帖】cannot open a dwg file in autocad - random problem yang686526 DirectDWG 0 2009-05-04 05:28 PM


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


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