Revision: 27719
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=27719
Author:   blendix
Date:     2010-03-24 16:59:44 +0100 (Wed, 24 Mar 2010)

Log Message:
-----------
Render Branch: tweak to group transform, now group matrix is applied in
where_is_object_time instead of object_handle_update to ensure it is always
applied. Still a problem with dragon tail, will attempt to fix that next.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/BKE_object.h
    branches/render25/source/blender/blenkernel/intern/group.c
    branches/render25/source/blender/blenkernel/intern/object.c
    branches/render25/source/blender/blenkernel/intern/scene.c
    branches/render25/source/blender/editors/transform/transform_conversions.c
    branches/render25/source/blender/makesdna/DNA_object_types.h

Modified: branches/render25/source/blender/blenkernel/BKE_object.h
===================================================================
--- branches/render25/source/blender/blenkernel/BKE_object.h    2010-03-24 
15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/BKE_object.h    2010-03-24 
15:59:44 UTC (rev 27719)
@@ -121,7 +121,7 @@
 void *object_tfm_backup(struct Object *ob);
 void object_tfm_restore(struct Object *ob, void *obtfm_pt);
 
-void object_handle_update(struct Scene *scene, struct Object *ob, float 
groupmat[][4]);
+void object_handle_update(struct Scene *scene, struct Object *ob);
 
 float give_timeoffset(struct Object *ob);
 int give_obdata_texspace(struct Object *ob, short **texflag, float **loc, 
float **size, float **rot);

Modified: branches/render25/source/blender/blenkernel/intern/group.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/group.c  2010-03-24 
15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/intern/group.c  2010-03-24 
15:59:44 UTC (rev 27719)
@@ -354,6 +354,10 @@
                        if(go->ob) {
                                mul_m4_m4m4(go->ob->obmat, go->ob->obmat, 
parmat);
                                mul_m4_m4m4(go->ob->parentinv, 
go->ob->parentinv, iparmat);
+
+                               /* this is applied in where_is_object_time in 
case the 
+                                  matrix is recalculated */
+                               go->ob->groupmat= (float*)parmat;
                        }
                }
        }
@@ -372,7 +376,7 @@
                                go->ob->recalc= go->recalc;
                                
                                group_replaces_nla(parent, go->ob, 's');
-                               object_handle_update(scene, go->ob, parmat);
+                               object_handle_update(scene, go->ob);
                                group_replaces_nla(parent, go->ob, 'e');
                                
                                /* leave recalc tags in case group members are 
in normal scene */
@@ -387,7 +391,7 @@
                /* only do existing tags, as set by regular depsgraph */
                for(go= group->gobject.first; go; go= go->next)
                        if(go->ob && go->ob->recalc)
-                               object_handle_update(scene, go->ob, parmat);
+                               object_handle_update(scene, go->ob);
        }
 
        if(group->id.lib) {
@@ -395,6 +399,8 @@
                        if(go->ob) {
                                mul_m4_m4m4(go->ob->obmat, go->ob->obmat, 
iparmat);
                                mul_m4_m4m4(go->ob->parentinv, 
go->ob->parentinv, parmat);
+
+                               go->ob->groupmat= NULL;
                        }
                }
        }

Modified: branches/render25/source/blender/blenkernel/intern/object.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/object.c 2010-03-24 
15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/intern/object.c 2010-03-24 
15:59:44 UTC (rev 27719)
@@ -2065,6 +2065,14 @@
        /* set negative scale flag in object */
        if(is_negative_m4(ob->obmat))   ob->transflag |= OB_NEG_SCALE;
        else                                                    ob->transflag 
&= ~OB_NEG_SCALE;
+
+       if(ob->groupmat) {
+               /* if this is being called as part of dupligroup evaluation, we
+                  want the object matrices to be transformed by the duplicator
+                  so that e.g. physics systems are executed in the correct
+                  space. this is enabled in group_handle_recalc_and_update */
+               mul_m4_m4m4(ob->obmat, ob->obmat, (float(*)[4])ob->groupmat);
+       }
 }
 
 static void solve_parenting (Scene *scene, Object *ob, Object *par, float 
obmat[][4], float slowmat[][4], int simul)
@@ -2477,10 +2485,9 @@
 
 /* the main object update call, for object matrix, constraints, keys and 
displist (modifiers) */
 /* requires flags to be set! */
