Commit: 482d3522b4e7365e226d33ccac11907437975f36
Author: Gaia Clary
Date:   Wed Apr 10 22:22:26 2019 +0200
Branches: collada
https://developer.blender.org/rB482d3522b4e7365e226d33ccac11907437975f36

feature: Collada export:added global axis transform option(wip)

===================================================================

M       source/blender/collada/AnimationExporter.cpp
M       source/blender/collada/AnimationExporter.h
M       source/blender/collada/BCAnimationSampler.cpp
M       source/blender/collada/BCAnimationSampler.h
M       source/blender/collada/BCSampleData.cpp
M       source/blender/collada/BCSampleData.h
M       source/blender/collada/BlenderContext.h
M       source/blender/collada/DocumentExporter.cpp
M       source/blender/collada/ExportSettings.h
M       source/blender/collada/GeometryExporter.cpp
M       source/blender/collada/SceneExporter.h
M       source/blender/collada/TransformWriter.cpp
M       source/blender/collada/collada_utils.cpp

===================================================================

diff --git a/source/blender/collada/AnimationExporter.cpp 
b/source/blender/collada/AnimationExporter.cpp
index 1a52586f03a..b2eb9c1fbdb 100644
--- a/source/blender/collada/AnimationExporter.cpp
+++ b/source/blender/collada/AnimationExporter.cpp
@@ -78,7 +78,7 @@ void AnimationExporter::close_animation_container(bool 
has_container)
 
 bool AnimationExporter::exportAnimations()
 {
-       Scene *sce = blender_context.get_scene();
+       Scene *sce = export_settings.get_scene();
 
        LinkNode &export_set = *this->export_settings.get_export_set();
        bool has_anim_data = bc_has_animations(sce, export_set);
@@ -88,16 +88,10 @@ bool AnimationExporter::exportAnimations()
                BCObjectSet animated_subset;
                
BCAnimationSampler::get_animated_from_export_set(animated_subset, export_set);
                animation_count = animated_subset.size();
-               BCAnimationSampler animation_sampler(blender_context, 
animated_subset);
+               BCAnimationSampler animation_sampler(export_settings, 
animated_subset);
 
                try {
-                       animation_sampler.sample_scene(
-                               export_settings.get_sampling_rate(),
-                               /*keyframe_at_end = */ true,
-                               export_settings.get_open_sim(),
-                               export_settings.get_keep_keyframes(),
-                               export_settings.get_export_animation_type()
-                       );
+                       animation_sampler.sample_scene(export_settings, 
/*keyframe_at_end = */ true);
 
                        openLibrary();
 
@@ -234,11 +228,24 @@ void AnimationExporter::export_matrix_animation(Object 
*ob, BCAnimationSampler &
 
                        std::string target = translate_id(name) + '/' + 
channel_type;
 
-                       export_collada_matrix_animation(id, name, target, 
frames, samples);
+                       BC_global_rotation_type global_rotation_type = 
get_global_rotation_type(ob);
+                       export_collada_matrix_animation(id, name, target, 
frames, samples, global_rotation_type, ob->parentinv);
                }
        }
 }
 
+BC_global_rotation_type AnimationExporter::get_global_rotation_type(Object *ob)
+{
+       bool is_export_root = this->export_settings.is_export_root(ob);
+       if (!is_export_root) {
+               return BC_NO_ROTATION;
+       }
+
+       bool apply_global_rotation = 
this->export_settings.get_apply_global_orientation();
+
+       return (apply_global_rotation) ? BC_DATA_ROTATION : BC_OBJECT_ROTATION;
+}
+
 //write bone animations in transform matrix sources
 void AnimationExporter::export_bone_animations_recursive(Object *ob, Bone 
*bone, BCAnimationSampler &sampler)
 {
@@ -344,7 +351,8 @@ void AnimationExporter::export_curve_animation(
                collada_target += "/" + get_collada_sid(curve, axis);
        }
 
-       export_collada_curve_animation(id, curve_name, collada_target, axis, 
curve);
+       BC_global_rotation_type global_rotation_type = 
get_global_rotation_type(ob);
+       export_collada_curve_animation(id, curve_name, collada_target, axis, 
curve, global_rotation_type);
 
 }
 
