diff options
author | Sukhitha Prabhath Jayathilake <pr.jayathilake@gmail.com> | 2011-07-05 22:02:08 +0400 |
---|---|---|
committer | Sukhitha Prabhath Jayathilake <pr.jayathilake@gmail.com> | 2011-07-05 22:02:08 +0400 |
commit | 9fca591c2b83cf26ee731450a591698ad74c6d29 (patch) | |
tree | b4f870b899f1c89441385f0404d5cf3d0b0c60cf /source | |
parent | 3f3c6f5f1fb336f8f0015d7857a1ae153fa2a80f (diff) |
Spot Light spot_blend animation im/export.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/collada/AnimationExporter.cpp | 3 | ||||
-rw-r--r-- | source/blender/collada/AnimationImporter.cpp | 106 | ||||
-rw-r--r-- | source/blender/collada/AnimationImporter.h | 6 |
3 files changed, 62 insertions, 53 deletions
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index fdd59c40ea5..6ebaef30a9c 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -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 ); diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp index 18d56ad8b2e..e21a9370935 100644 --- a/source/blender/collada/AnimationImporter.cpp +++ b/source/blender/collada/AnimationImporter.cpp @@ -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; } diff --git a/source/blender/collada/AnimationImporter.h b/source/blender/collada/AnimationImporter.h index 623558c61fa..5a9638d2bb2 100644 --- a/source/blender/collada/AnimationImporter.h +++ b/source/blender/collada/AnimationImporter.h @@ -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: |