Commit: 54327bf6f14bfcd63766395801cf392a7ca760f0
Author: Julian Eisel
Date:   Mon Oct 24 01:39:48 2016 +0200
Branches: transform-manipulators
https://developer.blender.org/rB54327bf6f14bfcd63766395801cf392a7ca760f0

Some cleanups/refactors for transform manipulators

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

M       source/blender/editors/include/ED_transform.h
M       source/blender/editors/mesh/editmesh_bevel.c
M       source/blender/editors/mesh/editmesh_inset.c
M       source/blender/editors/space_view3d/view3d_edit.c
M       source/blender/editors/space_view3d/view3d_transform_manipulators.c
M       source/blender/editors/transform/transform.c

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

diff --git a/source/blender/editors/include/ED_transform.h 
b/source/blender/editors/include/ED_transform.h
index a77d9ab..9443e59 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -102,12 +102,6 @@ enum TfmMode {
 #define CTX_PAINT_CURVE     (1 << 8)
 #define CTX_GPENCIL_STROKES (1 << 9)
 
-/* Standalone call to get the transformation center corresponding to the 
current situation
- * returns 1 if successful, 0 otherwise (usually means there's no selection)
- * (if 0 is returns, *vec is unmodified)
- * */
-bool calculateTransformCenter(struct bContext *C, int centerMode, float 
cent3d[3], float cent2d[2]);
-
 struct TransInfo;
 struct Base;
 struct Scene;
@@ -134,6 +128,11 @@ void ED_getLocalTransformOrientationMatrix(const struct 
bContext *C, float orien
 void ED_getTransformOrientationMatrix(
         const struct bContext *C, const char orientation_type, const short 
around,
         float r_orientation_mat[3][3]);
+/* Standalone call to get the transformation center corresponding to the 
current situation
+ * returns 1 if successful, 0 otherwise (usually means there's no selection)
+ * (if 0 is returns, *vec is unmodified)
+ * */
+bool ED_calculateTransformCenter(struct bContext *C, int centerMode, float 
cent3d[3], float cent2d[2]);
 
 int BIF_countTransformOrientation(const struct bContext *C);
 
diff --git a/source/blender/editors/mesh/editmesh_bevel.c 
b/source/blender/editors/mesh/editmesh_bevel.c
index a81add7..2a78d8e 100644
--- a/source/blender/editors/mesh/editmesh_bevel.c
+++ b/source/blender/editors/mesh/editmesh_bevel.c
@@ -329,7 +329,7 @@ static int edbm_bevel_invoke(bContext *C, wmOperator *op, 
const wmEvent *event)
        opdata = op->customdata;
 
        /* initialize mouse values */
-       if (!calculateTransformCenter(C, V3D_AROUND_CENTER_MEAN, center_3d, 
opdata->mcenter)) {
+       if (!ED_calculateTransformCenter(C, V3D_AROUND_CENTER_MEAN, center_3d, 
opdata->mcenter)) {
                /* in this case the tool will likely do nothing,
                 * ideally this will never happen and should be checked for 
above */
                opdata->mcenter[0] = opdata->mcenter[1] = 0;
diff --git a/source/blender/editors/mesh/editmesh_inset.c 
b/source/blender/editors/mesh/editmesh_inset.c
index 3e0747f..73b1b5b 100644
--- a/source/blender/editors/mesh/editmesh_inset.c
+++ b/source/blender/editors/mesh/editmesh_inset.c
@@ -284,7 +284,7 @@ static int edbm_inset_invoke(bContext *C, wmOperator *op, 
const wmEvent *event)
        opdata = op->customdata;
 
        /* initialize mouse values */
-       if (!calculateTransformCenter(C, V3D_AROUND_CENTER_MEAN, center_3d, 
opdata->mcenter)) {
+       if (!ED_calculateTransformCenter(C, V3D_AROUND_CENTER_MEAN, center_3d, 
opdata->mcenter)) {
                /* in this case the tool will likely do nothing,
                 * ideally this will never happen and should be checked for 
above */
                opdata->mcenter[0] = opdata->mcenter[1] = 0;
diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index 2178b44..6004817 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -635,7 +635,7 @@ static bool view3d_orbit_calc_center(bContext *C, float 
r_dyn_ofs[3])
        Object *ob_act = OBACT;
 
        if (ob_act && (ob_act->mode & OB_MODE_ALL_PAINT) &&
-           /* with weight-paint + pose-mode, fall through to using 
calculateTransformCenter */
+           /* with weight-paint + pose-mode, fall through to using 
ED_calculateTransformCenter */
            ((ob_act->mode & OB_MODE_WEIGHT_PAINT) && 
BKE_object_pose_armature_get(ob_act)) == 0)
        {
                /* in case of sculpting use last average stroke position as a 
rotation
@@ -702,7 +702,7 @@ static bool view3d_orbit_calc_center(bContext *C, float 
r_dyn_ofs[3])
        }
        else {
                /* If there's no selection, lastofs is unmodified and last 
value since static */
-               is_set = calculateTransformCenter(C, V3D_AROUND_CENTER_MEAN, 
lastofs, NULL);
+               is_set = ED_calculateTransformCenter(C, V3D_AROUND_CENTER_MEAN, 
lastofs, NULL);
        }
 
        copy_v3_v3(r_dyn_ofs, lastofs);
diff --git 
a/source/blender/editors/space_view3d/view3d_transform_manipulators.c 
b/source/blender/editors/space_view3d/view3d_transform_manipulators.c
index be8a76f..59206dd 100644
--- a/source/blender/editors/space_view3d/view3d_transform_manipulators.c
+++ b/source/blender/editors/space_view3d/view3d_transform_manipulators.c
@@ -22,7 +22,6 @@
  *  \ingroup spview3d
  */
 
-
 #include "BLI_math.h"
 
 #include "BKE_action.h"
@@ -50,36 +49,6 @@
 #include "WM_types.h"
 
 
-/* axes as index */
-enum TransformAxisType {
-       MAN_AXIS_TRANS_X = 0,
-       MAN_AXIS_TRANS_Y,
-       MAN_AXIS_TRANS_Z,
-       MAN_AXIS_TRANS_C,
-
-       MAN_AXIS_ROT_X,
-       MAN_AXIS_ROT_Y,
-       MAN_AXIS_ROT_Z,
-       MAN_AXIS_ROT_C,
-       MAN_AXIS_ROT_T, /* trackball rotation */
-
-       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,
-
-       MAN_AXIS_LAST,
-};
-
 /* threshold for testing view aligned axis manipulator */
 #define TRANSFORM_MAN_AXIS_DOT_MIN 0.02f
 #define TRANSFORM_MAN_AXIS_DOT_MAX 0.1f
@@ -87,24 +56,42 @@ enum TransformAxisType {
 #define TRANSFORM_MAN_AXIS_LINE_WIDTH 2.0f
 
 /**
+ * Transform axis type that can be used as index.
+ */
+enum TransformAxisType {
+       /* single axes */
+       TRANSFORM_AXIS_X     = 0,
+       TRANSFORM_AXIS_Y     = 1,
+       TRANSFORM_AXIS_Z     = 2,
+
+       /* mulitple axes */
+       TRANSFORM_AXIS_VIEW  = 3,
+       TRANSFORM_AXIS_XY    = 4,
+       TRANSFORM_AXIS_YZ    = 5,
+       TRANSFORM_AXIS_ZX    = 6,
+};
+
+/**
  * Struct for carrying data of transform manipulators as 
wmManipulatorGroup.customdata.
  */
 typedef struct TransformManipulatorsInfo {
        struct TranformAxisManipulator *axes; /* Array of axes */
 
-       wmManipulatorGroup *mgroup;
        float mat[4][4]; /* Cached loc/rot matrix */
 } TransformManipulatorsInfo;
 
-typedef wmManipulator *TransformManipulatorInitFunc(const 
TransformManipulatorsInfo *,
-                                                    struct 
TranformAxisManipulator *);
-typedef void TransformManipulatorUpdateFunc(const bContext *, const 
TransformManipulatorsInfo *,
-                                            const struct 
TranformAxisManipulator *);
+/* Callback types */
+typedef wmManipulator *TransformManipulatorInitFunc(struct 
TranformAxisManipulator *, wmManipulatorGroup *mgroup);
+typedef void TransformManipulatorUpdateFunc(
+        const bContext *, const TransformManipulatorsInfo *, const struct 
TranformAxisManipulator *);
 
+/**
+ * Struct that allows us to store info for each transform axis manipulator in 
a rather generic way.
+ */
 typedef struct TranformAxisManipulator {
        /* -- initialized using static array -- */
 
-       enum TransformAxisType index;
+       enum TransformAxisType axis_type;
        int transform_type; /* View3d->twtype */
 
        /* per-manipulator callbacks for initializing/updating data */
@@ -123,103 +110,129 @@ typedef struct TranformAxisManipulator {
        int manipulator_style;
 
 
-       /* -- initialized later -- */
-
+       /* The manipulator that represents this axis */
        wmManipulator *manipulator;
 } TranformAxisManipulator;
 
-static TransformManipulatorInitFunc   manipulator_arrow_init;
-static TransformManipulatorUpdateFunc manipulator_arrow_draw_prepare;
-static TransformManipulatorInitFunc   manipulator_dial_init;
-static TransformManipulatorUpdateFunc manipulator_dial_refresh;
-static TransformManipulatorUpdateFunc manipulator_view_dial_draw_prepare;
+
+/* -------------------------------------------------------------------- */
+/* Manipulator init/update callbacks */
+
+static wmManipulator *manipulator_arrow_init(TranformAxisManipulator *axis, 
wmManipulatorGroup *mgroup)
+{
+       return WM_arrow_manipulator_new(mgroup, axis->name, 
axis->manipulator_style);
+}
+
+static wmManipulator *manipulator_dial_init(TranformAxisManipulator *axis, 
wmManipulatorGroup *mgroup)
+{
+       return WM_dial_manipulator_new(mgroup, axis->name, 
axis->manipulator_style);
+}
+
+static void manipulator_dial_refresh(
+        const bContext *UNUSED(C), const TransformManipulatorsInfo *info, 
const TranformAxisManipulator *axis)
+{
+       WM_dial_manipulator_set_up_vector(axis->manipulator, 
info->mat[axis->axis_type]);
+}
+
+static void manipulator_arrow_draw_prepare(
+        const bContext *UNUSED(C), const TransformManipulatorsInfo *info, 
const TranformAxisManipulator *axis)
+{
+       WM_arrow_manipulator_set_direction(axis->manipulator, 
info->mat[axis->axis_type]);
+}
+
+static void manipulator_view_dial_draw_prepare(
+        const bContext *C, const TransformManipulatorsInfo *UNUSED(info), 
const TranformAxisManipulator *axis)
+{
+       RegionView3D *rv3d = CTX_wm_region_view3d(C);
+       WM_dial_manipulator_set_up_vector(axis->manipulator, rv3d->viewinv[2]);
+}
+
+
+/* -------------------------------------------------------------------- */
+/* General helpers */
 
 /**
  * This TranformAxisManipulator array contains all the info we need to 
initialize, store and identify all
  * transform manipulators. When creating a new group instance we simply create 
an allocated version of this.
  *
- * \note Order matches drawing order! (TODO: How should drawing order and 
index work together?)
+ * \note Order matches drawing order!
  */
 static TranformAxisManipulator tman_axes[] = {
        {
-               MAN_AXIS_TRANS_X, V3D_MANIP_TRANSLATE,
+               TRANSFORM_AXIS_X, V3D_MANIP_TRANSLATE,
                manipulator_arrow_init, NULL, manipulator_arrow_draw_prepare,
                "translate_x", {1, 0, 0}, OB_LOCK_LOCX,
                1.0f, TRANSFORM_MAN_AXIS_LINE_WIDTH, TH_AXIS_X, 
MANIPULATOR_ARROW_STYLE_CONE,
        },
        {
-               MAN_AXIS_TRANS_Y, V3D_MANIP_TRANSLATE,
+               TRANSFORM_AXIS_Y, V3D_MANIP_TRANSLATE,
                manipulator_arrow_init, NULL, manipulator_arrow_draw_prepare,
                "translate_y", {0, 1, 0}, OB_LOCK_LOCY,
                1.0f, TRANSFORM_MAN_AXIS_LINE_WIDTH, TH_AXIS_Y, 
MANIPULATOR_ARROW_STYLE_CONE,
        },
        {
-               MAN_AXIS_TRANS_Z, V3D_MANIP_TRANSLATE,
+               TRANSFORM_AXIS_Z, V3D_MANIP_TRANSLATE,
                manipulator_arrow_init, NULL, manipulator_arrow_draw_prepare,
                "translate_z", {0, 0, 1}, OB_LOCK_LOCZ,
                1.0f, TRANSFORM_MAN_AXIS_LINE_WIDTH, TH_AXIS_Z, 
MANIPULATOR_ARROW_STYLE_CONE,
        },
        {
-               MAN_AXIS_TRANS_C, V3D_MANIP_TRANSLATE,
+               TRANSFORM_AXIS_VIEW,

@@ 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