Spot Light spot_blend animation im/export.
authorSukhitha Prabhath Jayathilake <pr.jayathilake@gmail.com>
Tue, 5 Jul 2011 18:02:08 +0000 (18:02 +0000)
committerSukhitha Prabhath Jayathilake <pr.jayathilake@gmail.com>
Tue, 5 Jul 2011 18:02:08 +0000 (18:02 +0000)
source/blender/collada/AnimationExporter.cpp
source/blender/collada/AnimationImporter.cpp
source/blender/collada/AnimationImporter.h

index fdd59c40ea577be63137cd711bd29919174d5715..6ebaef30a9cdc8cdc2548bc2adf8b5825059d971 100644 (file)
@@ -89,7 +89,8 @@ void AnimationExporter::exportAnimations(Scene *sce)
                                        (!strcmp(transformName, "rotation_euler") && ob->rotmode == ROT_MODE_EUL)||
                                        (!strcmp(transformName, "rotation_quaternion")) ||
                                        (!strcmp(transformName, "color")) ||
-                                       (!strcmp(transformName, "spot_size"))) 
+                                       (!strcmp(transformName, "spot_size"))||
+                                       (!strcmp(transformName, "spot_blend"))) 
                                        dae_animation(ob ,fcu, transformName );
                                
 
index 18d56ad8b2e0745ca8e6fe56b9cdb0f90f9da7ef..e21a937093553fcc3dca86bff9b37411115f0401 100644 (file)
@@ -692,13 +692,30 @@ void AnimationImporter:: Assign_color_animations(const COLLADAFW::AnimationList:
                }
 }
 
-void AnimationImporter:: Assign_float_animations(const COLLADAFW::AnimationList::AnimationBinding * binding,
-                                                                                                std::vector<FCurve*>* curves, char * anim_type)
+void AnimationImporter:: Assign_float_animations(const COLLADAFW::UniqueId& listid, ListBase *AnimCurves, char * anim_type)
 {
        char rna_path[100];
-       BLI_strncpy(rna_path, anim_type , sizeof(rna_path));
-
-       modify_fcurve(curves, rna_path, 0 );
+       if (animlist_map.find(listid) == animlist_map.end()) return ;
+       else 
+       {
+               //transformation has animations
+               const COLLADAFW::AnimationList *animlist = animlist_map[listid];
+               const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
+               //all the curves belonging to the current binding
+               std::vector<FCurve*> animcurves;    
+               for (unsigned int j = 0; j < bindings.getCount(); j++) {
+                        animcurves = curve_map[bindings[j].animation];
+                       //calculate rnapaths and array index of fcurves according to transformation and animation class
+                        BLI_strncpy(rna_path, anim_type , sizeof(rna_path));
+                        modify_fcurve(&animcurves, rna_path, 0 );
+                        std::vector<FCurve*>::iterator iter;
+                               //Add the curves of the current animation to the object
+                               for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
+                                       FCurve * fcu = *iter;
+                                       BLI_addtail(AnimCurves, fcu);   
+                               }                               
+               }
+       }
        
 }
 
@@ -787,7 +804,7 @@ void AnimationImporter::translate_Animations_NEW ( COLLADAFW::Node * node ,
                }
        }
 
