[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26159] trunk/blender/source/blender/ editors: Fix [#20750] adding Lattice object in Local space doesn't appears

Matt Ebb matt at mke3.net
Thu Jan 21 05:54:53 CET 2010


Revision: 26159
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26159
Author:   broken
Date:     2010-01-21 05:54:52 +0100 (Thu, 21 Jan 2010)

Log Message:
-----------
Fix [#20750] adding Lattice object in Local space doesn't appears

Now add object operators take a layer parameter (hidden in UI) to determine their layer when created.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/include/ED_object.h
    trunk/blender/source/blender/editors/mesh/editmesh_add.c
    trunk/blender/source/blender/editors/object/object_add.c

Modified: trunk/blender/source/blender/editors/include/ED_object.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_object.h	2010-01-21 03:08:57 UTC (rev 26158)
+++ trunk/blender/source/blender/editors/include/ED_object.h	2010-01-21 04:54:52 UTC (rev 26159)
@@ -86,8 +86,8 @@
 
 void ED_object_add_generic_props(struct wmOperatorType *ot, int do_editmode);
 int ED_object_add_generic_invoke(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
-void ED_object_add_generic_get_opts(struct wmOperator *op, float *loc, float *rot, int *enter_editmode);
-struct Object *ED_object_add_type(struct bContext *C, int type, float *loc, float *rot, int enter_editmode);
+void ED_object_add_generic_get_opts(struct wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer);
+struct Object *ED_object_add_type(struct bContext *C, int type, float *loc, float *rot, int enter_editmode, unsigned int layer);
 
 void ED_object_single_users(struct Scene *scene, int full);
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_add.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_add.c	2010-01-21 03:08:57 UTC (rev 26158)
+++ trunk/blender/source/blender/editors/mesh/editmesh_add.c	2010-01-21 04:54:52 UTC (rev 26159)
@@ -1272,7 +1272,7 @@
 
 /* ********* add primitive operators ************* */
 
-static void make_prim_ext(bContext *C, float *loc, float *rot, int enter_editmode,
+static void make_prim_ext(bContext *C, float *loc, float *rot, int enter_editmode, unsigned int layer, 
 		int type, int tot, int seg,
 		int subdiv, float dia, float depth, int ext, int fill)
 {
@@ -1281,7 +1281,7 @@
 	float mat[4][4];
 
 	if(obedit==NULL || obedit->type!=OB_MESH) {
-		obedit= ED_object_add_type(C, OB_MESH, loc, rot, FALSE);
+		obedit= ED_object_add_type(C, OB_MESH, loc, rot, FALSE, layer);
 		
 		/* create editmode */
 		ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER); /* rare cases the active layer is messed up */
@@ -1307,12 +1307,13 @@
 static int add_primitive_plane_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
 	/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_PLANE, 4, 0, 0, sqrt(2.0f), 0.0f, 0, 1);
 	return OPERATOR_FINISHED;	
 }
@@ -1338,12 +1339,13 @@
 static int add_primitive_cube_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
 	/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 1.0f, 1, 1);
 	return OPERATOR_FINISHED;
 }
@@ -1369,11 +1371,12 @@
 static int add_primitive_circle_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_CIRCLE, RNA_int_get(op->ptr, "vertices"), 0, 0,
 			RNA_float_get(op->ptr,"radius"), 0.0f, 0,
 			RNA_boolean_get(op->ptr, "fill"));
@@ -1407,11 +1410,12 @@
 static int add_primitive_tube_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_CYLINDER, RNA_int_get(op->ptr, "vertices"), 0, 0,
 			RNA_float_get(op->ptr,"radius"),
 			RNA_float_get(op->ptr, "depth"), 1, 
@@ -1447,11 +1451,12 @@
 static int add_primitive_cone_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_CONE, RNA_int_get(op->ptr, "vertices"), 0, 0,
 			RNA_float_get(op->ptr,"radius"), RNA_float_get(op->ptr, "depth"),
 			0, RNA_boolean_get(op->ptr, "cap_end"));
@@ -1486,11 +1491,12 @@
 static int add_primitive_grid_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_GRID, RNA_int_get(op->ptr, "x_subdivisions"),
 			RNA_int_get(op->ptr, "y_subdivisions"), 0,
 			RNA_float_get(op->ptr,"size"), 0.0f, 0, 1);
@@ -1524,11 +1530,12 @@
 static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_MONKEY, 0, 0, 2, 0.0f, 0.0f, 0, 0);
 
 	return OPERATOR_FINISHED;
