Merging r41564 through r41596 from trunk into soc-2011-tomato
[blender.git] / source / blender / blenkernel / intern / object.c
index 089b42b3ceff5075311aae6c694702795abaf26f..07e199c1535a38edc703a9cae4b6f44ad4063103 100644 (file)
@@ -1420,33 +1420,6 @@ void object_make_proxy(Object *ob, Object *target, Object *gob)
 
 /* *************** CALC ****************** */
 
-/* there is also a timing calculation in drawobject() */
-
-
-// XXX THIS CRUFT NEEDS SERIOUS RECODING ASAP!
-/* ob can be NULL */
-float bsystem_time(struct Scene *scene, Object *UNUSED(ob), float cfra, float ofs)
-{
-       /* returns float ( see BKE_curframe in scene.c) */
-       cfra += scene->r.subframe;
-       
-       /* global time */
-       if (scene)
-               cfra*= scene->r.framelen;       
-       
-#if 0 // XXX old animation system
-       if (ob) {
-               /* ofset frames */
-               if ((ob->ipoflag & OB_OFFS_PARENT) && (ob->partype & PARSLOW)==0) 
-                       cfra-= give_timeoffset(ob);
-       }
-#endif // XXX old animation system
-       
-       cfra-= ofs;
-
-       return cfra;
-}
-
 void object_scale_to_mat3(Object *ob, float mat[][3])
 {
        float vec[3];
@@ -1454,7 +1427,6 @@ void object_scale_to_mat3(Object *ob, float mat[][3])
        size_to_mat3( mat,vec);
 }
 
-
 void object_rot_to_mat3(Object *ob, float mat[][3])
 {
        float rmat[3][3], dmat[3][3];
@@ -1593,12 +1565,6 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
                makeDispListCurveTypes(scene, par, 0);
        if(cu->path==NULL) return;
        
-       /* exception, timeoffset is regarded as distance offset */
-       if(cu->flag & CU_OFFS_PATHDIST) {
-               timeoffs = give_timeoffset(ob);
-               SWAP(float, sf_orig, ob->sf);
-       }
-       
        /* catch exceptions: feature for nla stride editing */
        if(ob->ipoflag & OB_DISABLE_PATH) {
                ctime= 0.0f;
@@ -1619,7 +1585,7 @@ static void ob_parcurve(Scene *scene, Object *ob, Object *par, float mat[][4])
                CLAMP(ctime, 0.0f, 1.0f);
        }
        else {
-               ctime= scene->r.cfra - give_timeoffset(ob);
+               ctime= scene->r.cfra;
                if (IS_EQF(cu->pathlen, 0.0f) == 0)
                        ctime /= cu->pathlen;
                
@@ -1852,7 +1818,7 @@ static int where_is_object_parslow(Object *ob, float obmat[4][4], float slowmat[
        int a;
 
        // include framerate
-       fac1= ( 1.0f / (1.0f + (float)fabs(give_timeoffset(ob))) );
+       fac1= ( 1.0f / (1.0f + (float)fabs(ob->sf)) );
        if(fac1 >= 1.0f) return 0;
        fac2= 1.0f-fac1;
 
@@ -1882,9 +1848,6 @@ void where_is_object_time(Scene *scene, Object *ob, float ctime)
        if(ob->parent) {
                Object *par= ob->parent;
                
-               // XXX depreceated - animsys
-               if(ob->ipoflag & OB_OFFS_PARENT) ctime-= give_timeoffset(ob);
-               
                /* hurms, code below conflicts with depgraph... (ton) */
                /* and even worse, it gives bad effects for NLA stride too (try ctime != par->ctime, with MBlur) */
                if(no_parent_ipo==0 && stime != par->ctime) {
@@ -1893,14 +1856,17 @@ void where_is_object_time(Scene *scene, Object *ob, float ctime)
                        
                        if(par->proxy_from);    // was a copied matrix, no where_is! bad...
                        else where_is_object_time(scene, par, ctime);
-
+                       
                        solve_parenting(scene, ob, par, ob->obmat, slowmat, 0);
-
+                       
                        *par= tmp;
                }
                else
                        solve_parenting(scene, ob, par, ob->obmat, slowmat, 0);
                
+               /* "slow parent" is definitely not threadsafe, and may also give bad results jumping around 
+                * An old-fashioned hack which probably doesn't really cut it anymore
+                */
                if(ob->partype & PARSLOW) {
                        if(!where_is_object_parslow(ob, ob->obmat, slowmat))
                                return;
@@ -2039,7 +2005,6 @@ void where_is_object_simul(Scene *scene, Object *ob)
 for a lamp that is the child of another object */
 {
        Object *par;
-       //Ipo *ipo;
        float *fp1, *fp2;
        float slowmat[4][4];
        float fac1, fac2;
@@ -2050,10 +2015,9 @@ for a lamp that is the child of another object */
                par= ob->parent;
                
                solve_parenting(scene, ob, par, ob->obmat, slowmat, 1);
-
+               
                if(ob->partype & PARSLOW) {
-
-                       fac1= (float)(1.0/(1.0+ fabs(give_timeoffset(ob))));
+                       fac1= (float)(1.0/(1.0+ fabs(ob->sf)));
                        fac2= 1.0f-fac1;
                        fp1= ob->obmat[0];
                        fp2= slowmat[0];
@@ -2061,7 +2025,6 @@ for a lamp that is the child of another object */
                                fp1[0]= fac1*fp1[0] + fac2*fp2[0];
                        }
                }
-               
        }
        else {
                object_to_mat4(ob, ob->obmat);
@@ -2190,7 +2153,7 @@ void object_set_dimensions(Object *ob, const float *value)
        }
 }
 
-void minmax_object(Object *ob, float *min, float *max)
+void minmax_object(Object *ob, float min[3], float max[3])
 {
        BoundBox bb;
        float vec[3];
@@ -2587,15 +2550,6 @@ void object_sculpt_modifiers_changed(Object *ob)
        }
 }
 
-float give_timeoffset(Object *ob)
-{
-       if ((ob->ipoflag & OB_OFFS_PARENTADD) && ob->parent) {
-               return ob->sf + give_timeoffset(ob->parent);
-       } else {
-               return ob->sf;
-       }
-}
-
 int give_obdata_texspace(Object *ob, short **texflag, float **loc, float **size, float **rot)
 {