adding curve and mesh objects through python would create the object without assignin...
authorCampbell Barton <ideasman42@gmail.com>
Mon, 14 Jun 2010 15:39:50 +0000 (15:39 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 14 Jun 2010 15:39:50 +0000 (15:39 +0000)
now initialize from the scene (when the value is unset), and throw an error when the value is set to all false.

source/blender/editors/curve/editcurve.c
source/blender/editors/include/ED_object.h
source/blender/editors/mesh/editmesh_add.c
source/blender/editors/object/object_add.c

index 40cf95dfa5d1296d34486645a75fbacbf93690b6..1b140276c221e72d8ca1f96f5d5adcc1c0cf553b 100644 (file)
@@ -5269,7 +5269,9 @@ static int curve_prim_add(bContext *C, wmOperator *op, int type){
        float mat[4][4];
        
        //object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
+
        
        if(obedit==NULL || obedit->type!=OB_CURVE) {
                Curve *cu;
index da4896b34359a21a8769b9e738a931cc7e69a276..a03cd135f1ca5baa9b49591f649efcf32a7c07ac 100644 (file)
@@ -88,7 +88,7 @@ float ED_object_new_primitive_matrix(struct bContext *C, struct Object *editob,
 
 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 bContext *C, struct wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer);
+int ED_object_add_generic_get_opts(struct bContext *C, 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);
index f0e6f40af308796dfd6aec208ceceda866013fe8..a7a0a854f1b23571bd405f63545f40f469503cb0 100644 (file)
@@ -1304,7 +1304,8 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        /* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
        make_prim_ext(C, loc, rot, enter_editmode, layer,
@@ -1336,7 +1337,8 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        /* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
        make_prim_ext(C, loc, rot, enter_editmode, layer,
@@ -1368,7 +1370,8 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_CIRCLE, RNA_int_get(op->ptr, "vertices"), 0, 0,
@@ -1407,7 +1410,8 @@ static int add_primitive_tube_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_CYLINDER, RNA_int_get(op->ptr, "vertices"), 0, 0,
@@ -1448,7 +1452,8 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_CONE, RNA_int_get(op->ptr, "vertices"), 0, 0,
@@ -1488,7 +1493,8 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_GRID, RNA_int_get(op->ptr, "x_subdivisions"),
@@ -1527,7 +1533,8 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_MONKEY, 0, 0, 2, 0.0f, 0.0f, 0, 0);
@@ -1559,7 +1566,8 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_UVSPHERE, RNA_int_get(op->ptr, "rings"),
@@ -1598,7 +1606,8 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        make_prim_ext(C, loc, rot, enter_editmode, layer,
                        PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"),
index 9f8fe7ba0f2592a40bbdb6d499a62624f2ce5a38..e29c23b1f4de20952fa9024f392435648246e9b6 100644 (file)
@@ -232,7 +232,7 @@ int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *event)
        return op->type->exec(C, op);
 }
 
-void ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer)
+int ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, float *rot, int *enter_editmode, unsigned int *layer)
 {
        int a, layer_values[32];
        int view_align;
@@ -241,7 +241,23 @@ void ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, flo
        if(RNA_struct_find_property(op->ptr, "enter_editmode") && RNA_boolean_get(op->ptr, "enter_editmode")) {
                *enter_editmode = TRUE;
        }
-       
+
+       if(RNA_property_is_set(op->ptr, "layer")) {
+               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);
+               }
+       }
+       else {
+               /* not set, use the scenes layers */
+               Scene *scene = CTX_data_scene(C);
+               *layer = scene->layact;
+       }
+
        if (RNA_property_is_set(op->ptr, "view_align"))
                view_align = RNA_boolean_get(op->ptr, "view_align");
        else
@@ -254,13 +270,13 @@ void ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, flo
        
 
        RNA_float_get_array(op->ptr, "location", loc);
-       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);
+
+       if(*layer == 0) {
+               BKE_report(op->reports, RPT_ERROR, "Property 'layer' has no values set");
+               return 0;
+       }
+
+       return 1;
 }
 
 /* for object add primitive operators */
@@ -298,7 +314,9 @@ static int object_add_exec(bContext *C, wmOperator *op)
        unsigned int layer;
        float loc[3], rot[3];
        
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
+
        ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
        
        return OPERATOR_FINISHED;
@@ -357,7 +375,9 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type)
        float mat[4][4];
        
        object_add_generic_invoke_options(C, op);
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return NULL;
 
        if(type==PFIELD_GUIDE) {
                ob= ED_object_add_type(C, OB_CURVE, loc, rot, FALSE, layer);
@@ -391,8 +411,9 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type)
 /* for object add operator */
 static int effector_add_exec(bContext *C, wmOperator *op)
 {
-       effector_add_type(C, op, RNA_int_get(op->ptr, "type"));
-       
+       if(effector_add_type(C, op, RNA_int_get(op->ptr, "type")) == NULL)
+               return OPERATOR_CANCELLED;
+
        return OPERATOR_FINISHED;
 }
 
@@ -432,7 +453,9 @@ static int object_camera_add_exec(bContext *C, wmOperator *op)
        RNA_boolean_set(op->ptr, "view_align", 1);
        
        object_add_generic_invoke_options(C, op);
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_CAMERA, loc, rot, FALSE, layer);
        
@@ -489,7 +512,9 @@ static int object_add_surface_exec(bContext *C, wmOperator *op)
        float mat[4][4];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
        
        if(obedit==NULL || obedit->type!=OB_SURF) {
                obedit= ED_object_add_type(C, OB_SURF, loc, rot, TRUE, layer);
@@ -554,7 +579,9 @@ static int object_metaball_add_exec(bContext *C, wmOperator *op)
        float mat[4][4];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
        
        if(obedit==NULL || obedit->type!=OB_MBALL) {
                obedit= ED_object_add_type(C, OB_MBALL, loc, rot, TRUE, layer);
@@ -624,7 +651,8 @@ static int object_add_text_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
        
        if(obedit && obedit->type==OB_FONT)
                return OPERATOR_CANCELLED;
@@ -664,7 +692,8 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
        
        if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) {
                obedit= ED_object_add_type(C, OB_ARMATURE, loc, rot, TRUE, layer);
@@ -719,7 +748,8 @@ static int object_lamp_add_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op);
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        ob= ED_object_add_type(C, OB_LAMP, loc, rot, FALSE, layer);
        if(ob && ob->data)
@@ -766,7 +796,8 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
        float loc[3], rot[3];
        
        object_add_generic_invoke_options(C, op);
-       ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer);
+       if(!ED_object_add_generic_get_opts(C, op, loc, rot, &enter_editmode, &layer))
+               return OPERATOR_CANCELLED;
 
        if(group) {
                Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer);