[Bf-blender-cvs] [341d5b08b0f] blender2.8: Fix adding objects in local view

Campbell Barton noreply at git.blender.org
Fri Dec 7 03:01:41 CET 2018


Commit: 341d5b08b0f6743ddd03bc9868a96d311b509900
Author: Campbell Barton
Date:   Fri Dec 7 12:59:04 2018 +1100
Branches: blender2.8
https://developer.blender.org/rB341d5b08b0f6743ddd03bc9868a96d311b509900

Fix adding objects in local view

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

M	source/blender/editors/curve/editcurve_add.c
M	source/blender/editors/gpencil/gpencil_paint.c
M	source/blender/editors/gpencil/gpencil_utils.c
M	source/blender/editors/include/ED_gpencil.h
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/mesh/editmesh_add.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/space_outliner/outliner_collections.c

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

diff --git a/source/blender/editors/curve/editcurve_add.c b/source/blender/editors/curve/editcurve_add.c
index 7eabd9c96e8..eef3df94033 100644
--- a/source/blender/editors/curve/editcurve_add.c
+++ b/source/blender/editors/curve/editcurve_add.c
@@ -477,13 +477,14 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
 	Nurb *nu;
 	bool newob = false;
 	bool enter_editmode;
+	ushort local_view_bits;
 	float dia;
 	float loc[3], rot[3];
 	float mat[4][4];
 
 	WM_operator_view3d_unit_defaults(C, op);
 
