Commit: 3c9e11df37581c6faf937bbe974710a7fc95e380
Author: Bastien Montagne
Date:   Fri Aug 1 16:28:31 2014 +0200
Branches: master
https://developer.blender.org/rB3c9e11df37581c6faf937bbe974710a7fc95e380

Cleanup: Move SpaceTransform helpers from `BKE_shrinkwrap` to `BLI_math_matrix`.

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

M       source/blender/blenkernel/BKE_shrinkwrap.h
M       source/blender/blenkernel/intern/constraint.c
M       source/blender/blenkernel/intern/shrinkwrap.c
M       source/blender/blenlib/BLI_math_matrix.h
M       source/blender/blenlib/intern/math_matrix.c
M       source/blender/modifiers/intern/MOD_shrinkwrap.c
M       source/blender/modifiers/intern/MOD_simpledeform.c
M       source/blender/modifiers/intern/MOD_weightvgproximity.c

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

diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h 
b/source/blender/blenkernel/BKE_shrinkwrap.h
index d539d0b..070cd4a 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -31,43 +31,6 @@
  *  \ingroup bke
  */
 
-/* SpaceTransform stuff */
-/*
- * TODO: move this somewhere else
- *
- * this structs encapsulates all needed data to convert between 2 coordinate 
spaces
- * (where conversion can be represented by a matrix multiplication)
- *
- * This is used to reduce the number of arguments to pass to functions that 
need to perform
- * this kind of operation and make it easier for the coder, as he/she doenst 
needs to recode
- * the matrix calculation.
- *
- * A SpaceTransform is initialized using:
- *   SPACE_TRANSFORM_SETUP( &data,  ob1, ob2 )
- *
- * After that the following calls can be used:
- *   space_transform_apply (&data, co); //converts a coordinate in ob1 coords 
space to the corresponding ob2 coords
- *   space_transform_invert(&data, co); //converts a coordinate in ob2 coords 
space to the corresponding ob1 coords
- *
- *     //Same Concept as space_transform_apply and space_transform_invert, but 
no is normalized after conversion
- *   space_transform_apply_normal (&data, &no);
- *   space_transform_invert_normal(&data, &no);
- *
- */
-struct Object;
-
-typedef struct SpaceTransform {
-       float local2target[4][4];
-       float target2local[4][4];
-
-} SpaceTransform;
-
-void space_transform_from_matrixs(struct SpaceTransform *data, float 
local[4][4], float target[4][4]);
-void space_transform_apply(const struct SpaceTransform *data, float co[3]);
-void space_transform_invert(const struct SpaceTransform *data, float co[3]);
-
-#define SPACE_TRANSFORM_SETUP(data, local, target) 
space_transform_from_matrixs(data, (local)->obmat, (target)->obmat)
-
 /* Shrinkwrap stuff */
 #include "BKE_bvhutils.h"
 
@@ -91,6 +54,7 @@ struct MDeformVert;
 struct ShrinkwrapModifierData;
 struct MDeformVert;
 struct BVHTree;
