[Bf-blender-cvs] [4c3ed98ca27] blender2.8: Local View

Dalai Felinto noreply at git.blender.org
Sun Nov 25 12:59:56 CET 2018


Commit: 4c3ed98ca27667c3403361199096e31eaa93cce2
Author: Dalai Felinto
Date:   Sun Nov 25 09:50:34 2018 -0200
Branches: blender2.8
https://developer.blender.org/rB4c3ed98ca27667c3403361199096e31eaa93cce2

Local View

Bring back per-viewport localview. This is based on Blender 2.79.
We have a limit of 16 different local view viewports.

We are using both the numpad /, as well as the regular /.

Missing features:
* Hack to make sure lights are always visible.
* Make rendered mode with external engines to support this as well
  (probably just need to support this in the RNA iterators).
* Support over 16 viewports by taking existing viewports out of local view.

The code can use a cleanup pass in the future to unify the test to see
if an object is visible (or we can use TESTBASE in more places).

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

M	release/scripts/presets/keyconfig/keymap_data/blender_default.py
M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/BKE_object.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/layer_utils.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/object_update.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/depsgraph/intern/depsgraph_query_iter.cc
M	source/blender/draw/intern/draw_manager.c
M	source/blender/editors/armature/armature_add.c
M	source/blender/editors/armature/armature_edit.c
M	source/blender/editors/armature/armature_naming.c
M	source/blender/editors/armature/armature_relations.c
M	source/blender/editors/armature/armature_select.c
M	source/blender/editors/armature/editarmature_undo.c
M	source/blender/editors/armature/pose_edit.c
M	source/blender/editors/armature/pose_select.c
M	source/blender/editors/armature/pose_slide.c
M	source/blender/editors/armature/pose_transform.c
M	source/blender/editors/armature/pose_utils.c
M	source/blender/editors/curve/editcurve.c
M	source/blender/editors/curve/editcurve_paint.c
M	source/blender/editors/curve/editcurve_select.c
M	source/blender/editors/curve/editcurve_undo.c
M	source/blender/editors/include/ED_armature.h
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/include/ED_uvedit.h
M	source/blender/editors/lattice/editlattice_select.c
M	source/blender/editors/lattice/editlattice_tools.c
M	source/blender/editors/lattice/editlattice_undo.c
M	source/blender/editors/mesh/editmesh_bevel.c
M	source/blender/editors/mesh/editmesh_bisect.c
M	source/blender/editors/mesh/editmesh_extrude.c
M	source/blender/editors/mesh/editmesh_extrude_screw.c
M	source/blender/editors/mesh/editmesh_extrude_spin.c
M	source/blender/editors/mesh/editmesh_inset.c
M	source/blender/editors/mesh/editmesh_intersect.c
M	source/blender/editors/mesh/editmesh_loopcut.c
M	source/blender/editors/mesh/editmesh_path.c
M	source/blender/editors/mesh/editmesh_polybuild.c
M	source/blender/editors/mesh/editmesh_rip.c
M	source/blender/editors/mesh/editmesh_rip_edge.c
M	source/blender/editors/mesh/editmesh_select.c
M	source/blender/editors/mesh/editmesh_select_similar.c
M	source/blender/editors/mesh/editmesh_tools.c
M	source/blender/editors/mesh/editmesh_undo.c
M	source/blender/editors/metaball/editmball_undo.c
M	source/blender/editors/metaball/mball_edit.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_random.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/object/object_vgroup.c
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_info/info_stats.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_ops.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/space_view3d/view3d_snap.c
M	source/blender/editors/space_view3d/view3d_utils.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_gizmo_2d.c
M	source/blender/editors/transform/transform_gizmo_3d.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/uvedit/uvedit_draw.c
M	source/blender/editors/uvedit/uvedit_ops.c
M	source/blender/editors/uvedit/uvedit_smart_stitch.c
M	source/blender/editors/uvedit/uvedit_unwrap_ops.c
M	source/blender/makesdna/DNA_layer_types.h
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesdna/DNA_view3d_types.h
M	source/blender/makesrna/intern/rna_object_api.c

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

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 2b83b03f322..00fd59820e0 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -845,6 +845,9 @@ def km_view3d(params):
         ])
 
     items.extend([
+        # Visibility.
+        ("view3d.localview", {"type": 'NUMPAD_SLASH', "value": 'PRESS'}, None),
+        ("view3d.localview", {"type": 'SLASH', "value": 'PRESS'}, None),
         # Navigation.
         ("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
         ("view3d.move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 8b4028386ff..1cf9a3a4b31 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -609,6 +609,7 @@ class VIEW3D_MT_view(Menu):
 
         layout.operator("view3d.view_all", text="Frame All").center = False
         layout.operator("view3d.view_persportho", text="Perspective/Orthographic")
+        layout.operator("view3d.localview")
 
         layout.separator()
 
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 2d736b41d1a..e98fa189379 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -53,6 +53,7 @@ struct Main;
 struct Object;
 struct RenderEngine;
 struct Scene;
+struct View3D;
 struct ViewLayer;
 struct WorkSpace;
 
@@ -140,6 +141,11 @@ void BKE_layer_eval_view_layer_indexed(
 
 /* iterators */
 
+typedef struct ObjectsVisibleIteratorData {
+	struct ViewLayer *view_layer;
+	struct View3D *v3d;
+} ObjectsVisibleIteratorData;
+
 void BKE_view_layer_selected_objects_iterator_begin(BLI_Iterator *iter, void *data_in);
 void BKE_view_layer_selected_objects_iterator_next(BLI_Iterator *iter);
 void BKE_view_layer_selected_objects_iterator_end(BLI_Iterator *iter);
@@ -155,6 +161,7 @@ void BKE_view_layer_selected_editable_objects_iterator_end(BLI_Iterator *iter);
 struct ObjectsInModeIteratorData {
 	int object_mode;
 	struct ViewLayer *view_layer;
+	struct View3D *v3d;
 	struct Base *base_active;
 };
 
@@ -174,39 +181,57 @@ void BKE_view_layer_visible_bases_iterator_begin(BLI_Iterator *iter, void *data_
 void BKE_view_layer_visible_bases_iterator_next(BLI_Iterator *iter);
 void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
 
-#define FOREACH_SELECTED_OBJECT_BEGIN(view_layer, _instance)                  \
+#define FOREACH_SELECTED_OBJECT_BEGIN(_view_layer, _v3d, _instance)           \
+{ \
+	struct ObjectsVisibleIteratorData data_ = {                               \
+		.view_layer = _view_layer,                                            \
+		.v3d = _v3d,                                                          \
+	};                                                                        \
 	ITER_BEGIN(BKE_view_layer_selected_objects_iterator_begin,                \
 	           BKE_view_layer_selected_objects_iterator_next,                 \
 	           BKE_view_layer_selected_objects_iterator_end,                  \
-	           view_layer, Object *, _instance)
+	           &data_, Object *, _instance)
 
 #define FOREACH_SELECTED_OBJECT_END                                           \
-	ITER_END
+	ITER_END;                                                                 \
+} ((void)0)
 
-#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(view_layer, _instance)         \
+#define FOREACH_SELECTED_EDITABLE_OBJECT_BEGIN(_view_layer, _v3d, _instance)  \
+{ \
+	struct ObjectsVisibleIteratorData data_ = {                               \
+		.view_layer = _view_layer,                                            \
+		.v3d = _v3d,                                                          \
+	};                                                                        \
 	ITER_BEGIN(BKE_view_layer_selected_editable_objects_iterator_begin,       \
 	           BKE_view_layer_selected_editable_objects_iterator_next,        \
 	           BKE_view_layer_selected_editable_objects_iterator_end,         \
-	           view_layer, Object *, _instance)
+	           &data_, Object *, _instance)
 
 #define FOREACH_SELECTED_EDITABLE_OBJECT_END                                  \
-	ITER_END
+	ITER_END;                                                                 \
+} ((void)0)
 
-#define FOREACH_VISIBLE_OBJECT_BEGIN(view_layer, _instance)                   \
+#define FOREACH_VISIBLE_OBJECT_BEGIN(_view_layer, _v3d, _instance)            \
+{ \
+	struct ObjectsVisibleIteratorData data_ = {                               \
+		.view_layer = _view_layer,                                            \
+		.v3d = _v3d,                                                          \
+	};                                                                        \
 	ITER_BEGIN(BKE_view_layer_visible_objects_iterator_begin,                 \
 	           BKE_view_layer_visible_objects_iterator_next,                  \
 	           BKE_view_layer_visible_objects_iterator_end,                   \
-	           view_layer, Object *, _instance)
+	           &data_, Object *, _instance)
 
 #define FOREACH_VISIBLE_OBJECT_END                                            \
-	ITER_END
-
+	ITER_END;                                                                 \
+} ((void)0)
 
-#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _object_mode, _instance)      \
+#define FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _instance) \
 { \
 	struct ObjectsInModeIteratorData data_ = {                                \
 		.object_mode = _object_mode,                                          \
 		.view_layer = _view_layer,                                            \
+		.v3d = _v3d,                                                          \
 		.base_active = _view_layer->basact,                                   \
 	};                                                                        \
 	ITER_BEGIN(BKE_view_layer_bases_in_mode_iterator_begin,                   \
@@ -218,14 +243,14 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
 	ITER_END;                                                                 \
 } ((void)0)
 
-#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _instance)               \
-	FOREACH_BASE_IN_MODE_BEGIN(_view_layer, OB_MODE_EDIT, _instance)
+#define FOREACH_BASE_IN_EDIT_MODE_BEGIN(_view_layer, _v3d, _instance)         \
+	FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, OB_MODE_EDIT, _instance)
 
 #define FOREACH_BASE_IN_EDIT_MODE_END                                         \
 	FOREACH_BASE_IN_MODE_END
 
-#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _object_mode, _instance)    \
-	FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _object_mode, _base) {            \
+#define FOREACH_OBJECT_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _instance) \
+	FOREACH_BASE_IN_MODE_BEGIN(_view_layer, _v3d, _object_mode, _base) {      \
 		Object *_instance = _base->object;
 
 #define FOREACH_OBJECT_IN_MODE_END                                            \
@@ -247,14 +272,20 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
 #define FOREACH_SELECTED_BASE_END                                             \
 	ITER_END
 
-#define FOREACH_VISIBLE_BASE_BEGIN(view_layer, _instance)                     \
+#define FOREACH_VISIBLE_BASE_BEGIN(_view_layer, _v3d, _instance)              \
+{ \
+	struct ObjectsVisibleIteratorData data_ = {                               \
+		.view_layer = _view_layer,                                            \
+		.v3d = _v3d,                                                          \
+	};                                                                        \
 	ITER_BEGIN(BKE_view_layer_visible_bases_iterator_begin,                   \
 	           BKE_view_layer_visible_bases_iterator_next,                    \
 	           BKE_view_layer_visible_bases_iterator_end,                     \
-	           view_layer, Base *, _instance)
+	           &data_, Base *, _instance)
 
 #define FOREACH_VISIBLE_BASE_END                                              \
-	ITER_END
+	ITER_END;                                                                 \
+} ((void)0)
 
 
 #define FOREACH_OBJECT_BEGIN(view_layer, _instance)                           \
@@ -332,21 +363,21 @@ struct ObjectsInModeParams {
 };
 
 Base **BKE_view_layer_array_from_bases_in_mode_params(
-        struct ViewLayer *view_layer, uint *r_len,
+        struct ViewLayer *view_layer, struct View3D *v3d, uint *r_len,
         const struct ObjectsInModeParams *params);
 
 struct Object **BKE_view_layer_array_from_objects_in_mode_params(
-        struct ViewLayer *view_layer, uint *len,
+        struct ViewLayer *view_layer, struct View3D *v3d, uint *len,
         const struct ObjectsInModeParams *params);
 
-#define BKE_view_layer_array_from_objects_in_mode(view_layer, r_len, ...) \
+#define BKE_view_layer_array_from_objects_in_mode(view_layer, v3d, r_len, ...) \
 	BKE_view_layer_array_from_objects_in_mode_params( \
-	        view_layer, r_len, \
+	        view_layer, v3d, r_len, \
 	        &(const struct ObjectsInModeParams)__VA_ARGS__)
 
-#define BKE_view_layer_array_from_bases_in_mode(view_layer, r_len, ...) \
+#define BKE_view_layer_array_from_bases_in_mode(view_layer, v3d, r_len, ...) \
 	BKE_view_layer_array_from_bases_in_mode_params( \
-	        view_layer, r_len, \
+	        view_layer, v3d, r_len, \
 	        &(const struct ObjectsInModeParams)__VA_ARGS__)
 
 bool BKE_view_layer_filter_edit_mesh_has_uvs(struct Object *ob, void *user_data);
@@ -354,38 +385,38 @@ bool BKE_view_layer_filter_edit_mesh_has_edges(struct Object *ob, void *user_dat
 
 /* Utility macros that wrap common args (add more as needed). */
 
-#define BKE_view_layer_array_from_objects_in_edit_mode(view_layer, r_len) \
+#define BKE_view_layer_array_from_objects_in_edit_mode(view_layer, v3d, r_len) \
 	BKE_view_layer_array_from_objects_in_mode( \
-	view_layer, r_len, { \
+	view_layer, 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list