-void object_handle_update(Scene *scene, Object *ob, float groupmat[][4])
+void object_handle_update(Scene *scene, Object *ob)
 {
        if(ob->recalc & OB_RECALC) {
-               
                /* XXX new animsys warning: depsgraph tag OB_RECALC_DATA should 
not skip drivers, 
                   which is only in where_is_object now */
                if(ob->recalc & OB_RECALC) {
@@ -2493,17 +2500,8 @@
                                // printf("ob proxy copy, lib ob %s proxy 
%s\n", ob->id.name, ob->proxy_from->id.name);
                                copy_m4_m4(ob->obmat, ob->proxy_from->obmat);
                        }
-                       else {
+                       else
                                where_is_object(scene, ob);
-
-                               if(groupmat) {
-                                       /* if this is being called as part of 
dupligroup evaluation, we
-                                          want the object matrices to be 
transformed by the duplicator
-                                          so that e.g. physics systems are 
executed in the correct
-                                          space. this is here because it must 
run before recalc data. */
-                                       mul_m4_m4m4(ob->obmat, ob->obmat, 
groupmat);
-                               }
-                       }
                }
                
                if(ob->recalc & OB_RECALC_DATA) {
@@ -2605,9 +2603,9 @@
                        /* set pointer in library proxy target, for copying, 
but restore it */
                        ob->proxy->proxy_from= ob;
                        // printf("call update, lib ob %s proxy %s\n", 
ob->proxy->id.name, ob->id.name);
-                       object_handle_update(scene, ob->proxy, NULL);
+                       object_handle_update(scene, ob->proxy);
                }
-       
+
                ob->recalc &= ~OB_RECALC;
        }
 

Modified: branches/render25/source/blender/blenkernel/intern/scene.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/scene.c  2010-03-24 
15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/blenkernel/intern/scene.c  2010-03-24 
15:59:44 UTC (rev 27719)
@@ -898,7 +898,7 @@
        for(base= sce->base.first; base; base= base->next) {
                ob= base->object;
                
-               object_handle_update(sce, ob, NULL);   // bke_object.h
+               object_handle_update(sce, ob);   // bke_object.h
                
                /* only update layer when an ipo */
                        // XXX old animation system
@@ -922,11 +922,11 @@
           dependencies on sets, but not the other way around. */
        if(scene->set) {
                for(SETLOOPER(scene->set, base))
-                       object_handle_update(scene, base->object, NULL);
+                       object_handle_update(scene, base->object);
        }
        
        for(base= scene->base.first; base; base= base->next) {
-               object_handle_update(scene, base->object, NULL);
+               object_handle_update(scene, base->object);
        }
 
        /* recalc scene animation data here (for sequencer) */

Modified: 
branches/render25/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/render25/source/blender/editors/transform/transform_conversions.c  
2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/editors/transform/transform_conversions.c  
2010-03-24 15:59:44 UTC (rev 27719)
@@ -4292,7 +4292,7 @@
        /* handle pending update events, otherwise they got copied below */
        for (base= scene->base.first; base; base= base->next) {
                if(base->object->recalc)
-                       object_handle_update(t->scene, base->object, NULL);
+                       object_handle_update(t->scene, base->object);
        }
 
        for (base= scene->base.first; base; base= base->next) {

Modified: branches/render25/source/blender/makesdna/DNA_object_types.h
===================================================================
--- branches/render25/source/blender/makesdna/DNA_object_types.h        
2010-03-24 15:43:22 UTC (rev 27718)
+++ branches/render25/source/blender/makesdna/DNA_object_types.h        
2010-03-24 15:59:44 UTC (rev 27719)
@@ -250,12 +250,12 @@
        int lastDataMask;                       /* the custom data layer mask 
that was last used to calculate derivedDeform and derivedFinal */
        unsigned int state;                     /* bit masks of game 
controllers that are active */
        unsigned int init_state;        /* bit masks of initial state as 
recorded by the users */
+       unsigned int pad2;
 
-       int pad2;
-
        ListBase gpulamp;               /* runtime, for lamps only */
        ListBase pc_ids;
        ListBase *duplilist;    /* for temporary dupli list storage, only for 
use by RNA API */
+       float *groupmat;                /* runtime, temporarily set during 
group evaluation */
 } Object;
 
 /* Warning, this is not used anymore because hooks are now modifiers */


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to