diff options
author | Joseph Eagar <joeedh@gmail.com> | 2009-11-08 02:10:18 +0300 |
---|---|---|
committer | Joseph Eagar <joeedh@gmail.com> | 2009-11-08 02:10:18 +0300 |
commit | 2ead17843c08c9c4ed211010c0ad4d2a5c31a99c (patch) | |
tree | 0fc77499284278cdf8b017eac803910c87b4e07a /source/blender/editors/mesh/editmesh_add.c | |
parent | cfa4f3222a427eff1991e8fd2c341ce4ca5385bd (diff) | |
parent | 4e9699debff6b0ac7e3bfc91d615e071218a67db (diff) |
merge with trunk/2.5 at r24378
Diffstat (limited to 'source/blender/editors/mesh/editmesh_add.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_add.c | 95 |
1 files changed, 78 insertions, 17 deletions
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 1be2cf85ef6..4afbdd7272e 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -1170,7 +1170,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); @@ -1180,7 +1180,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); @@ -1204,7 +1204,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); @@ -1213,14 +1214,13 @@ 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_enter_editmode(C, EM_DO_UNDO); - obedit= CTX_data_edit_object(C); + obedit= ED_object_add_type(C, OB_MESH, view_align, FALSE); + ED_object_enter_editmode(C, EM_DO_UNDO|EM_IGNORE_LAYER); /* rare cases the active layer is messed up */ 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); @@ -1229,7 +1229,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); @@ -1237,8 +1237,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; } @@ -1250,17 +1253,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; } @@ -1272,16 +1281,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")); @@ -1296,6 +1312,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; @@ -1306,11 +1323,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")); @@ -1326,6 +1349,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; @@ -1337,11 +1361,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")); @@ -1356,6 +1386,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; @@ -1368,11 +1399,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); @@ -1387,6 +1423,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; @@ -1397,11 +1434,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; } @@ -1413,16 +1457,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); @@ -1437,6 +1488,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; @@ -1447,11 +1499,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; @@ -1465,6 +1523,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; @@ -1474,4 +1533,6 @@ 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); } |