-       if ( ((animType & LIGHT_COLOR) != 0)|| ((animType & LIGHT_FOA) != 0) )
+       if ( ((animType & LIGHT_COLOR) != 0)|| ((animType & LIGHT_FOA) != 0) || ((animType & LIGHT_FOE) != 0) )
        {
                Lamp * lamp  = (Lamp*) ob->data;
 
@@ -799,58 +816,43 @@ void AnimationImporter::translate_Animations_NEW ( COLLADAFW::Node * node ,
 
                for (unsigned int i = 0; i < nodeLights.getCount(); i++) {
                        const COLLADAFW::Light *light = (COLLADAFW::Light *) FW_object_map[nodeLights[i]->getInstanciatedObjectId()];
+
                        if ((animType & LIGHT_COLOR) != 0)
                        {
                                const COLLADAFW::Color *col =  &(light->getColor());
                                const COLLADAFW::UniqueId& listid = col->getAnimationList();
-                               if (animlist_map.find(listid) == animlist_map.end()) continue ;
-                               else 
-                               {
-                                       //transformation has animations
-                                       const COLLADAFW::AnimationList *animlist = animlist_map[listid];
-                                       const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
-                                       //all the curves belonging to the current binding
-                                       std::vector<FCurve*> animcurves;    
-                                       for (unsigned int j = 0; j < bindings.getCount(); j++) {
-                                                animcurves = curve_map[bindings[j].animation];
-                                               //calculate rnapaths and array index of fcurves according to transformation and animation class
-                                                Assign_color_animations( &bindings[j], &animcurves); 
-                                               
-                                                std::vector<FCurve*>::iterator iter;
-                                                       //Add the curves of the current animation to the object
-                                                       for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
-                                                               FCurve * fcu = *iter;
-                                                               BLI_addtail(AnimCurves, fcu);   
-                                                       }                               
-                                       }
+                               //transformation has animations
+                               const COLLADAFW::AnimationList *animlist = animlist_map[listid];
+                               const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
+                               //all the curves belonging to the current binding
+                               std::vector<FCurve*> animcurves;    
+                               for (unsigned int j = 0; j < bindings.getCount(); j++) {
+                                        animcurves = curve_map[bindings[j].animation];
+                                       //calculate rnapaths and array index of fcurves according to transformation and animation class
+                                        Assign_color_animations( &bindings[j], &animcurves); 
+                                       
+                                        std::vector<FCurve*>::iterator iter;
+                                               //Add the curves of the current animation to the object
+                                               for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
+                                                       FCurve * fcu = *iter;
+                                                       BLI_addtail(AnimCurves, fcu);   
+                                               }                               
                                }
+                               
                        }
-                       if ((animType & LIGHT_FOA) != 0)
+                       if ((animType & LIGHT_FOA) != 0 )
                        {
                                const COLLADAFW::AnimatableFloat *foa =  &(light->getFallOffAngle());
                                const COLLADAFW::UniqueId& listid = foa->getAnimationList();
-                               if (animlist_map.find(listid) == animlist_map.end()) continue ;
-                               else 
-                               {
-                                       //transformation has animations
-                                       const COLLADAFW::AnimationList *animlist = animlist_map[listid];
-                                       const COLLADAFW::AnimationList::AnimationBindings& bindings = animlist->getAnimationBindings();
-                                       //all the curves belonging to the current binding
-                                       std::vector<FCurve*> animcurves;    
-                                       for (unsigned int j = 0; j < bindings.getCount(); j++) {
-                                                animcurves = curve_map[bindings[j].animation];
-                                               //calculate rnapaths and array index of fcurves according to transformation and animation class
-                                                Assign_float_animations( &bindings[j], &animcurves , "spot_size"); 
-                                               
-                                                std::vector<FCurve*>::iterator iter;
-                                                       //Add the curves of the current animation to the object
-                                                       for (iter = animcurves.begin(); iter != animcurves.end(); iter++) {
-                                                               FCurve * fcu = *iter;
-                                                               BLI_addtail(AnimCurves, fcu);   
-                                                       }                               
-                                       }
-                               }
-                       }               
+                               Assign_float_animations( listid ,AnimCurves, "spot_size"); 
+                       }
+                       if ( (animType & LIGHT_FOE) != 0 )
+                       {
+                               const COLLADAFW::AnimatableFloat *foe =  &(light->getFallOffExponent());
+                               const COLLADAFW::UniqueId& listid = foe->getAnimationList();
+                               Assign_float_animations( listid ,AnimCurves, "spot_blend"); 
+                       
+                       }
                }
        }
 }
@@ -894,6 +896,12 @@ int AnimationImporter::get_animation_type ( const COLLADAFW::Node * node ,
                if (animlist_map.find(foa_listid) != animlist_map.end()) 
                                type = type|LIGHT_FOA;
                
+               const COLLADAFW::AnimatableFloat *fallOffExpo =  &(light->getFallOffExponent());
+           const COLLADAFW::UniqueId& foe_listid = fallOffExpo ->getAnimationList();
+
+               if (animlist_map.find(foe_listid) != animlist_map.end()) 
+                               type = type|LIGHT_FOE;
+               
                if ( type != 0) break;
 
        }
index 623558c61fad47487422e311ec60808d992f21a8..5a9638d2bb272f32e117d4f8bcdef0a45e6376f2 100644 (file)
@@ -89,7 +89,8 @@ private:
                        INANIMATE = 0,
                        NODE_TRANSFORM = 1,
                        LIGHT_COLOR     = 2,
-                       LIGHT_FOA = 4
+                       LIGHT_FOA = 4,
+                       LIGHT_FOE = 8
                };
 public:
 
@@ -122,8 +123,7 @@ public:
        void Assign_color_animations(const COLLADAFW::AnimationList::AnimationBinding * binding,
                                                                 std::vector<FCurve*>* curves);
 
-       void Assign_float_animations(const COLLADAFW::AnimationList::AnimationBinding * binding,
-                                                                                                std::vector<FCurve*>* curves, char * anim_type);
+       void Assign_float_animations(const COLLADAFW::UniqueId& listid, ListBase *AnimCurves, char * anim_type);
 
        void modify_fcurve(std::vector<FCurve*>* curves , char* rna_path , int array_index );
        // prerequisites: