Commit: 31fc75ef9332566c084763307c8fa717c6165770
Author: Campbell Barton
Date:   Wed Sep 20 17:47:34 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB31fc75ef9332566c084763307c8fa717c6165770

Cleanup: move 3d manipulators into an array

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

M       source/blender/editors/transform/transform_manipulator.c

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

diff --git a/source/blender/editors/transform/transform_manipulator.c 
b/source/blender/editors/transform/transform_manipulator.c
index 9a4be46855f..cd1dcde564b 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -114,27 +114,31 @@ enum {
        MAN_AXIS_TRANS_Z,
        MAN_AXIS_TRANS_C,
 
+       MAN_AXIS_TRANS_XY,
+       MAN_AXIS_TRANS_YZ,
+       MAN_AXIS_TRANS_ZX,
+#define MAN_AXIS_RANGE_TRANS_START MAN_AXIS_TRANS_X
+#define MAN_AXIS_RANGE_TRANS_END (MAN_AXIS_TRANS_ZX + 1)
+
        MAN_AXIS_ROT_X,
        MAN_AXIS_ROT_Y,
        MAN_AXIS_ROT_Z,
        MAN_AXIS_ROT_C,
        MAN_AXIS_ROT_T, /* trackball rotation */
+#define MAN_AXIS_RANGE_ROT_START MAN_AXIS_ROT_X
+#define MAN_AXIS_RANGE_ROT_END (MAN_AXIS_ROT_T + 1)
 
        MAN_AXIS_SCALE_X,
        MAN_AXIS_SCALE_Y,
        MAN_AXIS_SCALE_Z,
        MAN_AXIS_SCALE_C,
-
-       /* special */
-       MAN_AXIS_TRANS_XY,
-       MAN_AXIS_TRANS_YZ,
-       MAN_AXIS_TRANS_ZX,
-
        MAN_AXIS_SCALE_XY,
        MAN_AXIS_SCALE_YZ,
        MAN_AXIS_SCALE_ZX,
+#define MAN_AXIS_RANGE_SCALE_START MAN_AXIS_SCALE_X
+#define MAN_AXIS_RANGE_SCALE_END (MAN_AXIS_SCALE_ZX + 1)
 
-       MAN_AXIS_LAST,
+       MAN_AXIS_LAST = MAN_AXIS_RANGE_SCALE_END,
 };
 
 /* axis types */
