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>2013-07-30 01:22:59 +0400
committerGaia Clary <gaia.clary@machinimatrix.org>2013-07-30 01:22:59 +0400
commitc8958eea295a7dac07b02e50b81e377545cea7a0 (patch)
tree0e58a658cf821c6315f9bd8a9dca0d2cdbf091d9 /source/blender/collada/collada_internal.cpp
parentc0875290bcd12904404a9faae479efa092cd5dbd (diff)
Added Scene scale calculator to UnitConverter for future usage (wip)
Diffstat (limited to 'source/blender/collada/collada_internal.cpp')
-rw-r--r--source/blender/collada/collada_internal.cpp49
1 files changed, 47 insertions, 2 deletions
diff --git a/source/blender/collada/collada_internal.cpp b/source/blender/collada/collada_internal.cpp
index 069419f938b..5f99434c43f 100644
--- a/source/blender/collada/collada_internal.cpp
+++ b/source/blender/collada/collada_internal.cpp
@@ -27,7 +27,7 @@
/* COLLADABU_ASSERT, may be able to remove later */
#include "COLLADABUPlatform.h"
-#include "collada_internal.h"
+#include "collada_utils.h"
#include "BLI_linklist.h"
@@ -40,7 +40,7 @@ UnitConverter::UnitConverter() : unit(), up_axis(COLLADAFW::FileInfo::Z_UP)
rotate_m4(y_up_mat4, 'X', 0.5 * M_PI);
unit_m4(z_up_mat4);
-
+ unit_m4(size_mat4);
}
void UnitConverter::read_asset(const COLLADAFW::FileInfo *asset)
@@ -124,6 +124,51 @@ float(&UnitConverter::get_rotation())[4][4]
}
}
+
+float(&UnitConverter::get_scale())[4][4]
+{
+ return size_mat4;
+}
+
+void UnitConverter::calculate_scale(Scene &sce)
+{
+ PointerRNA scene_ptr, unit_settings;
+ PropertyRNA *system_ptr, *scale_ptr;
+ RNA_id_pointer_create(&sce.id, &scene_ptr);
+
+ unit_settings = RNA_pointer_get(&scene_ptr, "unit_settings");
+ system_ptr = RNA_struct_find_property(&unit_settings, "system");
+ scale_ptr = RNA_struct_find_property(&unit_settings, "scale_length");
+
+ int type = RNA_property_enum_get(&unit_settings, system_ptr);
+
+ float bl_scale;
+
+ switch (type) {
+ case USER_UNIT_NONE:
+ bl_scale = 1.0; // map 1 Blender unit to 1 Meter
+ break;
+
+ case USER_UNIT_METRIC:
+ bl_scale = RNA_property_float_get(&unit_settings, scale_ptr);
+ break;
+
+ default :
+ bl_scale = RNA_property_float_get(&unit_settings, scale_ptr);
+ // it looks like the conversion to Imperial is done implicitly.
+ // So nothing to do here.
+ break;
+ }
+
+ float axis_mat4[4][4];
+ unit_m4(axis_mat4);
+
+ float rescale[3];
+ rescale[0] = rescale[1] = rescale[2] = getLinearMeter() / bl_scale;
+
+ size_to_mat4(size_mat4, rescale);
+}
+
void TransformBase::decompose(float mat[4][4], float *loc, float eul[3], float quat[4], float *size)
{
mat4_to_size(size, mat);