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:
Diffstat (limited to 'source/blender/collada/TransformWriter.cpp')
-rw-r--r--source/blender/collada/TransformWriter.cpp61
1 files changed, 22 insertions, 39 deletions
diff --git a/source/blender/collada/TransformWriter.cpp b/source/blender/collada/TransformWriter.cpp
index 2ab9105976e..0cbb8c65cf1 100644
--- a/source/blender/collada/TransformWriter.cpp
+++ b/source/blender/collada/TransformWriter.cpp
@@ -28,8 +28,10 @@
void TransformWriter::add_node_transform(COLLADASW::Node &node,
float mat[4][4],
float parent_mat[4][4],
- bool limit_precision)
+ BCExportSettings &export_settings
+ )
{
+ // bool limit_precision = export_settings.limit_precision;
float loc[3], rot[3], scale[3];
float local[4][4];
@@ -42,67 +44,48 @@ void TransformWriter::add_node_transform(COLLADASW::Node &node,
copy_m4_m4(local, mat);
}
+ if (export_settings.get_apply_global_orientation()) {
+ bc_apply_global_transform(local, export_settings.get_global_transform());
+ }
+
double dmat[4][4];
UnitConverter *converter = new UnitConverter();
converter->mat4_to_dae_double(dmat, local);
delete converter;
- bc_decompose(local, loc, rot, NULL, scale);
-
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()
node.addMatrix("transform", dmat);
}
else {
+ bc_decompose(local, loc, rot, NULL, scale);
add_transform(node, loc, rot, scale);
}
}
void TransformWriter::add_node_transform_ob(COLLADASW::Node &node,
Object *ob,
- BC_export_transformation_type transformation_type,
- bool limit_precision)
+ BCExportSettings &export_settings)
{
-#if 0
- float rot[3], loc[3], scale[3];
-
- if (ob->parent) {
- float C[4][4], tmat[4][4], imat[4][4], mat[4][4];
-
- // factor out scale from obmat
-
- copy_v3_v3(scale, ob->scale);
-
- ob->scale[0] = ob->scale[1] = ob->scale[2] = 1.0f;
- BKE_object_to_mat4(ob, C);
- copy_v3_v3(ob->scale, scale);
-
- mul_m4_series(tmat, ob->parent->obmat, ob->parentinv, C);
-
- // calculate local mat
-
- invert_m4_m4(imat, ob->parent->obmat);
- mul_m4_m4m4(mat, imat, tmat);
+ BC_export_transformation_type transformation_type =
+ export_settings.get_export_transformation_type();
+ bool limit_precision = export_settings.get_limit_precision();
- // done
+ /* Export the local Matrix (relative to the object parent,
+ * be it an object, bone or vertex(-tices)). */
+ Matrix f_obmat;
+ BKE_object_matrix_local_get(ob, f_obmat);
- mat4_to_eul(rot, mat);
- copy_v3_v3(loc, mat[3]);
+ if (export_settings.get_apply_global_orientation()) {
+ bc_apply_global_transform(f_obmat, export_settings.get_global_transform());
}
else {
- copy_v3_v3(loc, ob->loc);
- copy_v3_v3(rot, ob->rot);
- copy_v3_v3(scale, ob->scale);
+ bc_add_global_transform(f_obmat, export_settings.get_global_transform());
}
- add_transform(node, loc, rot, scale);
-#endif
-
- /* Export the local Matrix (relative to the object parent,
- * be it an object, bone or vertex(-tices)). */
- float f_obmat[4][4];
- BKE_object_matrix_local_get(ob, f_obmat);
-
switch (transformation_type) {
case BC_TRANSFORMATION_TYPE_MATRIX: {
UnitConverter converter;