diff options
author | Ton Roosendaal <ton@blender.org> | 2005-03-24 00:20:27 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2005-03-24 00:20:27 +0300 |
commit | 90caa93d6746b9d7e8dfae52f591181be0a5b072 (patch) | |
tree | 4a26695558400720b4152ff8a4bb50a546857b38 | |
parent | b86dc81cf346a6c54ab60d312169fb4882f44972 (diff) |
bug fix 2353
Mesh object with hooks, which was used as duplivertor, didn't render the
duplicated objects on correct locations.
It did show OK in 3d window though, was due to not synced drawing and
render convertor code.
-rw-r--r-- | source/blender/renderconverter/intern/convertBlenderScene.c | 29 |
1 files changed, 23 insertions, 6 deletions
diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c index 5d97d968880..60eaadf29fe 100644 --- a/source/blender/renderconverter/intern/convertBlenderScene.c +++ b/source/blender/renderconverter/intern/convertBlenderScene.c @@ -2950,14 +2950,31 @@ void RE_rotateBlenderScene(void) base= G.scene->base.first; while(base) { - clear_object_constraint_status(base->object); - if (base->object->type==OB_ARMATURE) { - where_is_armature (base->object); - } + ob= base->object; + clear_object_constraint_status(ob); + if (ob->type==OB_ARMATURE) + where_is_armature (ob); else + where_is_object(ob); - where_is_object(base->object); - + if(ob->type==OB_MESH) { + Mesh *me= ob->data; + /* check for need for displist (it's zero when parent, key, or hook changed) */ + /* this part was added to mimic drawing code better, will be solved with dep graph! (ton) */ + if(ob->disp.first==NULL) { + if(ob->parent && ob->partype==PARSKEL) makeDispList(ob); + else if(ob->parent && ob->parent->type==OB_LATTICE) makeDispList(ob); + else if(ob->hooks.first) makeDispList(ob); + else if(ob->softflag & 0x01) makeDispList(ob); + else if(me->disp.first==NULL && mesh_uses_displist(me)) makeDispList(ob); + else if(ob->effect.first) { // as last check + Effect *eff= ob->effect.first; + if(eff->type==EFF_WAVE) makeDispList(ob); + } + } + } + + if(base->next==0 && G.scene->set && base==G.scene->base.last) base= G.scene->set->base.first; else base= base->next; } |