Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaia Clary <gaia.clary@machinimatrix.org>2019-05-27 16:34:05 +0300
committerGaia Clary <gaia.clary@machinimatrix.org>2019-05-27 17:00:32 +0300
commitbc055258d5abdd692003e5ae175d2548183818a4 (patch)
tree8e06a1340c430745c8ee7b11f5c55a580faa712e /source/blender/collada
parent4db3916b60da565f11cb73d905458d66d0347c8a (diff)
fix: collada transformtype must be identical for animation export and object export
When exporting an object we can choose the transformation type 'Matrix' or 'trans/rot/scale' When exporting an animation we have the same choice regarding the used transformation type. However we must make sure that animations and objects use the same transformation type within one colleda export. The user interface is now reworked such that the correct settings are always guaranteed. I also reworked the tool tips
Diffstat (limited to 'source/blender/collada')
-rw-r--r--source/blender/collada/AnimationExporter.cpp2
-rw-r--r--source/blender/collada/ExportSettings.h12
-rw-r--r--source/blender/collada/SceneExporter.cpp2
-rw-r--r--source/blender/collada/TransformWriter.cpp36
-rw-r--r--source/blender/collada/TransformWriter.h2
5 files changed, 36 insertions, 18 deletions
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp
index edd74886541..2c6ae8a52f5 100644
--- a/source/blender/collada/AnimationExporter.cpp
+++ b/source/blender/collada/AnimationExporter.cpp
@@ -133,7 +133,7 @@ void AnimationExporter::exportAnimation(Object *ob, BCAnimationSampler &sampler)
* Note: For Armatures the skeletal animation has already been exported (see above)
* However Armatures also can have Object animation.
*/
- bool export_as_matrix = this->export_settings.get_export_transformation_type() ==
+ bool export_as_matrix = this->export_settings.get_animation_transformation_type() ==
BC_TRANSFORMATION_TYPE_MATRIX;
if (export_as_matrix) {
diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h
index 7112aeadb2a..ca118e4d14d 100644
--- a/source/blender/collada/ExportSettings.h
+++ b/source/blender/collada/ExportSettings.h
@@ -81,7 +81,8 @@ typedef struct ExportSettings {
bool use_object_instantiation;
bool use_blender_profile;
bool sort_by_name;
- BC_export_transformation_type export_transformation_type;
+ BC_export_transformation_type object_transformation_type;
+ BC_export_transformation_type animation_transformation_type;
bool open_sim;
bool limit_precision;
@@ -232,9 +233,14 @@ class BCExportSettings {
return export_settings.sort_by_name;
}
- BC_export_transformation_type get_export_transformation_type()
+ BC_export_transformation_type get_object_transformation_type()
{
- return export_settings.export_transformation_type;
+ return export_settings.object_transformation_type;
+ }
+
+ BC_export_transformation_type get_animation_transformation_type()
+ {
+ return export_settings.animation_transformation_type;
}
bool get_open_sim()
diff --git a/source/blender/collada/SceneExporter.cpp b/source/blender/collada/SceneExporter.cpp
index 22b2eed79d3..7bf6a145886 100644
--- a/source/blender/collada/SceneExporter.cpp
+++ b/source/blender/collada/SceneExporter.cpp
@@ -128,7 +128,7 @@ void SceneExporter::writeNode(Object *ob)
colladaNode.start();
if (ob->type == OB_MESH && armature_exported) {
/* for skinned mesh we write obmat in <bind_shape_matrix> */
- TransformWriter::add_node_transform_identity(colladaNode);
+ TransformWriter::add_node_transform_identity(colladaNode, this->export_settings);
}
else {
TransformWriter::add_node_transform_ob(colladaNode, ob, this->export_settings);
diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp
index 965338a9fd8..fbf75552b85 100644
--- a/source/blender/collada/TransformWriter.cpp
+++ b/source/blender/collada/TransformWriter.cpp
@@ -30,11 +30,8 @@ void TransformWriter::add_joint_transform(COLLADASW::Node &node,
float parent_mat[4][4],
BCExportSettings &export_settings,
bool has_restmat
-
)
{
- // bool limit_precision = export_settings.limit_precision;
- float loc[3], rot[3], scale[3];
float local[4][4];
if (parent_mat) {
@@ -55,14 +52,11 @@ void TransformWriter::add_joint_transform(COLLADASW::Node &node,
converter->mat4_to_dae_double(dmat, local);
delete converter;
- if (node.getType() == COLLADASW::Node::JOINT) {
- // XXX Why are joints handled differently ?
- // GC: I believe this is a mistake. Here we might want to
- // export according to how the transformation type
- // is set, see add_node_transform_ob()
+ if (export_settings.get_object_transformation_type() == BC_TRANSFORMATION_TYPE_MATRIX) {
node.addMatrix("transform", dmat);
}
else {
+ float loc[3], rot[3], scale[3];
bc_decompose(local, loc, rot, NULL, scale);
add_transform(node, loc, rot, scale);
}
@@ -73,7 +67,7 @@ void TransformWriter::add_node_transform_ob(COLLADASW::Node &node,
BCExportSettings &export_settings)
{
BC_export_transformation_type transformation_type =
- export_settings.get_export_transformation_type();
+ export_settings.get_object_transformation_type();
bool limit_precision = export_settings.get_limit_precision();
/* Export the local Matrix (relative to the object parent,
@@ -112,10 +106,28 @@ void TransformWriter::add_node_transform_ob(COLLADASW::Node &node,
}
}
-void TransformWriter::add_node_transform_identity(COLLADASW::Node &node)
+void TransformWriter::add_node_transform_identity(
+ COLLADASW::Node &node,
+ BCExportSettings &export_settings)
{
- float loc[3] = {0.0f, 0.0f, 0.0f}, scale[3] = {1.0f, 1.0f, 1.0f}, rot[3] = {0.0f, 0.0f, 0.0f};
- add_transform(node, loc, rot, scale);
+ BC_export_transformation_type transformation_type =
+ export_settings.get_object_transformation_type();
+ switch (transformation_type) {
+ case BC_TRANSFORMATION_TYPE_MATRIX: {
+ BCMatrix mat;
+ DMatrix d_obmat;
+ mat.get_matrix(d_obmat);
+ node.addMatrix("transform", d_obmat);
+ break;
+ }
+ default: {
+ float loc[3] = {0.0f, 0.0f, 0.0f};
+ float scale[3] = {1.0f, 1.0f, 1.0f};
+ float rot[3] = {0.0f, 0.0f, 0.0f};
+ add_transform(node, loc, rot, scale);
+ break;
+ }
+ }
}
void TransformWriter::add_transform(COLLADASW::Node &node,
diff --git a/source/blender/collada/TransformWriter.h b/source/blender/collada/TransformWriter.h
index e12c2053594..f0bfbaabbc2 100644
--- a/source/blender/collada/TransformWriter.h
+++ b/source/blender/collada/TransformWriter.h
@@ -39,7 +39,7 @@ class TransformWriter {
void add_node_transform_ob(COLLADASW::Node &node, Object *ob, BCExportSettings &export_settings);
- void add_node_transform_identity(COLLADASW::Node &node);
+ void add_node_transform_identity(COLLADASW::Node &node, BCExportSettings &export_settings);
private:
void add_transform(COLLADASW::Node &node, float loc[3], float rot[3], float scale[3]);