-	if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL))
+	if (!ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL))
 		return OPERATOR_CANCELLED;
 
 	if (!isSurf) { /* adding curve */
@@ -491,7 +492,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
 			const char *name = get_curve_defname(type);
 			Curve *cu;
 
-			obedit = ED_object_add_type(C, OB_CURVE, name, loc, rot, true);
+			obedit = ED_object_add_type(C, OB_CURVE, name, loc, rot, true, local_view_bits);
 			newob = true;
 
 			cu = (Curve *)obedit->data;
@@ -507,7 +508,7 @@ static int curvesurf_prim_add(bContext *C, wmOperator *op, int type, int isSurf)
 	else { /* adding surface */
 		if (obedit == NULL || obedit->type != OB_SURF) {
 			const char *name = get_surf_defname(type);
-			obedit = ED_object_add_type(C, OB_SURF, name, loc, rot, true);
+			obedit = ED_object_add_type(C, OB_SURF, name, loc, rot, true, local_view_bits);
 			newob = true;
 		}
 		else {
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index eb483f2db80..15629295a6f 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -1815,11 +1815,17 @@ static bool gp_session_initdata(bContext *C, wmOperator *op, tGPsdata *p)
 				return 0;
 			}
 
-			/* if active object doesn't exist or isn't a GP Object, create one */
-			const float *cur = p->scene->cursor.location;
 			if ((!obact) || (obact->type != OB_GPENCIL)) {
+				View3D *v3d = p->sa->spacedata.first;
+				/* if active object doesn't exist or isn't a GP Object, create one */
+				const float *cur = p->scene->cursor.location;
+
+				ushort local_view_bits = 0;
+				if (v3d->localvd) {
+					local_view_bits = v3d->local_view_uuid;
+				}
 				/* create new default object */
-				obact = ED_add_gpencil_object(C, p->scene, cur);
+				obact = ED_add_gpencil_object(C, p->scene, cur, local_view_bits);
 			}
 			/* assign object after all checks to be sure we have one active */
 			p->ob = obact;
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 4d16f842fa3..1f1b779d4f8 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -1205,11 +1205,11 @@ void ED_gpencil_reset_layers_parent(Depsgraph *depsgraph, Object *obact, bGPdata
 /* GP Object Stuff */
 
 /* Helper function to create new OB_GPENCIL Object */
-Object *ED_add_gpencil_object(bContext *C, Scene *UNUSED(scene), const float loc[3])
+Object *ED_add_gpencil_object(bContext *C, Scene *UNUSED(scene), const float loc[3], ushort local_view_bits)
 {
 	float rot[3] = {0.0f};
 
-	Object *ob = ED_object_add_type(C, OB_GPENCIL, NULL, loc, rot, false);
+	Object *ob = ED_object_add_type(C, OB_GPENCIL, NULL, loc, rot, false, local_view_bits);
 
 	/* define size */
 	BKE_object_obdata_size_init(ob, GP_OBGPENCIL_DEFAULT_SIZE);
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 3ea0dbf10fa..62f8873d4bd 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -235,7 +235,8 @@ void ED_gpencil_create_monkey(struct bContext *C, float mat[4][4]);
 void ED_gpencil_create_stroke(struct bContext *C, float mat[4][4]);
 
 /* ------------ Object Utilities ------------ */
-struct Object *ED_add_gpencil_object(struct bContext *C, struct Scene *scene, const float loc[3]);
+struct Object *ED_add_gpencil_object(
+        struct bContext *C, struct Scene *scene, const float loc[3], unsigned short local_view_bits);
 void ED_gpencil_add_defaults(struct bContext *C);
 /* set object modes */
 void ED_gpencil_setup_modes(struct bContext *C, struct bGPdata *gpd, int newmode);
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index a6be1c833eb..58a7e5a1203 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -178,14 +178,15 @@ void ED_object_add_unit_props_size(struct wmOperatorType *ot);
 void ED_object_add_unit_props_radius(struct wmOperatorType *ot);
 void ED_object_add_generic_props(struct wmOperatorType *ot, bool do_editmode);
 void ED_object_add_mesh_props(struct wmOperatorType *ot);
-bool ED_object_add_generic_get_opts(struct bContext *C, struct wmOperator *op, const char view_align_axis,
-                                    float loc[3], float rot[3],
-                                    bool *enter_editmode, bool *is_view_aligned);
+bool ED_object_add_generic_get_opts(
+        struct bContext *C, struct wmOperator *op, const char view_align_axis,
+        float loc[3], float rot[3],
+        bool *enter_editmode, unsigned short *local_view_bits, bool *is_view_aligned);
 
 struct Object *ED_object_add_type(
         struct bContext *C,
         int type, const char *name, const float loc[3], const float rot[3],
-        bool enter_editmode)
+        bool enter_editmode, unsigned short local_view_bits)
         ATTR_NONNULL(1) ATTR_RETURNS_NONNULL;
 
 void ED_object_single_users(struct Main *bmain, struct Scene *scene, const bool full, const bool copy_groups);
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index dd16cb9e4ec..bcde2411899 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -66,14 +66,14 @@ typedef struct MakePrimitiveData {
 
 static Object *make_prim_init(
         bContext *C, const char *idname,
-        const float loc[3], const float rot[3],
+        const float loc[3], const float rot[3], ushort local_view_bits,
         MakePrimitiveData *r_creation_data)
 {
 	Object *obedit = CTX_data_edit_object(C);
 
 	r_creation_data->was_editmode = false;
 	if (obedit == NULL || obedit->type != OB_MESH) {
-		obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false);
+		obedit = ED_object_add_type(C, OB_MESH, idname, loc, rot, false, local_view_bits);
 
 		/* create editmode */
 		ED_object_editmode_enter(C, EM_IGNORE_LAYER); /* rare cases the active layer is messed up */
@@ -111,11 +111,14 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
 	BMEditMesh *em;
 	float loc[3], rot[3];
 	bool enter_editmode;
+	ushort local_view_bits;
 	const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
 	WM_operator_view3d_unit_defaults(C, op);
-	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
-	obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"), loc, rot, &creation_data);
+	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
+	obedit = make_prim_init(
+	        C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"),
+	        loc, rot, local_view_bits, &creation_data);
 	em = BKE_editmesh_from_object(obedit);
 
 	if (calc_uvs) {
@@ -161,11 +164,14 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
 	BMEditMesh *em;
 	float loc[3], rot[3];
 	bool enter_editmode;
+	ushort local_view_bits;
 	const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
 	WM_operator_view3d_unit_defaults(C, op);
-	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
-	obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"), loc, rot, &creation_data);
+	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
+	obedit = make_prim_init(
+	        C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"),
+	        loc, rot, local_view_bits, &creation_data);
 	em = BKE_editmesh_from_object(obedit);
 
 	if (calc_uvs) {
@@ -218,6 +224,7 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
 	BMEditMesh *em;
 	float loc[3], rot[3];
 	bool enter_editmode;
+	ushort local_view_bits;
 	int cap_end, cap_tri;
 	const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
@@ -225,8 +232,10 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
 	cap_tri = (cap_end == 2);
 
 	WM_operator_view3d_unit_defaults(C, op);
-	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
-	obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"), loc, rot, &creation_data);
+	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
+	obedit = make_prim_init(
+	        C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"),
+	        loc, rot, local_view_bits, &creation_data);
 	em = BKE_editmesh_from_object(obedit);
 
 	if (calc_uvs) {
@@ -277,14 +286,17 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
 	BMEditMesh *em;
 	float loc[3], rot[3];
 	bool enter_editmode;
+	ushort local_view_bits;
 	const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type");
 	const bool cap_end = (end_fill_type != 0);
 	const bool cap_tri = (end_fill_type == 2);
 	const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs");
 
 	WM_operator_view3d_unit_defaults(C, op);
-	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, NULL);
-	obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"), loc, rot, &creation_data);
+	ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &local_view_bits, NULL);
+	obedit = make_prim_init(
+	        C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"),
+	        loc, rot, local_view_bits, &creation_data);
 	em = BKE_editmesh_from_object(obedit);
 
 	if (calc_uvs) {
@@ -339,14 +351,17 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list