Revision: 49796
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49796
Author:   phabtar
Date:     2012-08-11 09:32:25 +0000 (Sat, 11 Aug 2012)
Log Message:
-----------
[COLLADA] Morph export fixes and fiddling. 

Modified Paths:
--------------
    branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.cpp
    branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.h
    branches/soc-2012-bratwurst/source/blender/collada/ControllerExporter.cpp
    branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp
    branches/soc-2012-bratwurst/source/blender/collada/collada_internal.cpp
    branches/soc-2012-bratwurst/source/blender/collada/collada_internal.h

Modified: 
branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.cpp    
2012-08-11 03:22:18 UTC (rev 49795)
+++ branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.cpp    
2012-08-11 09:32:25 UTC (rev 49796)
@@ -86,8 +86,9 @@
        }
     
     export_object_constraint_animation(ob);
-
-       export_morph_animation(ob);
+    
+       //This needs to be handled by extra profiles, so postponed for now
+       //export_morph_animation(ob);
                
        //Export Lamp parameter animations
        if ( (ob->type == OB_LAMP) && ((Lamp *)ob->data)->adt && ((Lamp 
*)ob->data)->adt->action) {
@@ -395,6 +396,9 @@
                if (ma)
                        target = translate_id(id_name(ma)) + "-effect" +
                                 "/common/" /*profile common is only supported 
*/ + get_transform_sid(fcu->rna_path, -1, axis_name, true);
+               //if shape key animation, this is the main problem, how to 
define the channel targets.
+               /*target = get_morph_id(ob) +
+                                "/value" +*/ 
        }
        addChannel(COLLADABU::URI(empty, sampler_id), target);
 
@@ -905,8 +909,7 @@
        bPoseChannel *parchan = NULL;
        bPoseChannel *pchan = NULL;
        bPoseChannel *rootchan = NULL;
-       bPoseChannel *itrpchan;
-       
+               
        if (ob->type == OB_ARMATURE ){
                bPose *pose = ob->pose;
                pchan = BKE_pose_channel_find_name(pose, bone->name);
@@ -1331,6 +1334,12 @@
                        }
                }
 
+               //check shape key animation
+               if(!fcu){
+                       Key *key = ob_get_key(ob);
+                       if(key && key->adt && key->adt->action)
+                               fcu = (FCurve *)key->adt->action->curves.first;
+               }
                if (fcu)
                        return true;
        }

Modified: branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.h      
2012-08-11 03:22:18 UTC (rev 49795)
+++ branches/soc-2012-bratwurst/source/blender/collada/AnimationExporter.h      
2012-08-11 09:32:25 UTC (rev 49796)
@@ -165,10 +165,12 @@
        std::string create_interpolation_source(FCurve *fcu, const std::string& 
anim_id, const char *axis_name, bool *has_tangents);
 
        std::string fake_interpolation_source(int tot, const std::string& 
anim_id, const char *axis_name);
+       
        // for rotation, axis name is always appended and the value of 
append_axis is ignored
        std::string get_transform_sid(char *rna_path, int tm_type, const char 
*axis_name, bool append_axis);
        std::string get_light_param_sid(char *rna_path, int tm_type, const char 
*axis_name, bool append_axis);
        std::string get_camera_param_sid(char *rna_path, int tm_type, const 
char *axis_name, bool append_axis);
+       
        void find_frames(Object *ob, std::vector<float> &fra, const char 
*prefix, const char *tm_name);
        void find_frames(Object *ob, std::vector<float> &fra);
 

