Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-11-02 19:07:49 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-11-02 19:07:49 +0300
commit1d9f90ed42ba61d615dd0188e39cc12f0b71493f (patch)
tree9238a741403b33613d6fbdb19497f34ffdbb1b68 /source/blender/editors/mesh/editmesh_add.c
parent9ea97203ae2049ea50e7bfbe3e30815eebb5990c (diff)
- all add object operators now take view_align as an argument, and enter_editmode where its used. Makes running the operator from python pradictable without having to know the user prefs.
- missing return in function - python error in view3d (assumed active object exists)
Diffstat (limited to 'source/blender/editors/mesh/editmesh_add.c')
-rw-r--r--source/blender/editors/mesh/editmesh_add.c92
1 files changed, 77 insertions, 15 deletions
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index e7cf03cd230..85c3558c2ef 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -1273,7 +1273,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se
/* uses context to figure out transform for primitive */
/* returns standard diameter */
-static float new_primitive_matrix(bContext *C, float primmat[][4])
+static float new_primitive_matrix(bContext *C, int view_align, float primmat[][4])
{
Object *obedit= CTX_data_edit_object(C);
Scene *scene = CTX_data_scene(C);
@@ -1283,7 +1283,7 @@ static float new_primitive_matrix(bContext *C, float primmat[][4])
Mat4One(primmat);
- if(rv3d && (U.flag & USER_ADD_VIEWALIGNED)) {
+ if(rv3d && view_align) {
Mat3CpyMat4(vmat, rv3d->viewmat);
} else
Mat3One(vmat);
@@ -1307,7 +1307,8 @@ static float new_primitive_matrix(bContext *C, float primmat[][4])
/* ********* add primitive operators ************* */
-static void make_prim_ext(bContext *C, int type, int tot, int seg,
+static void make_prim_ext(bContext *C, int view_align, int enter_editmode,
+ int type, int tot, int seg,
int subdiv, float dia, float depth, int ext, int fill)
{
Object *obedit= CTX_data_edit_object(C);
@@ -1316,14 +1317,14 @@ static void make_prim_ext(bContext *C, int type, int tot, int seg,
if(obedit==NULL || obedit->type!=OB_MESH) {
/* create editmode */
- ED_object_add_type(C, OB_MESH);
+ ED_object_add_type(C, OB_MESH, view_align, FALSE);
ED_object_enter_editmode(C, EM_DO_UNDO);
obedit= CTX_data_edit_object(C);
newob = 1;
}
else DAG_id_flush_update(&obedit->id, OB_RECALC_DATA);
- dia *= new_primitive_matrix(C, mat);
+ dia *= new_primitive_matrix(C, view_align, mat);
make_prim(obedit, type, mat, tot, seg, subdiv, dia, depth, ext, fill);
@@ -1332,7 +1333,7 @@ static void make_prim_ext(bContext *C, int type, int tot, int seg,
/* userdef */
- if (newob && (U.flag & USER_ADD_EDITMODE)==0) {
+ if (newob && !enter_editmode) {
ED_object_exit_editmode(C, EM_FREEDATA); /* adding EM_DO_UNDO messes up operator redo */
}
WM_event_add_notifier(C, NC_OBJECT|ND_DRAW, obedit);
@@ -1340,8 +1341,11 @@ static void make_prim_ext(bContext *C, int type, int tot, int seg,
static int add_primitive_plane_exec(bContext *C, wmOperator *op)
{
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
- make_prim_ext(C, PRIM_PLANE, 4, 0, 0, sqrt(2.0f), 0.0f, 0, 1);
+ make_prim_ext(C, view_align, enter_editmode, PRIM_PLANE, 4, 0, 0, sqrt(2.0f), 0.0f, 0, 1);
return OPERATOR_FINISHED;
}
@@ -1353,17 +1357,23 @@ void MESH_OT_primitive_plane_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_plane_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_plane_exec;
ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_cube_exec(bContext *C, wmOperator *op)
{
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
/* sqrt(2.0f) - plane (diameter of 1.41 makes it unit size) */
- make_prim_ext(C, PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 1.0f, 1, 1);
+ make_prim_ext(C, view_align, enter_editmode, PRIM_CUBE, 4, 0, 0, sqrt(2.0f), 1.0f, 1, 1);
return OPERATOR_FINISHED;
}
@@ -1375,16 +1385,23 @@ void MESH_OT_primitive_cube_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_cube_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_cube_exec;
ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_circle_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_CIRCLE, RNA_int_get(op->ptr, "vertices"), 0, 0,
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ 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"));
@@ -1399,6 +1416,7 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_circle_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_circle_exec;
ot->poll= ED_operator_scene_editable;
@@ -1409,11 +1427,17 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot)
RNA_def_int(ot->srna, "vertices", 32, INT_MIN, INT_MAX, "Vertices", "", 3, 500);
RNA_def_float(ot->srna, "radius", 1.0f, 0.0, FLT_MAX, "Radius", "", 0.001, 100.00);
RNA_def_boolean(ot->srna, "fill", 0, "Fill", "");
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_tube_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_CYLINDER, RNA_int_get(op->ptr, "vertices"), 0, 0,
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ PRIM_CYLINDER, RNA_int_get(op->ptr, "vertices"), 0, 0,
RNA_float_get(op->ptr,"radius"),
RNA_float_get(op->ptr, "depth"), 1,
RNA_boolean_get(op->ptr, "cap_ends"));
@@ -1429,6 +1453,7 @@ void MESH_OT_primitive_tube_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_tube_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_tube_exec;
ot->poll= ED_operator_scene_editable;
@@ -1440,11 +1465,17 @@ void MESH_OT_primitive_tube_add(wmOperatorType *ot)
RNA_def_float(ot->srna, "radius", 1.0f, 0.0, FLT_MAX, "Radius", "", 0.001, 100.00);
RNA_def_float(ot->srna, "depth", 1.0f, 0.0, FLT_MAX, "Depth", "", 0.001, 100.00);
RNA_def_boolean(ot->srna, "cap_ends", 1, "Cap Ends", "");
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_cone_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_CONE, RNA_int_get(op->ptr, "vertices"), 0, 0,
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ 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"));
@@ -1459,6 +1490,7 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_cone_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_cone_exec;
ot->poll= ED_operator_scene_editable;
@@ -1471,11 +1503,16 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot)
RNA_def_float(ot->srna, "depth", 1.0f, 0.0, FLT_MAX, "Depth", "", 0.001, 100.00);
RNA_def_boolean(ot->srna, "cap_end", 0, "Cap End", "");
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_grid_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_GRID, RNA_int_get(op->ptr, "x_subdivisions"),
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ 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);
@@ -1490,6 +1527,7 @@ void MESH_OT_primitive_grid_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_grid_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_grid_exec;
ot->poll= ED_operator_scene_editable;
@@ -1500,11 +1538,18 @@ void MESH_OT_primitive_grid_add(wmOperatorType *ot)
RNA_def_int(ot->srna, "x_subdivisions", 10, INT_MIN, INT_MAX, "X Subdivisions", "", 3, 1000);
RNA_def_int(ot->srna, "y_subdivisions", 10, INT_MIN, INT_MAX, "Y Subdivisions", "", 3, 1000);
RNA_def_float(ot->srna, "size", 1.0f, 0.0, FLT_MAX, "Size", "", 0.001, FLT_MAX);
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_MONKEY, 0, 0, 2, 0.0f, 0.0f, 0, 0);
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ PRIM_MONKEY, 0, 0, 2, 0.0f, 0.0f, 0, 0);
+
return OPERATOR_FINISHED;
}
@@ -1516,16 +1561,23 @@ void MESH_OT_primitive_monkey_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_monkey_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_monkey_exec;
ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_UVSPHERE, RNA_int_get(op->ptr, "rings"),
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ 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);
@@ -1540,6 +1592,7 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_uv_sphere_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_uvsphere_exec;
ot->poll= ED_operator_scene_editable;
@@ -1550,11 +1603,17 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot)
RNA_def_int(ot->srna, "segments", 32, INT_MIN, INT_MAX, "Segments", "", 3, 500);
RNA_def_int(ot->srna, "rings", 24, INT_MIN, INT_MAX, "Rings", "", 3, 500);
RNA_def_float(ot->srna, "size", 1.0f, 0.0, FLT_MAX, "Size", "", 0.001, 100.00);
+
+ ED_object_add_generic_props(ot, TRUE);
}
static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
{
- make_prim_ext(C, PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"),
+ int view_align, enter_editmode;
+ ED_object_add_generic_get_opts(op, &view_align, &enter_editmode);
+
+ make_prim_ext(C, view_align, enter_editmode,
+ PRIM_ICOSPHERE, 0, 0, RNA_int_get(op->ptr, "subdivisions"),
RNA_float_get(op->ptr,"size"), 0.0f, 0, 0);
return OPERATOR_FINISHED;
@@ -1568,6 +1627,7 @@ void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
ot->idname= "MESH_OT_primitive_ico_sphere_add";
/* api callbacks */
+ ot->invoke= ED_object_add_generic_invoke;
ot->exec= add_primitive_icosphere_exec;
ot->poll= ED_operator_scene_editable;
@@ -1577,6 +1637,8 @@ void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot)
/* props */
RNA_def_int(ot->srna, "subdivisions", 2, 0, 6, "Subdivisions", "", 0, 8);
RNA_def_float(ot->srna, "size", 1.0f, 0.0f, FLT_MAX, "Size", "", 0.001f, 100.00);
+
+ ED_object_add_generic_props(ot, TRUE);
}
/****************** add duplicate operator ***************/