@@ -148,27 +152,7 @@ enum {
 typedef struct ManipulatorGroup {
        bool all_hidden;
 
-       struct wmManipulator *translate_x,
-                       *translate_y,
-                       *translate_z,
-                       *translate_xy,
-                       *translate_yz,
-                       *translate_zx,
-                       *translate_c,
-
-                       *rotate_x,
-                       *rotate_y,
-                       *rotate_z,
-                       *rotate_c,
-                       *rotate_t, /* trackball rotation */
-
-                       *scale_x,
-                       *scale_y,
-                       *scale_z,
-                       *scale_xy,
-                       *scale_yz,
-                       *scale_zx,
-                       *scale_c;
+       struct wmManipulator *manipulators[MAN_AXIS_LAST];
 } ManipulatorGroup;
 
 
@@ -189,83 +173,48 @@ typedef struct ManipulatorGroup {
 static wmManipulator *manipulator_get_axis_from_index(const ManipulatorGroup 
*man, const short axis_idx)
 {
        BLI_assert(IN_RANGE_INCL(axis_idx, (float)MAN_AXIS_TRANS_X, 
(float)MAN_AXIS_LAST));
-
-       switch (axis_idx) {
-               case MAN_AXIS_TRANS_X:
-                       return man->translate_x;
-               case MAN_AXIS_TRANS_Y:
-                       return man->translate_y;
-               case MAN_AXIS_TRANS_Z:
-                       return man->translate_z;
-               case MAN_AXIS_TRANS_XY:
-                       return man->translate_xy;
-               case MAN_AXIS_TRANS_YZ:
-                       return man->translate_yz;
-               case MAN_AXIS_TRANS_ZX:
-                       return man->translate_zx;
-               case MAN_AXIS_TRANS_C:
-                       return man->translate_c;
-               case MAN_AXIS_ROT_X:
-                       return man->rotate_x;
-               case MAN_AXIS_ROT_Y:
-                       return man->rotate_y;
-               case MAN_AXIS_ROT_Z:
-                       return man->rotate_z;
-               case MAN_AXIS_ROT_C:
-                       return man->rotate_c;
-               case MAN_AXIS_ROT_T:
-                       return man->rotate_t;
-               case MAN_AXIS_SCALE_X:
-                       return man->scale_x;
-               case MAN_AXIS_SCALE_Y:
-                       return man->scale_y;
-               case MAN_AXIS_SCALE_Z:
-                       return man->scale_z;
-               case MAN_AXIS_SCALE_XY:
-                       return man->scale_xy;
-               case MAN_AXIS_SCALE_YZ:
-                       return man->scale_yz;
-               case MAN_AXIS_SCALE_ZX:
-                       return man->scale_zx;
-               case MAN_AXIS_SCALE_C:
-                       return man->scale_c;
-       }
-
-       return NULL;
+       return man->manipulators[axis_idx];
 }
 
-static short manipulator_get_axis_type(const ManipulatorGroup *man, const 
wmManipulator *axis)
+static short manipulator_get_axis_type(const int axis_idx)
 {
-       if (ELEM(axis, man->translate_x, man->translate_y, man->translate_z, 
man->translate_c,
-                man->translate_xy, man->translate_yz, man->translate_zx))
-       {
+       if (axis_idx >= MAN_AXIS_RANGE_TRANS_START && axis_idx < 
MAN_AXIS_RANGE_TRANS_END) {
                return MAN_AXES_TRANSLATE;
        }
-       else if (ELEM(axis, man->rotate_x, man->rotate_y, man->rotate_z, 
man->rotate_c, man->rotate_t)) {
+       if (axis_idx >= MAN_AXIS_RANGE_ROT_START && axis_idx < 
MAN_AXIS_RANGE_ROT_END) {
                return MAN_AXES_ROTATE;
        }
-       else {
+       if (axis_idx >= MAN_AXIS_RANGE_SCALE_START && axis_idx < 
MAN_AXIS_RANGE_SCALE_END) {
                return MAN_AXES_SCALE;
        }
+       BLI_assert(0);
+       return -1;
 }
 
 /* get index within axis type, so that x == 0, y == 1 and z == 2, no matter 
which axis type */
 static uint manipulator_index_normalize(const int axis_idx)
 {
-       if (axis_idx > MAN_AXIS_TRANS_ZX) {
-               return axis_idx - 16;
-       }
-       else if (axis_idx > MAN_AXIS_SCALE_C) {
-               return axis_idx - 13;
-       }
-       else if (axis_idx > MAN_AXIS_ROT_T) {
-               return axis_idx - 9;
-       }
-       else if (axis_idx > MAN_AXIS_TRANS_C) {
-               return axis_idx - 4;
+       switch (axis_idx) {
+               case MAN_AXIS_TRANS_X:
+               case MAN_AXIS_ROT_X:
+               case MAN_AXIS_SCALE_X:
+               case MAN_AXIS_TRANS_XY:
+               case MAN_AXIS_SCALE_XY:
+                       return 0;
+               case MAN_AXIS_TRANS_Y:
+               case MAN_AXIS_ROT_Y:
+               case MAN_AXIS_SCALE_Y:
+               case MAN_AXIS_TRANS_YZ:
+               case MAN_AXIS_SCALE_YZ:
+                       return 1;
+               case MAN_AXIS_TRANS_Z:
+               case MAN_AXIS_ROT_Z:
+               case MAN_AXIS_SCALE_Z:
+               case MAN_AXIS_TRANS_ZX:
+               case MAN_AXIS_SCALE_ZX:
+                       return 2;
        }
-
-       return axis_idx;
+       return 3;
 }
 
 static bool manipulator_is_axis_visible(
@@ -1091,47 +1040,47 @@ static ManipulatorGroup 
*manipulatorgroup_init(wmManipulatorGroup *mgroup)
        const wmManipulatorType *wt_prim = 
WM_manipulatortype_find("MANIPULATOR_WT_primitive_3d", true);
 
 #define MANIPULATOR_NEW_ARROW(v, draw_style) { \
-       v = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL); \
-       RNA_enum_set((v)->ptr, "draw_style", draw_style); \
+       man->manipulators[v] = WM_manipulator_new_ptr(wt_arrow, mgroup, NULL); \
+       RNA_enum_set(man->manipulators[v]->ptr, "draw_style", draw_style); \
 } ((void)0)
 #define MANIPULATOR_NEW_DIAL(v, draw_options) { \
-       v = WM_manipulator_new_ptr(wt_dial, mgroup, NULL); \
-       RNA_enum_set((v)->ptr, "draw_options", draw_options); \
+       man->manipulators[v] = WM_manipulator_new_ptr(wt_dial, mgroup, NULL); \
+       RNA_enum_set(man->manipulators[v]->ptr, "draw_options", draw_options); \
 } ((void)0)
 #define MANIPULATOR_NEW_PRIM(v, draw_style) { \
-       v = WM_manipulator_new_ptr(wt_prim, mgroup, NULL); \
-       RNA_enum_set((v)->ptr, "draw_style", draw_style); \
+       man->manipulators[v] = WM_manipulator_new_ptr(wt_prim, mgroup, NULL); \
+       RNA_enum_set(man->manipulators[v]->ptr, "draw_style", draw_style); \
 } ((void)0)
 
        /* add/init widgets - order matters! */
-       MANIPULATOR_NEW_DIAL(man->rotate_t, ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_T, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_FILL);
 
-       MANIPULATOR_NEW_DIAL(man->scale_c, ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_SCALE_C, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
 
-       MANIPULATOR_NEW_ARROW(man->scale_x, ED_MANIPULATOR_ARROW_STYLE_BOX);
-       MANIPULATOR_NEW_ARROW(man->scale_y, ED_MANIPULATOR_ARROW_STYLE_BOX);
-       MANIPULATOR_NEW_ARROW(man->scale_z, ED_MANIPULATOR_ARROW_STYLE_BOX);
+       MANIPULATOR_NEW_ARROW(MAN_AXIS_SCALE_X, ED_MANIPULATOR_ARROW_STYLE_BOX);
+       MANIPULATOR_NEW_ARROW(MAN_AXIS_SCALE_Y, ED_MANIPULATOR_ARROW_STYLE_BOX);
+       MANIPULATOR_NEW_ARROW(MAN_AXIS_SCALE_Z, ED_MANIPULATOR_ARROW_STYLE_BOX);
 
-       MANIPULATOR_NEW_PRIM(man->scale_xy, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
-       MANIPULATOR_NEW_PRIM(man->scale_yz, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
-       MANIPULATOR_NEW_PRIM(man->scale_zx, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+       MANIPULATOR_NEW_PRIM(MAN_AXIS_SCALE_XY, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+       MANIPULATOR_NEW_PRIM(MAN_AXIS_SCALE_YZ, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+       MANIPULATOR_NEW_PRIM(MAN_AXIS_SCALE_ZX, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
 
-       MANIPULATOR_NEW_DIAL(man->rotate_x, ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
-       MANIPULATOR_NEW_DIAL(man->rotate_y, ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
-       MANIPULATOR_NEW_DIAL(man->rotate_z, ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_X, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_Y, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_Z, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_CLIP);
 
        /* init screen aligned widget last here, looks better, behaves better */
-       MANIPULATOR_NEW_DIAL(man->rotate_c, ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_ROT_C, ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
 
-       MANIPULATOR_NEW_DIAL(man->translate_c, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
+       MANIPULATOR_NEW_DIAL(MAN_AXIS_TRANS_C, 
ED_MANIPULATOR_DIAL_DRAW_FLAG_NOP);
 
-       MANIPULATOR_NEW_ARROW(man->translate_x, 
ED_MANIPULATOR_ARROW_STYLE_NORMAL);
-       MANIPULATOR_NEW_ARROW(man->translate_y, 
ED_MANIPULATOR_ARROW_STYLE_NORMAL);
-       MANIPULATOR_NEW_ARROW(man->translate_z, 
ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+       MANIPULATOR_NEW_ARROW(MAN_AXIS_TRANS_X, 
ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+       MANIPULATOR_NEW_ARROW(MAN_AXIS_TRANS_Y, 
ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+       MANIPULATOR_NEW_ARROW(MAN_AXIS_TRANS_Z, 
ED_MANIPULATOR_ARROW_STYLE_NORMAL);
 
-       MANIPULATOR_NEW_PRIM(man->translate_xy, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
-       MANIPULATOR_NEW_PRIM(man->translate_yz, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
-       MANIPULATOR_NEW_PRIM(man->translate_zx, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+       MANIPULATOR_NEW_PRIM(MAN_AXIS_TRANS_XY, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+       MANIPULATOR_NEW_PRIM(MAN_AXIS_TRANS_YZ, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+       MANIPULATOR_NEW_PRIM(MAN_AXIS_TRANS_ZX, 
ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
 
        return man;
 }
@@ -1171,7 +1120,7 @@ static void WIDGETGROUP_manipulator_setup(const bContext 
*UNUSED(C), wmManipulat
 
        MAN_ITER_AXES_BEGIN(axis, axis_idx)
        {
-               const short axis_type = manipulator_get_axis_type(man, axis);
+               const short axis_type = manipulator_get_axis_type(axis_idx);
                int constraint_axis[3] = {1, 0, 0};
                PointerRNA *ptr;
 
@@ -1292,7 +1241,7 @@ static void WIDGETGROUP_manipulator_refresh(const 
bContext *C, wmManipulatorGrou
 
        MAN_ITER_AXES_BEGIN(axis, axis_idx)
        {
-               const short axis_type = manipulator_get_axis_type(man, axis);
+               const short axis_type = manipulator_get_axis_type(axis_idx);
                const int aidx_norm = manipulator_index_normalize(axis_idx);
 
                WM_manipulator_set_matrix_location(axis, rv3d->twmat[3]);
@@ -1363,7 +1312,7 @@ static void WIDGETGROUP_manipulator_draw_prepare(const 
bContext *C, wmManipulato
 
        MAN_ITER_AXES_BEGIN(axis, axis_idx)
        {
-               const short axis_type = manipula

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to