[Bf-blender-cvs] [9afc694c133] collada: refactor: Collada: Reorganize=ing Classes and add new utility functions
Gaia Clary
noreply at git.blender.org
Wed Apr 10 22:40:15 CEST 2019
Commit: 9afc694c13389550cd51e5e01bc6b3589c211df2
Author: Gaia Clary
Date: Thu Apr 4 17:11:04 2019 +0200
Branches: collada
https://developer.blender.org/rB9afc694c13389550cd51e5e01bc6b3589c211df2
refactor: Collada: Reorganize=ing Classes and add new utility functions
- Added new utility methods to collada_utils
- Made BCMatrix class more powerfull for future usage
- Moved Blender related data structures and definitions to BlenderContext.h
- Adjusted according to changes above
===================================================================
M source/blender/collada/BCSampleData.cpp
M source/blender/collada/BCSampleData.h
M source/blender/collada/BlenderContext.h
M source/blender/collada/ExportSettings.h
M source/blender/collada/collada_utils.cpp
M source/blender/collada/collada_utils.h
===================================================================
diff --git a/source/blender/collada/BCSampleData.cpp b/source/blender/collada/BCSampleData.cpp
index 812ac3c2a5a..8f67278e9d8 100644
--- a/source/blender/collada/BCSampleData.cpp
+++ b/source/blender/collada/BCSampleData.cpp
@@ -53,6 +53,28 @@ BCMatrix::BCMatrix(Object *ob)
set_transform(ob);
}
+BCMatrix::BCMatrix()
+{
+ unit();
+}
+
+BCMatrix::BCMatrix(BC_global_forward_axis global_forward_axis, BC_global_up_axis global_up_axis)
+{
+ float mrot[3][3];
+ float mat[4][4];
+ mat3_from_axis_conversion(
+ BC_DEFAULT_FORWARD,
+ BC_DEFAULT_UP,
+ global_forward_axis,
+ global_up_axis,
+ mrot);
+
+ transpose_m3(mrot); // Assume that mat3_from_axis_conversion() returns a transposed matrix
+ copy_m4_m3(mat, mrot);
+ set_transform(mat);
+}
+
+
void BCMatrix::set_transform(Matrix &mat)
{
copy_m4_m4(matrix, mat);
@@ -129,14 +151,16 @@ void BCMatrix::sanitize(Matrix &mat, int precision)
void BCMatrix::unit()
{
- unit_m4(matrix);
+ unit_m4(this->matrix);
+ mat4_decompose(this->loc, this->q, this->size, this->matrix);
+ quat_to_eul(this->rot, this->q);
}
/*
We need double here because the OpenCollada API needs it.
precision = -1 indicates to not limit the precision
*/
-void BCMatrix::get_matrix(double(&mat)[4][4], const bool transposed, const int precision) const
+void BCMatrix::get_matrix(DMatrix &mat, const bool transposed, const int precision) const
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++) {
@@ -147,6 +171,21 @@ void BCMatrix::get_matrix(double(&mat)[4][4], const bool transposed, const int p
}
}
+void BCMatrix::get_matrix(Matrix &mat, const bool transposed, const int precision, const bool inverted) const
+{
+ for (int i = 0; i < 4; i++)
+ for (int j = 0; j < 4; j++) {
+ float val = (transposed) ? matrix[j][i] : matrix[i][j];
+ if (precision >= 0)
+ val = floor((val * pow(10, precision) + 0.5)) / pow(10, precision);
+ mat[i][j] = val;
+ }
+
+ if (inverted) {
+ invert_m4(mat);
+ }
+}
+
const bool BCMatrix::in_range(const BCMatrix &other, float distance) const
{
for (int i = 0; i < 4; i++) {
diff --git a/source/blender/collada/BCSampleData.h b/source/blender/collada/BCSampleData.h
index ec7f14f8c3a..81e0e514ae2 100644
--- a/source/blender/collada/BCSampleData.h
+++ b/source/blender/collada/BCSampleData.h
@@ -24,6 +24,8 @@
#include <map>
#include <algorithm>
+#include "ExportSettings.h"
+
extern "C"
{
#include "BKE_object.h"
@@ -35,8 +37,6 @@ extern "C"
#include "DNA_camera_types.h"
}
-typedef float(Matrix)[4][4];
-
class BCMatrix {
private:
@@ -58,10 +58,13 @@ public:
float(&scale() const)[3];
float(&quat() const)[4];
+ BCMatrix(BC_global_forward_axis global_forward_axis, BC_global_up_axis global_up_axis);
BCMatrix(Matrix &mat);
BCMatrix(Object *ob);
+ BCMatrix();
- void get_matrix(double(&mat)[4][4], const bool transposed = false, const int precision = -1) const;
+ void get_matrix(DMatrix &matrix, const bool transposed=false, const int precision=-1) const;
+ void get_matrix(Matrix &matrix, const bool transposed=false, const int precision=-1, const bool inverted=false) const;
const bool in_range(const BCMatrix &other, float distance) const;
static void sanitize(Matrix &matrix, int precision);
diff --git a/source/blender/collada/BlenderContext.h b/source/blender/collada/BlenderContext.h
index c6c9063e253..64c10e04e9c 100644
--- a/source/blender/collada/BlenderContext.h
+++ b/source/blender/collada/BlenderContext.h
@@ -21,12 +21,42 @@
#ifndef __BLENDERCONTEXT_H__
#define __BLENDERCONTEXT_H__
+#ifdef __cplusplus
extern "C" {
+#endif
+
#include "DNA_object_types.h"
#include "BKE_context.h"
#include "BKE_main.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
+
+typedef float(Vector)[3];
+typedef float(Matrix)[4][4];
+typedef double(DMatrix)[4][4];
+
+typedef enum BC_global_forward_axis {
+ BC_GLOBAL_FORWARD_X = 0,
+ BC_GLOBAL_FORWARD_Y = 1,
+ BC_GLOBAL_FORWARD_Z = 2,
+ BC_GLOBAL_FORWARD_MINUS_X = 3,
+ BC_GLOBAL_FORWARD_MINUS_Y = 4,
+ BC_GLOBAL_FORWARD_MINUS_Z = 5
+} BC_global_forward_axis;
+
+typedef enum BC_global_up_axis {
+ BC_GLOBAL_UP_X = 0,
+ BC_GLOBAL_UP_Y = 1,
+ BC_GLOBAL_UP_Z = 2,
+ BC_GLOBAL_UP_MINUS_X = 3,
+ BC_GLOBAL_UP_MINUS_Y = 4,
+ BC_GLOBAL_UP_MINUS_Z = 5
+} BC_global_up_axis;
+
+static const BC_global_forward_axis BC_DEFAULT_FORWARD = BC_GLOBAL_FORWARD_Y;
+static const BC_global_up_axis BC_DEFAULT_UP = BC_GLOBAL_UP_Z;
+
+#ifdef __cplusplus
}
class BlenderContext
@@ -48,5 +78,6 @@ public:
ViewLayer *get_view_layer();
Main *get_main();
};
+#endif
#endif
diff --git a/source/blender/collada/ExportSettings.h b/source/blender/collada/ExportSettings.h
index 7c73f6d7f29..19264520763 100644
--- a/source/blender/collada/ExportSettings.h
+++ b/source/blender/collada/ExportSettings.h
@@ -26,27 +26,7 @@ extern "C" {
#endif
#include "BLI_linklist.h"
-
-typedef enum BC_export_global_forward_axis {
- BC_GLOBAL_FORWARD_X = 0,
- BC_GLOBAL_FORWARD_Y = 1,
- BC_GLOBAL_FORWARD_Z = 2,
- BC_GLOBAL_FORWARD_MINUS_X = 3,
- BC_GLOBAL_FORWARD_MINUS_Y = 4,
- BC_GLOBAL_FORWARD_MINUS_Z = 5
-} BC_export_global_forward_axis;
-
-typedef enum BC_export_global_up_axis {
- BC_GLOBAL_UP_X = 0,
- BC_GLOBAL_UP_Y = 1,
- BC_GLOBAL_UP_Z = 2,
- BC_GLOBAL_UP_MINUS_X = 3,
- BC_GLOBAL_UP_MINUS_Y = 4,
- BC_GLOBAL_UP_MINUS_Z = 5
-} BC_export_global_up_axis;
-
-static const BC_export_global_forward_axis BC_DEFAULT_FORWARD = BC_GLOBAL_FORWARD_Y;
-static const BC_export_global_up_axis BC_DEFAULT_UP = BC_GLOBAL_UP_Z;
+#include "BlenderContext.h"
typedef enum BC_export_mesh_type {
BC_MESH_TYPE_VIEW,
@@ -74,8 +54,8 @@ typedef enum BC_ui_export_section {
typedef struct ExportSettings {
bool apply_modifiers;
- BC_export_global_forward_axis global_forward;
- BC_export_global_up_axis global_up;
+ BC_global_forward_axis global_forward;
+ BC_global_up_axis global_up;
bool apply_global_orientation;
BC_export_mesh_type export_mesh_type;
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index 0084ff84e4d..93b8b15076f 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -1050,6 +1050,32 @@ bool bc_has_animations(Scene *sce, LinkNode &export_set)
return false;
}
+void bc_add_global_transform(Matrix &to_mat, const Matrix &from_mat, const BCMatrix &global_transform, const bool invert)
+{
+ copy_m4_m4(to_mat, from_mat);
+ bc_add_global_transform(to_mat, global_transform, invert);
+}
+
+void bc_add_global_transform(Vector &to_vec, const Vector &from_vec, const BCMatrix &global_transform, const bool invert)
+{
+ copy_v3_v3(to_vec, from_vec);
+ bc_add_global_transform(to_vec, global_transform, invert);
+}
+
+void bc_add_global_transform(Matrix &to_mat, const BCMatrix &global_transform, const bool invert)
+{
+ Matrix mat;
+ global_transform.get_matrix(mat, false, 6, invert);
+ mul_m4_m4m4(to_mat, mat, to_mat);
+}
+
+void bc_add_global_transform(Vector &to_vec, const BCMatrix &global_transform, const bool invert)
+{
+ Matrix mat;
+ global_transform.get_matrix(mat, false, 6, invert);
+ mul_v3_m4v3(to_vec, mat, to_vec);
+}
+
/**
* Check if custom information about bind matrix exists and modify the from_mat
* accordingly.
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index 99a805e8b19..2df53a661d7 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -223,8 +223,43 @@ extern bool bc_is_animated(BCMatrixSampleMap &values);
extern bool bc_has_animations(Scene *sce, LinkNode &node);
extern bool bc_has_animations(Object *ob);
+void bc_add_global_transform(Matrix &to_mat, const Matrix &from_mat, const BCMatrix &global_transform, const bool invert = false);
+void bc_add_global_transform(Vector &to_vec, const Vector &from_vec, const BCMatrix &global_transform, const bool invert = false);
-extern void bc_create_restpose_mat(const ExportSettings *export_settings, Bone *bone, float to_mat[4][4], float world[4][4], bool use_local_space);
+void bc_add_global_transform(Vector &to_vec, const BCMatrix &global_transform, const bool invert = false);
+void bc_add_global_transform(Matrix &to_mat, const BCMatrix &global_transform, const bool invert = false);
+
+extern void bc_create_restpose_mat(const ExportSettings *export_settings, Bone *bone, float to_mat[4][4], float from_mat[4][4], bool use_local_space);
+
+class ColladaBaseNodes
+{
+private:
+ std::vector<Object *> base_objects;
+
+public:
+
+ void add(Object *ob)
+ {
+ base_objects.push_back(ob);
+ }
+
+ bool contains(Object *ob)
+ {
+ std::vector<Object *>::iterator it = std::find(base_objects.begin(), base_objects.end(), ob);
+ return (it != base_objects.end());
+ }
+
+ int size()
+ {
+ return base_objects.size();
+ }
+
+ Object *get(int index)
+ {
+ return base_objects[index];
+ }
+
+};
class BCPolygonNormalsIndices
{
More information about the Bf-blender-cvs
mailing list