@@ -356,7 +364,8 @@ void AnimationExporter::export_bone_animation(Object *ob, 
Bone *bone, BCFrames &
        std::string id = bc_get_action_id(id_name(action), name, bone_name, 
"pose_matrix");
        std::string target = translate_id(id_name(ob) + "_" + bone_name) + 
"/transform";
 
-       export_collada_matrix_animation(id, name, target, frames, samples);
+       BC_global_rotation_type global_rotation_type = 
get_global_rotation_type(ob);
+       export_collada_matrix_animation(id, name, target, frames, samples, 
global_rotation_type, ob->parentinv);
 }
 
 bool AnimationExporter::is_bone_deform_group(Bone *bone)
@@ -382,7 +391,8 @@ void AnimationExporter::export_collada_curve_animation(
        std::string name,
        std::string collada_target,
        std::string axis,
-       BCAnimationCurve &curve)
+       BCAnimationCurve &curve,
+       BC_global_rotation_type global_rotation_type)
 {
        BCFrames frames;
        BCValues values;
@@ -430,14 +440,14 @@ void AnimationExporter::export_collada_curve_animation(
        closeAnimation();
 }
 
-void AnimationExporter::export_collada_matrix_animation(std::string id, 
std::string name, std::string target, BCFrames &frames, BCMatrixSampleMap 
&samples)
+void AnimationExporter::export_collada_matrix_animation(std::string id, 
std::string name, std::string target, BCFrames &frames, BCMatrixSampleMap 
&samples, BC_global_rotation_type global_rotation_type, Matrix &parentinv)
 {
        fprintf(stdout, "Export animation matrix %s (%d control points)\n", 
id.c_str(), int(frames.size()));
 
        openAnimationWithClip(id, name);
 
        std::string input_id = 
collada_source_from_values(BC_SOURCE_TYPE_TIMEFRAME, 
COLLADASW::InputSemantic::INPUT, frames, id, "");
-       std::string output_id = collada_source_from_values(samples, id);
+       std::string output_id = collada_source_from_values(samples, id, 
global_rotation_type, parentinv);
        std::string interpolation_id = 
collada_linear_interpolation_source(frames.size(), id);
 
        std::string sampler_id = std::string(id) + SAMPLER_ID_SUFFIX;
@@ -516,7 +526,8 @@ void 
AnimationExporter::add_source_parameters(COLLADASW::SourceBase::ParameterNa
 
 std::string 
AnimationExporter::collada_tangent_from_curve(COLLADASW::InputSemantic::Semantics
 semantic, BCAnimationCurve &curve, const std::string& anim_id, std::string 
axis_name)
 {
-       Scene *scene = blender_context.get_scene();
+       Scene *scene = this->export_settings.get_scene();
+
        std::string channel = curve.get_channel_target();
 
        const std::string source_id = anim_id + get_semantic_suffix(semantic);
@@ -562,6 +573,7 @@ std::string AnimationExporter::collada_source_from_values(
        const std::string& anim_id,
        const std::string axis_name)
 {
+       BlenderContext &blender_context = 
this->export_settings.get_blender_context();
        Scene *scene = blender_context.get_scene();
        /* T can be float, int or double */
 
@@ -602,7 +614,7 @@ std::string AnimationExporter::collada_source_from_values(
 /*
  * Create a collada matrix source for a set of samples
 */
-std::string AnimationExporter::collada_source_from_values(BCMatrixSampleMap 
&samples, const std::string &anim_id)
+std::string AnimationExporter::collada_source_from_values(BCMatrixSampleMap 
&samples, const std::string &anim_id, BC_global_rotation_type 
global_rotation_type, Matrix &parentinv)
 {
        COLLADASW::InputSemantic::Semantics semantic = 
COLLADASW::InputSemantic::OUTPUT;
        std::string source_id = anim_id + get_semantic_suffix(semantic);
@@ -621,9 +633,10 @@ std::string 
AnimationExporter::collada_source_from_values(BCMatrixSampleMap &sam
        BCMatrixSampleMap::iterator it;
        int precision = (this->export_settings.get_limit_precision()) ? 6 : -1; 
// could be made configurable
        for (it = samples.begin(); it != samples.end(); it++) {
-               const BCMatrix *sample = it->second;
-               double daemat[4][4];
-               sample->get_matrix(daemat, true, precision);
+               BCMatrix sample = BCMatrix(*it->second);
+               DMatrix daemat;
+               
sample.add_transform(this->export_settings.get_global_transform());
+               sample.get_matrix(daemat, true, precision);
                source.appendValues(daemat);
        }
 
diff --git a/source/blender/collada/AnimationExporter.h 
b/source/blender/collada/AnimationExporter.h
index 70f3f786658..cf55a98ad95 100644
--- a/source/blender/collada/AnimationExporter.h
+++ b/source/blender/collada/AnimationExporter.h
@@ -87,18 +87,25 @@ typedef enum BC_animation_source_type {
        BC_SOURCE_TYPE_TIMEFRAME
 } BC_animation_source_type;
 
+typedef enum BC_global_rotation_type {
+       BC_NO_ROTATION,
+       BC_OBJECT_ROTATION,
+       BC_DATA_ROTATION
+} BC_global_rotation_type;
+
 class AnimationExporter: COLLADASW::LibraryAnimations
 {
 private:
-       BlenderContext &blender_context;
+
        COLLADASW::StreamWriter *sw;
        BCExportSettings &export_settings;
 
+       BC_global_rotation_type get_global_rotation_type(Object *ob);
+
 public:
 
-       AnimationExporter(BlenderContext &blender_context, 
COLLADASW::StreamWriter *sw, BCExportSettings &export_settings):
+       AnimationExporter(COLLADASW::StreamWriter *sw, BCExportSettings 
&export_settings):
                COLLADASW::LibraryAnimations(sw),
-               blender_context(blender_context),
                sw(sw),
                export_settings(export_settings)
        {}
@@ -178,7 +185,8 @@ protected:
                std::string name,
                std::string target,
                std::string axis,
-               BCAnimationCurve &curve);
+               BCAnimationCurve &curve,
+                   BC_global_rotation_type global_rotation_type);
 
        /* call to the low level collada exporter */
        void export_collada_matrix_animation(
@@ -186,7 +194,9 @@ protected:
                std::string name,
                std::string target,
                BCFrames &frames,
-               BCMatrixSampleMap &outmats);
+               BCMatrixSampleMap &outmats,
+                   BC_global_rotation_type global_rotation_type,
+                   Matrix &parentinv);
 
        BCAnimationCurve *get_modified_export_curve(Object *ob, 
BCAnimationCurve &curve, BCAnimationCurveMap &curves);
 
@@ -206,7 +216,9 @@ protected:
        /* Output sources (matrix data) */
        std::string collada_source_from_values(
                BCMatrixSampleMap &samples,
-               const std::string& anim_id);
+               const std::string& anim_id,
+                       BC_global_rotation_type global_rotation_type,
+                       Matrix &parentinv);
 
        /* Interpolation sources */
        std::string collada_linear_interpolation_source(
diff --git a/source/blender/collada/BCAnimationSampler.cpp 
b/source/blender/collada/BCAnimationSampler.cpp
index afc37191e2e..e21ad090570 100644
--- a/source/blender/collada/BCAnimationSampler.cpp
+++ b/source/blender/collada/BCAnimationSampler.cpp
@@ -44,8 +44,8 @@ extern "C" {
 static std::string EMPTY_STRING;
 static BCAnimationCurveMap BCEmptyAnimationCurves;
 
-BCAnimationSampler::BCAnimationSampler(BlenderContext &blender_context, 
BCObjectSet &object_set):
-       blender_context(blender_context)
+BCAnimationSampler::BCAnimationSampler(BCExportSettings &export_settings, 
BCObjectSet &object_set):
+       export_settings(export_settings)
 {
        BCObjectSet::iterator it;
        for (it = object_set.begin(); it != object_set.end(); ++it) {
@@ -65,6 +65,7 @@ BCAnimationSampler::~BCAnimationSampler()
 
 void BCAnimationSampler::add_object(Object *ob)
 {
+       BlenderContext blender_context = export_settings.get_blender_context();
        BCAnimation *animation = new BCAnimation(blender_context.get_context(), 
ob);
        objects[ob] = animation;
 
@@ -150,6 +151,10 @@ void 
BCAnimationSampler::update_animation_curves(BCAnimation &animation, BCSampl
 BCSample &BCAnimationSampler::sample_object(Object *ob, int frame_index, bool 
for_opensim)
 {
        BCSample &ob_sample = sample_data.add(ob, frame_index);
+       //if (export_settings.get_appl

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to