Modified: 
branches/soc-2012-bratwurst/source/blender/collada/ControllerExporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/ControllerExporter.cpp   
2012-08-11 03:22:18 UTC (rev 49795)
+++ branches/soc-2012-bratwurst/source/blender/collada/ControllerExporter.cpp   
2012-08-11 09:32:25 UTC (rev 49796)
@@ -287,29 +287,6 @@
 
 void ControllerExporter::export_morph_controller(Object *ob, Key *key)
 {
-       // joint names
-       // joint inverse bind matrices
-       // vertex weights
-
-       // input:
-       // joint names: ob -> vertex group names
-       // vertex group weights: me->dvert -> groups -> index, weight
-
-#if 0
-       me->dvert :
-
-       typedef struct MDeformVert {
-               struct MDeformWeight *dw;
-               int totweight;
-               int flag;   // flag only in use for weightpaint now
-       } MDeformVert;
-
-       typedef struct MDeformWeight {
-               int def_nr;
-               float weight;
-       } MDeformWeight;
-#endif
-
        bool use_instantiation = 
this->export_settings->use_object_instantiation;
        Mesh *me;
 
@@ -321,7 +298,7 @@
        }
        BKE_mesh_tessface_ensure(me);
 
-       if (!me->dvert) return;
+       //if (!me->dvert) return;
 
        std::string controller_name = id_name(ob) + "-morph";
        std::string controller_id = get_controller_id(key, ob);
@@ -352,7 +329,7 @@
 
 std::string ControllerExporter::add_morph_targets(Key *key, Object *ob)
 {
-       std::string source_id = id_name(ob) + TARGETS_SOURCE_ID_SUFFIX;
+       std::string source_id = translate_id(id_name(ob)) + 
TARGETS_SOURCE_ID_SUFFIX;
 
        COLLADASW::IdRefSource source(mSW);
        source.setId(source_id);
@@ -369,7 +346,7 @@
                //skip the basis
        kb = kb->next;
        for (; kb; kb = kb->next) {
-               std::string geom_id = get_geometry_id(ob, false) + "_morph_" + 
kb->name;
+               std::string geom_id = get_geometry_id(ob, false) + "_morph_" + 
translate_id(id_name(kb));
                source.appendValues(geom_id);
 
        }
@@ -381,7 +358,7 @@
 
 std::string ControllerExporter::add_morph_weights(Key *key, Object *ob)
 {
-       std::string source_id = id_name(ob) + WEIGHTS_SOURCE_ID_SUFFIX;
+       std::string source_id = translate_id(id_name(ob)) + 
WEIGHTS_SOURCE_ID_SUFFIX;
 
        COLLADASW::FloatSourceF source(mSW);
        source.setId(source_id);

Modified: 
branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp     
2012-08-11 03:22:18 UTC (rev 49795)
+++ branches/soc-2012-bratwurst/source/blender/collada/GeometryExporter.cpp     
2012-08-11 09:32:25 UTC (rev 49796)
@@ -172,7 +172,7 @@
 }
 
 void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb){
-       std::string geom_id = get_geometry_id(ob, false) + "_morph_" + kb->name;
+       std::string geom_id = get_geometry_id(ob, false) + "_morph_" + 
translate_id(id_name(kb));
        std::vector<Normal> nor;
        std::vector<Face> norind;
        

Modified: 
branches/soc-2012-bratwurst/source/blender/collada/collada_internal.cpp
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/collada_internal.cpp     
2012-08-11 03:22:18 UTC (rev 49795)
+++ branches/soc-2012-bratwurst/source/blender/collada/collada_internal.cpp     
2012-08-11 09:32:25 UTC (rev 49796)
@@ -283,3 +283,9 @@
 {
        return translate_id(id_name(mat)) + "-material";
 }
+
+std::string get_morph_id(Object *ob)
+{
+       return translate_id(id_name(ob)) + "-morph";
+}
+

Modified: branches/soc-2012-bratwurst/source/blender/collada/collada_internal.h
===================================================================
--- branches/soc-2012-bratwurst/source/blender/collada/collada_internal.h       
2012-08-11 03:22:18 UTC (rev 49795)
+++ branches/soc-2012-bratwurst/source/blender/collada/collada_internal.h       
2012-08-11 09:32:25 UTC (rev 49796)
@@ -98,4 +98,6 @@
 
 extern std::string get_material_id(Material *mat);
 
+extern std::string get_morph_id(Object *ob);
+
 #endif /* __COLLADA_INTERNAL_H__ */

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

Reply via email to