+struct SpaceTransform;
 
 
 typedef struct ShrinkwrapCalcData {
@@ -106,7 +70,7 @@ typedef struct ShrinkwrapCalcData {
        int vgroup;                     //Vertex group num
 
        struct DerivedMesh *target;     //mesh we are shrinking to
-       SpaceTransform local2target;    //transform to move between local and 
target space
+       struct SpaceTransform local2target;    //transform to move between 
local and target space
 
        float keepDist;                 //Distance to keep above target surface 
(units are in local space)
 
@@ -127,7 +91,7 @@ void shrinkwrapModifier_deform(struct ShrinkwrapModifierData 
*smd, struct Object
  */
 bool BKE_shrinkwrap_project_normal(
         char options, const float vert[3], const float dir[3],
-        const SpaceTransform *transf, BVHTree *tree, BVHTreeRayHit *hit,
+        const struct SpaceTransform *transf, BVHTree *tree, BVHTreeRayHit *hit,
         BVHTree_RayCastCallback callback, void *userdata);
 
 /*
diff --git a/source/blender/blenkernel/intern/constraint.c 
b/source/blender/blenkernel/intern/constraint.c
index 2f8690a..d80529e 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -3375,7 +3375,7 @@ static void shrinkwrap_get_tarmat(bConstraint *con, 
bConstraintOb *cob, bConstra
                unit_m4(ct->matrix);
                
                if (target != NULL) {
-                       space_transform_from_matrixs(&transform, cob->matrix, 
ct->tar->obmat);
+                       BLI_space_transform_from_matrices(&transform, 
cob->matrix, ct->tar->obmat);
                        
                        switch (scon->shrinkType) {
                                case MOD_SHRINKWRAP_NEAREST_SURFACE:
@@ -3397,7 +3397,7 @@ static void shrinkwrap_get_tarmat(bConstraint *con, 
bConstraintOb *cob, bConstra
                                                break;
                                        }
                                        
-                                       space_transform_apply(&transform, co);
+                                       BLI_space_transform_apply(&transform, 
co);
                                        
                                        BLI_bvhtree_find_nearest(treeData.tree, 
co, &nearest, treeData.nearest_callback, &treeData);
                                        
@@ -3405,7 +3405,7 @@ static void shrinkwrap_get_tarmat(bConstraint *con, 
bConstraintOb *cob, bConstra
                                        if (dist != 0.0f) {
                                                interp_v3_v3v3(co, co, 
nearest.co, (dist - scon->dist) / dist);   /* linear interpolation */
                                        }
-                                       space_transform_invert(&transform, co);
+                                       BLI_space_transform_invert(&transform, 
co);
                                        break;
                                }
                                case MOD_SHRINKWRAP_PROJECT:
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c 
b/source/blender/blenkernel/intern/shrinkwrap.c
index 60dc3da..d2a4d15 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -66,37 +66,6 @@
 /* Util macros */
 #define OUT_OF_MEMORY() ((void)printf("Shrinkwrap: Out of memory\n"))
 
-/* Space transform */
-void space_transform_from_matrixs(SpaceTransform *data, float local[4][4], 
float target[4][4])
-{
-       float itarget[4][4];
-       invert_m4_m4(itarget, target);
-       mul_m4_m4m4(data->local2target, itarget, local);
-       invert_m4_m4(data->target2local, data->local2target);
-}
-
-void space_transform_apply(const SpaceTransform *data, float co[3])
-{
-       mul_v3_m4v3(co, ((SpaceTransform *)data)->local2target, co);
-}
-
-void space_transform_invert(const SpaceTransform *data, float co[3])
-{
-       mul_v3_m4v3(co, ((SpaceTransform *)data)->target2local, co);
-}
-
-static void space_transform_apply_normal(const SpaceTransform *data, float 
no[3])
-{
-       mul_mat3_m4_v3(((SpaceTransform *)data)->local2target, no);
-       normalize_v3(no); /* TODO: could we just determine de scale value from 
the matrix? */
-}
-
-static void space_transform_invert_normal(const SpaceTransform *data, float 
no[3])
-{
-       mul_mat3_m4_v3(((SpaceTransform *)data)->target2local, no);
-       normalize_v3(no); /* TODO: could we just determine de scale value from 
the matrix? */
-}
-
 /*
  * Shrinkwrap to the nearest vertex
  *
@@ -139,7 +108,7 @@ static void 
shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
                else {
                        copy_v3_v3(tmp_co, co);
                }
-               space_transform_apply(&calc->local2target, tmp_co);
+               BLI_space_transform_apply(&calc->local2target, tmp_co);
 
                /* Use local proximity heuristics (to reduce the nearest search)
                 *
@@ -165,7 +134,7 @@ static void 
shrinkwrap_calc_nearest_vertex(ShrinkwrapCalcData *calc)
 
                        /* Convert the coordinates back to mesh coordinates */
                        copy_v3_v3(tmp_co, nearest.co);
-                       space_transform_invert(&calc->local2target, tmp_co);
+                       BLI_space_transform_invert(&calc->local2target, tmp_co);
 
                        interp_v3_v3v3(co, co, tmp_co, weight);  /* linear 
interpolation */
                }
