forked from bartvdbraak/blender
adding curve and mesh objects through python would create the object without assigning it to any layers.
now initialize from the scene (when the value is unset), and throw an error when the value is set to all false.
This commit is contained in:
parent
08c4725a13
commit
69cb2cc37b
@ -5269,7 +5269,9 @@ static int curve_prim_add(bContext *C, wmOperator *op, int type){
|
|||||||
float mat[4][4];
|
float mat[4][4];
|
||||||
|
|
||||||
//object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
|
//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) {
|
if(obedit==NULL || obedit->type!=OB_CURVE) {
|
||||||
Curve *cu;
|
Curve *cu;
|
||||||
|
@ -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);
|
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);
|
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);
|
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);
|
void ED_object_single_users(struct Scene *scene, int full);
|
||||||
|
@ -1304,7 +1304,8 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
|
|||||||
unsigned int layer;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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) */
|
/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
|
||||||
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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) */
|
/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
|
||||||
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_CIRCLE, RNA_int_get(op->ptr, "vertices"), 0, 0,
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_CYLINDER, RNA_int_get(op->ptr, "vertices"), 0, 0,
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_CONE, RNA_int_get(op->ptr, "vertices"), 0, 0,
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_GRID, RNA_int_get(op->ptr, "x_subdivisions"),
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_MONKEY, 0, 0, 2, 0.0f, 0.0f, 0, 0);
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_UVSPHERE, RNA_int_get(op->ptr, "rings"),
|
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;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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,
|
make_prim_ext(C, loc, rot, enter_editmode, layer,
|
||||||
PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"),
|
PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"),
|
||||||
|
@ -232,7 +232,7 @@ int ED_object_add_generic_invoke(bContext *C, wmOperator *op, wmEvent *event)
|
|||||||
return op->type->exec(C, op);
|
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 a, layer_values[32];
|
||||||
int view_align;
|
int view_align;
|
||||||
@ -242,6 +242,22 @@ void ED_object_add_generic_get_opts(bContext *C, wmOperator *op, float *loc, flo
|
|||||||
*enter_editmode = TRUE;
|
*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"))
|
if (RNA_property_is_set(op->ptr, "view_align"))
|
||||||
view_align = RNA_boolean_get(op->ptr, "view_align");
|
view_align = RNA_boolean_get(op->ptr, "view_align");
|
||||||
else
|
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_float_get_array(op->ptr, "location", loc);
|
||||||
RNA_boolean_get_array(op->ptr, "layer", layer_values);
|
|
||||||
|
|
||||||
for(a=0; a<32; a++)
|
if(*layer == 0) {
|
||||||
if(layer_values[a])
|
BKE_report(op->reports, RPT_ERROR, "Property 'layer' has no values set");
|
||||||
*layer |= (1 << a);
|
return 0;
|
||||||
else
|
}
|
||||||
*layer &= ~(1 << a);
|
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for object add primitive operators */
|
/* for object add primitive operators */
|
||||||
@ -298,7 +314,9 @@ static int object_add_exec(bContext *C, wmOperator *op)
|
|||||||
unsigned int layer;
|
unsigned int layer;
|
||||||
float loc[3], rot[3];
|
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);
|
ED_object_add_type(C, RNA_enum_get(op->ptr, "type"), loc, rot, enter_editmode, layer);
|
||||||
|
|
||||||
return OPERATOR_FINISHED;
|
return OPERATOR_FINISHED;
|
||||||
@ -357,7 +375,9 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type)
|
|||||||
float mat[4][4];
|
float mat[4][4];
|
||||||
|
|
||||||
object_add_generic_invoke_options(C, op);
|
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) {
|
if(type==PFIELD_GUIDE) {
|
||||||
ob= ED_object_add_type(C, OB_CURVE, loc, rot, FALSE, layer);
|
ob= ED_object_add_type(C, OB_CURVE, loc, rot, FALSE, layer);
|
||||||
@ -391,7 +411,8 @@ static Object *effector_add_type(bContext *C, wmOperator *op, int type)
|
|||||||
/* for object add operator */
|
/* for object add operator */
|
||||||
static int effector_add_exec(bContext *C, wmOperator *op)
|
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;
|
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);
|
RNA_boolean_set(op->ptr, "view_align", 1);
|
||||||
|
|
||||||
object_add_generic_invoke_options(C, op);
|
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);
|
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];
|
float mat[4][4];
|
||||||
|
|
||||||
object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
|
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) {
|
if(obedit==NULL || obedit->type!=OB_SURF) {
|
||||||
obedit= ED_object_add_type(C, OB_SURF, loc, rot, TRUE, layer);
|
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];
|
float mat[4][4];
|
||||||
|
|
||||||
object_add_generic_invoke_options(C, op); // XXX these props don't get set right when only exec() is called
|
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) {
|
if(obedit==NULL || obedit->type!=OB_MBALL) {
|
||||||
obedit= ED_object_add_type(C, OB_MBALL, loc, rot, TRUE, layer);
|
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];
|
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
|
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)
|
if(obedit && obedit->type==OB_FONT)
|
||||||
return OPERATOR_CANCELLED;
|
return OPERATOR_CANCELLED;
|
||||||
@ -664,7 +692,8 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
|
|||||||
float loc[3], rot[3];
|
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
|
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)) {
|
if ((obedit==NULL) || (obedit->type != OB_ARMATURE)) {
|
||||||
obedit= ED_object_add_type(C, OB_ARMATURE, loc, rot, TRUE, layer);
|
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];
|
float loc[3], rot[3];
|
||||||
|
|
||||||
object_add_generic_invoke_options(C, op);
|
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);
|
ob= ED_object_add_type(C, OB_LAMP, loc, rot, FALSE, layer);
|
||||||
if(ob && ob->data)
|
if(ob && ob->data)
|
||||||
@ -766,7 +796,8 @@ static int group_instance_add_exec(bContext *C, wmOperator *op)
|
|||||||
float loc[3], rot[3];
|
float loc[3], rot[3];
|
||||||
|
|
||||||
object_add_generic_invoke_options(C, op);
|
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) {
|
if(group) {
|
||||||
Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer);
|
Object *ob= ED_object_add_type(C, OB_EMPTY, loc, rot, FALSE, layer);
|
||||||
|
Loading…
Reference in New Issue
Block a user