[Bf-blender-cvs] [00ba48a6997] blender2.8: Manipulator: replace old cage2d manipulator

Campbell Barton noreply at git.blender.org
Wed Aug 30 17:58:32 CEST 2017


Commit: 00ba48a6997d5421a899101b696e5f86c0bdef0a
Author: Campbell Barton
Date:   Thu Aug 31 01:38:51 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB00ba48a6997d5421a899101b696e5f86c0bdef0a

Manipulator: replace old cage2d manipulator

Mostly internal changes, keeping both manipulators
could have worked but there was no point long term.

There are still some glitches to resolve, will work on those next.

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

M	source/blender/editors/include/ED_manipulator_library.h
M	source/blender/editors/manipulator_library/CMakeLists.txt
M	source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
D	source/blender/editors/manipulator_library/manipulator_types/cage2d_rotate_manipulator.c
M	source/blender/editors/space_api/spacetypes.c
M	source/blender/editors/space_node/node_manipulators.c
M	source/blender/editors/space_view3d/view3d_manipulator_camera.c
M	source/blender/editors/space_view3d/view3d_manipulator_empty.c
M	source/blender/editors/space_view3d/view3d_manipulator_lamp.c
M	source/blender/editors/transform/transform_manipulator2d.c
M	source/blender/makesrna/intern/rna_wm_manipulator.c
M	source/blender/windowmanager/manipulators/WM_manipulator_types.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulator.c

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

diff --git a/source/blender/editors/include/ED_manipulator_library.h b/source/blender/editors/include/ED_manipulator_library.h
index f283973a144..bde2a165ee6 100644
--- a/source/blender/editors/include/ED_manipulator_library.h
+++ b/source/blender/editors/include/ED_manipulator_library.h
@@ -34,7 +34,6 @@
 void ED_manipulatortypes_arrow_2d(void);
 void ED_manipulatortypes_arrow_3d(void);
 void ED_manipulatortypes_cage_2d(void);
-void ED_manipulatortypes_cage_2d_rotate(void);
 void ED_manipulatortypes_dial_3d(void);
 void ED_manipulatortypes_grab_3d(void);
 void ED_manipulatortypes_facemap_3d(void);