@@ -204,11 +173,11 @@ bool BKE_shrinkwrap_project_normal(
        /* Apply space transform (TODO readjust dist) */
        if (transf) {
                copy_v3_v3(tmp_co, vert);
-               space_transform_apply(transf, tmp_co);
+               BLI_space_transform_apply(transf, tmp_co);
                co = tmp_co;
 
                copy_v3_v3(tmp_no, dir);
-               space_transform_apply_normal(transf, tmp_no);
+               BLI_space_transform_apply_normal(transf, tmp_no);
                no = tmp_no;
 
 #ifdef USE_DIST_CORRECT
@@ -227,7 +196,7 @@ bool BKE_shrinkwrap_project_normal(
        if (hit_tmp.index != -1) {
                /* invert the normal first so face culling works on rotated 
objects */
                if (transf) {
-                       space_transform_invert_normal(transf, hit_tmp.no);
+                       BLI_space_transform_invert_normal(transf, hit_tmp.no);
                }
 
                if (options & (MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE | 
MOD_SHRINKWRAP_CULL_TARGET_BACKFACE)) {
@@ -242,7 +211,7 @@ bool BKE_shrinkwrap_project_normal(
 
                if (transf) {
                        /* Inverting space transform (TODO make coeherent with 
the initial dist readjust) */
-                       space_transform_invert(transf, hit_tmp.co);
+                       BLI_space_transform_invert(transf, hit_tmp.co);
 #ifdef USE_DIST_CORRECT
                        hit_tmp.dist = len_v3v3(vert, hit_tmp.co);
 #endif
@@ -307,7 +276,7 @@ static void 
shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, bool for
                auxMesh = object_get_derived_final(calc->smd->auxTarget, 
for_render);
                if (!auxMesh)
                        return;
-               SPACE_TRANSFORM_SETUP(&local2aux, calc->ob, 
calc->smd->auxTarget);
+               BLI_SPACE_TRANSFORM_SETUP(&local2aux, calc->ob, 
calc->smd->auxTarget);
        }
 
        /* After sucessufuly build the trees, start projection vertexs */
@@ -441,7 +410,7 @@ static void 
shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
                else {
                        copy_v3_v3(tmp_co, co);
                }
-               space_transform_apply(&calc->local2target, tmp_co);
+               BLI_space_transform_apply(&calc->local2target, tmp_co);
 
                /* Use local proximity heuristics (to reduce the nearest search)
                 *
@@ -475,7 +444,7 @@ static void 
shrinkwrap_calc_nearest_surface_point(ShrinkwrapCalcData *calc)
                        }
 
                        /* Convert the coordinates back to mesh coordinates */
-                       space_transform_invert(&calc->local2target, tmp_co);
+                       BLI_space_transform_invert(&calc->local2target, tmp_co);
                        interp_v3_v3v3(co, co, tmp_co, weight);  /* linear 
interpolation */
                }
        }
@@ -518,7 +487,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, 
Object *ob, DerivedM
                /* TODO there might be several "bugs" on non-uniform scales 
matrixs
                 * because it will no longer be nearest surface, not sphere 
projection
                 * because space has been deformed */
-               SPACE_TRANSFORM_SETUP(&calc.local2target, ob, smd->target);
+               BLI_SPACE_TRANSFORM_SETUP(&calc.local2target, ob, smd->target);
 
                /* TODO: smd->keepDist is in global units.. must change to 
local */
                calc.keepDist = smd->keepDist;
diff --git a/source/blender/blenlib/BLI_math_matrix.h 
b/source/blender/blenlib/BLI_math_matrix.h
index 68d8e3b..7bcaab1 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -224,6 +224,22 @@ bool is_negative_m4(float mat[4][4]);
 bool is_zero_m3(float mat[3][3]);
 bool is_zero_m4(float mat[4][4]);
 
+/* SpaceTransform helper */
+typedef struct SpaceTransform {
+       float local2target[4][4];
+       float target2local[4][4];
+
+} SpaceTransform;
+
+void BLI_space_transform_from_matrices(struct SpaceTransform *data, float 
local[4][4], float target[4][4]);
+void BLI_space_transform_apply(const struct SpaceTransform *data, float co[3]);
+void BLI_space_transform_invert(const struct SpaceTransform *data, float 
co[3]);
+void BLI_space_transform_apply_normal(const struct SpaceTransform *data, float 
no[3]);
+void BLI_space_transform_invert_normal(const struct SpaceTransform *data, 
float no[3]);
+
+#define BLI_SPACE_TRANSFORM_SETUP(dat

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to