[Bf-blender-cvs] [4fd3582b32c] blender2.8: Manipulator: view-selected support

Campbell Barton noreply at git.blender.org
Mon Jul 24 09:17:27 CEST 2017


Commit: 4fd3582b32c56692a74c2719b2f064847418491a
Author: Campbell Barton
Date:   Mon Jul 24 15:28:14 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB4fd3582b32c56692a74c2719b2f064847418491a

Manipulator: view-selected support

Only applies to selected manipulators
(currently not used for regular manipulators).

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

M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/windowmanager/manipulators/WM_manipulator_api.h
M	source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c

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

diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 067f5781392..8d507ac86c2 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -3069,6 +3069,8 @@ static int viewselected_exec(bContext *C, wmOperator *op)
 	SceneLayer *sl = CTX_data_scene_layer(C);
 	bGPdata *gpd = CTX_data_gpencil_data(C);
 	const bool is_gp_edit = ((gpd) && (gpd->flag & GP_DATA_STROKE_EDITMODE));
+	const bool is_face_map = ((is_gp_edit == false) && ar->manipulator_map &&
+	                          WM_manipulatormap_is_any_selected(ar->manipulator_map));
 	Object *ob = OBACT_NEW;
 	Object *obedit = CTX_data_edit_object(C);
 	float min[3], max[3];
@@ -3080,8 +3082,7 @@ static int viewselected_exec(bContext *C, wmOperator *op)
 	const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
 
 	INIT_MINMAX(min, max);
-
-	if (is_gp_edit) {
+	if (is_gp_edit || is_face_map) {
 		ob = NULL;
 	}
 
@@ -3113,6 +3114,9 @@ static int viewselected_exec(bContext *C, wmOperator *op)
 		}
 		CTX_DATA_END;
 	}
+	else if (is_face_map) {
+		ok = WM_manipulatormap_minmax(ar->manipulator_map, true, true, min, max);
+	}
 	else if (obedit) {
 		ok = ED_view3d_minmax_verts(obedit, min, max);    /* only selected */
 	}
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
index f6b430d5f45..fbc4791ecd4 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_api.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
@@ -207,6 +207,9 @@ void WM_manipulatormap_add_handlers(struct ARegion *ar, struct wmManipulatorMap
 bool WM_manipulatormap_select_all(struct bContext *C, struct wmManipulatorMap *mmap, const int action);
 bool WM_manipulatormap_cursor_set(const struct wmManipulatorMap *mmap, struct wmWindow *win);
 bool WM_manipulatormap_is_any_selected(const struct wmManipulatorMap *mmap);
+bool WM_manipulatormap_minmax(
+        const struct wmManipulatorMap *mmap, bool use_hidden, bool use_select,
+        float r_min[3], float r_max[3]);
 
 /* -------------------------------------------------------------------- */
 /* wmManipulatorMapType */
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
index 7eb48c1c726..aea989d2cac 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulator_map.c
@@ -141,6 +141,27 @@ bool WM_manipulatormap_is_any_selected(const wmManipulatorMap *mmap)
 }
 
 /**
+ * \note We could use a callback to define bounds, for now just use matrix location.
+ */
+bool WM_manipulatormap_minmax(
+        const wmManipulatorMap *mmap, bool UNUSED(use_hidden), bool use_select,
+        float r_min[3], float r_max[3])
+{
+	if (use_select) {
+		int i;
+		for (i = 0; i < mmap->mmap_context.selected_len; i++) {
+			minmax_v3v3_v3(r_min, r_max, mmap->mmap_context.selected[i]->matrix_basis[3]);
+		}
+		return i != 0;
+	}
+	else {
+		bool ok = false;
+		BLI_assert(!"TODO");
+		return ok;
+	}
+}
+
+/**
  * Creates and returns idname hash table for (visible) manipulators in \a mmap
  *
  * \param poll  Polling function for excluding manipulators.




More information about the Bf-blender-cvs mailing list