diff --git a/source/blender/editors/manipulator_library/CMakeLists.txt b/source/blender/editors/manipulator_library/CMakeLists.txt
index 43783eb3e4a..0604946dc24 100644
--- a/source/blender/editors/manipulator_library/CMakeLists.txt
+++ b/source/blender/editors/manipulator_library/CMakeLists.txt
@@ -47,7 +47,6 @@ set(SRC
 	geometry/geom_dial_manipulator.c
 	manipulator_types/arrow2d_manipulator.c
 	manipulator_types/arrow3d_manipulator.c
-	manipulator_types/cage2d_rotate_manipulator.c
 	manipulator_types/cage2d_manipulator.c
 	manipulator_types/dial3d_manipulator.c
 	manipulator_types/grab3d_manipulator.c
diff --git a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
index 1b7b4ffda1f..7187e3ff62e 100644
--- a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c
@@ -61,11 +61,28 @@
 /* own includes */
 #include "../manipulator_library_intern.h"
 
-#define MANIPULATOR_RECT_MIN_WIDTH 15.0f
 #define MANIPULATOR_RESIZER_WIDTH  20.0f
 
 /* -------------------------------------------------------------------- */
 
+static void manipulator_rect_pivot_from_scale_part(int part, float r_pt[2], bool r_constrain_axis[2])
+{
+	bool x = true, y = true;
+	switch (part) {
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X: { ARRAY_SET_ITEMS(r_pt,  0.5,  0.0); x = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X: { ARRAY_SET_ITEMS(r_pt, -0.5,  0.0); x = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y: { ARRAY_SET_ITEMS(r_pt,  0.0,  0.5); y = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y: { ARRAY_SET_ITEMS(r_pt,  0.0, -0.5); y = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y: { ARRAY_SET_ITEMS(r_pt,  0.5,  0.5); x = y = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y: { ARRAY_SET_ITEMS(r_pt,  0.5, -0.5); x = y = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y: { ARRAY_SET_ITEMS(r_pt, -0.5,  0.5); x = y = false; break; }
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y: { ARRAY_SET_ITEMS(r_pt, -0.5, -0.5); x = y = false; break; }
+		default: BLI_assert(0);
+	}
+	r_constrain_axis[0] = x;
+	r_constrain_axis[1] = y;
+}
+
 static void rect_transform_draw_corners(
         const rctf *r, const float offsetx, const float offsety, const float color[3])
 {
@@ -103,72 +120,90 @@ static void rect_transform_draw_corners(
 
 static void rect_transform_draw_interaction(
         const float color[4], const int highlighted,
-        const float half_w, const float half_h,
-        const float w, const float h, const float line_width)
+        const float size[2], const float margin[2],
+        const float line_width)
 {
-	/* Why generate coordinates for 4 vertices, when we only use three? */
+	/* 4 verts for translate, otherwise only 3 are used. */
 	float verts[4][2];
+	uint verts_len = 0;
 
 	switch (highlighted) {
 		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X:
-			verts[0][0] = -half_w + w;
-			verts[0][1] = -half_h;
-			verts[1][0] = -half_w;
-			verts[1][1] = -half_h;
-			verts[2][0] = -half_w;
-			verts[2][1] = half_h;
-			verts[3][0] = -half_w + w;
-			verts[3][1] = half_h;
+			ARRAY_SET_ITEMS(verts[0], -size[0] + margin[0], -size[1]);
+			ARRAY_SET_ITEMS(verts[1], -size[0],             -size[1]);
+			ARRAY_SET_ITEMS(verts[2], -size[0],              size[1]);
+			verts_len = 3;
 			break;
-
 		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X:
-			verts[0][0] = half_w - w;
-			verts[0][1] = -half_h;
-			verts[1][0] = half_w;
-			verts[1][1] = -half_h;
-			verts[2][0] = half_w;
-			verts[2][1] = half_h;
-			verts[3][0] = half_w - w;
-			verts[3][1] = half_h;
+			ARRAY_SET_ITEMS(verts[0], size[0] - margin[0], -size[1]);
+			ARRAY_SET_ITEMS(verts[1], size[0],             -size[1]);
+			ARRAY_SET_ITEMS(verts[2], size[0],              size[1]);
+			verts_len = 3;
 			break;
-
 		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_Y:
-			verts[0][0] = -half_w;
-			verts[0][1] = -half_h + h;
-			verts[1][0] = -half_w;
-			verts[1][1] = -half_h;
-			verts[2][0] = half_w;
-			verts[2][1] = -half_h;
-			verts[3][0] = half_w;
-			verts[3][1] = -half_h + h;
+			ARRAY_SET_ITEMS(verts[0], -size[0], -size[1] + margin[1]);
+			ARRAY_SET_ITEMS(verts[1], -size[0], -size[1]);
+			ARRAY_SET_ITEMS(verts[2], size[0],  -size[1]);
+			verts_len = 3;
 			break;
-
 		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_Y:
-			verts[0][0] = -half_w;
-			verts[0][1] = half_h - h;
-			verts[1][0] = -half_w;
-			verts[1][1] = half_h;
-			verts[2][0] = half_w;
-			verts[2][1] = half_h;
-			verts[3][0] = half_w;
-			verts[3][1] = half_h - h;
+			ARRAY_SET_ITEMS(verts[0], -size[0], size[1] - margin[1]);
+			ARRAY_SET_ITEMS(verts[1], -size[0], size[1]);
+			ARRAY_SET_ITEMS(verts[2], size[0],  size[1]);
+			verts_len = 3;
 			break;
 
-		/* Only used for 3D view selection, never displayed to the user. */
-		case ED_MANIPULATOR_CAGE2D_PART_TRANSLATE:
-			verts[0][0] = -half_w;
-			verts[0][1] = -half_h;
-
-			verts[1][0] = -half_w;
-			verts[1][1] =  half_h;
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MIN_Y:
+			ARRAY_SET_ITEMS(verts[0], -size[0] + margin[0], -size[1]);
+			ARRAY_SET_ITEMS(verts[1], -size[0] + margin[0], -size[1] + margin[1]);
+			ARRAY_SET_ITEMS(verts[2], -size[0],             -size[1] + margin[1]);
+			verts_len = 3;
+			break;
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MIN_X_MAX_Y:
+			ARRAY_SET_ITEMS(verts[0], -size[0] + margin[0], size[1]);
+			ARRAY_SET_ITEMS(verts[1], -size[0] + margin[0], size[1] - margin[1]);
+			ARRAY_SET_ITEMS(verts[2], -size[0],             size[1] - margin[1]);
+			verts_len = 3;
+			break;
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MIN_Y:
+			ARRAY_SET_ITEMS(verts[0], size[0] - margin[0], -size[1]);
+			ARRAY_SET_ITEMS(verts[1], size[0] - margin[0], -size[1] + margin[1]);
+			ARRAY_SET_ITEMS(verts[2], size[0],             -size[1] + margin[1]);
+			verts_len = 3;
+			break;
+		case ED_MANIPULATOR_CAGE2D_PART_SCALE_MAX_X_MAX_Y:
+			ARRAY_SET_ITEMS(verts[0], size[0] - margin[0], size[1]);
+			ARRAY_SET_ITEMS(verts[1], size[0] - margin[0], size[1] - margin[1]);
+			ARRAY_SET_ITEMS(verts[2], size[0],             size[1] - margin[1]);
+			verts_len = 3;
+			break;
 
-			verts[2][0] =  half_w;
-			verts[2][1] =  half_h;
+		case ED_MANIPULATOR_CAGE2D_PART_ROTATE:
+		{
+			const float rotate_pt[2] = {0.0f, size[1] + margin[1]};
+			const rctf r_rotate = {
+				.xmin = rotate_pt[0] - margin[0] / 2.0f,
+				.xmax = rotate_pt[0] + margin[0] / 2.0f,
+				.ymin = rotate_pt[1] - margin[1] / 2.0f,
+				.ymax = rotate_pt[1] + margin[1] / 2.0f,
+			};
 
-			verts[3][0] =  half_w;
-			verts[3][1] = -half_h;
+			ARRAY_SET_ITEMS(verts[0], r_rotate.xmin, r_rotate.ymin);
+			ARRAY_SET_ITEMS(verts[1], r_rotate.xmin, r_rotate.ymax);
+			ARRAY_SET_ITEMS(verts[2], r_rotate.xmax, r_rotate.ymax);
+			ARRAY_SET_ITEMS(verts[3], r_rotate.xmax, r_rotate.ymin);
+			verts_len = 4;
 			break;
+		}
 
+		/* Only used for 3D view selection, never displayed to the user. */
+		case ED_MANIPULATOR_CAGE2D_PART_TRANSLATE:
+			ARRAY_SET_ITEMS(verts[0], -size[0], -size[1]);
+			ARRAY_SET_ITEMS(verts[1], -size[0],  size[1]);
+			ARRAY_SET_ITEMS(verts[2], size[0],   size[1]);
+			ARRAY_SET_ITEMS(verts[3], size[0],  -size[1]);
+			verts_len = 4;
+			break;
 		default:
 			return;
 	}
@@ -185,29 +220,28 @@ static void rect_transform_draw_interaction(
 	if (highlighted == ED_MANIPULATOR_CAGE2D_PART_TRANSLATE) {
 		immBegin(GWN_PRIM_TRI_FAN, 4);
 		immAttrib3f(attr_id.col, 0.0f, 0.0f, 0.0f);
-		immVertex2fv(attr_id.pos, verts[0]);
-		immVertex2fv(attr_id.pos, verts[1]);
-		immVertex2fv(attr_id.pos, verts[2]);
-		immVertex2fv(attr_id.pos, verts[3]);
+		for (uint i = 0; i < verts_len; i++) {
+			immVertex2fv(attr_id.pos, verts[i]);
+		}
 		immEnd();
 	}
 	else {
 		glLineWidth(line_width + 3.0f);
 
-		immBegin(GWN_PRIM_LINE_STRIP, 3);
+		immBegin(GWN_PRIM_LINE_STRIP, verts_len);
 		immAttrib3f(attr_id.col, 0.0f, 0.0f, 0.0f);
-		immVertex2fv(attr_id.pos, verts[0]);
-		immVertex2fv(attr_id.pos, verts[1]);
-		immVertex2fv(attr_id.pos, verts[2]);
+		for (uint i = 0; i < verts_len; i++) {
+			immVertex2fv(attr_id.pos, verts[i]);
+		}
 		immEnd();
 
 		glLineWidth(line_width);
 
-		immBegin(GWN_PRIM_LINE_STRIP, 3);
+		immBegin(GWN_PRIM_LINE_STRIP, verts_len);
 		immAttrib3fv(attr_id.col, color);
-		immVertex2fv(attr_id.pos, verts[0]);
-		immVertex2fv(attr_id.pos, verts[1]);
-		immVertex2fv(attr_id.pos, verts[2]);
+		for (uint i = 0; i < verts_len; i++) {
+			immVertex2fv(attr_id.pos, verts[i]);
+		}
 		immEnd();
 	}
 
@@ -218,28 +252,28 @@ static void rect_transform_draw_interaction(
 static void manipulator_rect_transform_draw_intern(
         wmManipulator *mpr, const bool select, const bool highlight, const int select_id)
 {
-	const bool use_clamp = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0;
+	// const bool use_clamp = (mpr->parent_mgroup->type->flag & WM_MANIPULATORGROUPTYPE_3D) == 0;
 	float dims[2];
 	RNA_float_get_array(mpr->ptr, "dimensions", dims);
-	float w = dims[0];
-	float h = dims[1];
+	const float w = dims[0];
+	const float h = dims[1];
+	float matrix_final[4][4];
 
 	const int transform_flag = RNA_enum_get(mpr->ptr, "transform");
 
 	float aspx = 1.0f, aspy = 1.0f;
-	const float half_w = w / 2.0f;
-	const float half_h = h / 2.0f;
+	const float size[2] = {w / 2.0f, h / 2.0f};
 	const rctf r = {
-		.xmin = -half_w,
-		.ymin = -half_h,
-		.xmax = half_w,
-		.ymax = hal

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list