@@ -1555,11 +1562,12 @@
 static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_UVSPHERE, RNA_int_get(op->ptr, "rings"),
 			RNA_int_get(op->ptr, "segments"), 0,
 			RNA_float_get(op->ptr,"size"), 0.0f, 0, 0);
@@ -1593,11 +1601,12 @@
 static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
 
-	make_prim_ext(C, loc, rot, enter_editmode,
+	make_prim_ext(C, loc, rot, enter_editmode, layer,
 			PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"),
 			RNA_float_get(op->ptr,"size"), 0.0f, 0, 0);
 

Modified: trunk/blender/source/blender/editors/object/object_add.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_add.c	2010-01-21 03:08:57 UTC (rev 26158)
+++ trunk/blender/source/blender/editors/object/object_add.c	2010-01-21 04:54:52 UTC (rev 26159)
@@ -181,6 +181,7 @@
 
 void ED_object_add_generic_props(wmOperatorType *ot, int do_editmode)
 {
+	PropertyRNA *prop;
 	RNA_def_boolean(ot->srna, "view_align", 0, "Align to View", "Align the new object to the view.");
 
 	if(do_editmode)
@@ -188,6 +189,9 @@
 	
 	RNA_def_float_vector(ot->srna, "location", 3, NULL, -FLT_MAX, FLT_MAX, "Location", "Location for the newly added object.", -FLT_MAX, FLT_MAX);
 	RNA_def_float_rotation(ot->srna, "rotation", 3, NULL, -FLT_MAX, FLT_MAX, "Rotation", "Rotation for the newly added object", -FLT_MAX, FLT_MAX);
+	
+	prop = RNA_def_boolean_layer_member(ot->srna, "layer", 32, NULL, "Layer", "");
+	RNA_def_property_flag(prop, PROP_HIDDEN);
 }
 
 static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
@@ -218,7 +222,30 @@
 
 		RNA_float_set_array(op->ptr, "rotation", rot);
 	}
-	
+
+	if (!RNA_property_is_set(op->ptr, "layer")) {
+		View3D *v3d = CTX_wm_view3d(C);
+		Scene *scene = CTX_data_scene(C);
+		int a, values[32], layer;
+		
+		if (v3d) {
+			if (v3d->localvd) {
+				layer = v3d->layact + v3d->lay;
+				for(a=0; a<32; a++)
+					values[a]= (layer & (1<<a));
+			} else {
+				layer = v3d->layact;
+				for(a=0; a<32; a++)
+					values[a]= (layer & (1<<a));
+			}
+		} else {
+			layer = scene->lay;
+			for(a=0; a<32; a++)
+				values[a]= (layer & (1<<a));
+		}
+		
+		RNA_boolean_set_array(op->ptr, "layer", values);
+	}
 }
 
 int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *event)
@@ -227,20 +254,28 @@
 	return op->type->exec(C, op);
 }
 
-void ED_object_add_generic_get_opts(wmOperator *op, float *loc, float *rot, int *enter_editmode)
+void ED_object_add_generic_get_opts(wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer)
 {
+	int a, layer_values[32];
+	
 	*enter_editmode = FALSE;
-
 	if(RNA_struct_find_property(op->ptr, "enter_editmode") && RNA_boolean_get(op->ptr, "enter_editmode")) {
 		*enter_editmode = TRUE;
 	}
 	
 	RNA_float_get_array(op->ptr, "location", loc);
 	RNA_float_get_array(op->ptr, "rotation", rot);
+	RNA_boolean_get_array(op->ptr, "layer", layer_values);
+	
+	for(a=0; a<32; a++)
+		if(layer_values[a])
+			*layer |= (1 << a);
+		else
+			*layer &= ~(1 << a);
 }
 
 /* for object add primitive operators */
-Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int enter_editmode)
+Object *ED_object_add_type(bContext *C, int type, float *loc, float *rot, int enter_editmode, unsigned int layer)
 {
 	Scene *scene= CTX_data_scene(C);
 	Object *ob;
@@ -251,6 +286,7 @@
 	
 	/* deselects all, sets scene->basact */
 	ob= add_object(scene, type);
+	BASACT->lay = ob->lay = layer;
 	/* editor level activate, notifiers */
 	ED_base_object_activate(C, BASACT);
 
@@ -269,10 +305,11 @@
 static int object_add_exec(bContext *C, wmOperator *op)
 {
 	int enter_editmode;
+	unsigned int layer;
 	float loc[3], rot[3];
 	
-	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode);
-	ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode);
+	ED_object_add_generic_get_opts(op, loc, rot, &enter_editmode, &layer);
+	ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
 	
 	return OPERATOR_FINISHED;
 }

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list