diff options
Diffstat (limited to 'source/blender/editors/mesh/editmesh_add.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_add.c | 82 |
1 files changed, 66 insertions, 16 deletions
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c index 49383356b75..b0369c6f5ad 100644 --- a/source/blender/editors/mesh/editmesh_add.c +++ b/source/blender/editors/mesh/editmesh_add.c @@ -29,6 +29,7 @@ * \ingroup edmesh */ +#include "DNA_meshdata_types.h" #include "DNA_object_types.h" #include "DNA_scene_types.h" @@ -49,6 +50,7 @@ #include "ED_mesh.h" #include "ED_screen.h" #include "ED_object.h" +#include "ED_uvedit.h" #include "mesh_intern.h" /* own include */ @@ -105,16 +107,21 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op) bool enter_editmode; bool was_editmode; unsigned int layer; + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Plane"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4", - 1, 1, RNA_float_get(op->ptr, "radius"), mat)) + "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b", + 1, 1, RNA_float_get(op->ptr, "radius"), mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -139,6 +146,7 @@ void MESH_OT_primitive_plane_add(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ED_object_add_unit_props(ot); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -150,16 +158,21 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op) bool enter_editmode; bool was_editmode; unsigned int layer; + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cube"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_cube matrix=%m4 size=%f", - mat, RNA_float_get(op->ptr, "radius") * 2.0f)) + "create_cube matrix=%m4 size=%f calc_uvs=%b", + mat, RNA_float_get(op->ptr, "radius") * 2.0f, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -185,6 +198,7 @@ void MESH_OT_primitive_cube_add(wmOperatorType *ot) ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; ED_object_add_unit_props(ot); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -203,6 +217,7 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op) int cap_end, cap_tri; unsigned int layer; bool was_editmode; + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); cap_end = RNA_enum_get(op->ptr, "fill_type"); cap_tri = (cap_end == 2); @@ -212,11 +227,15 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op) obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Circle"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_circle segments=%i diameter=%f cap_ends=%b cap_tris=%b matrix=%m4", + "create_circle segments=%i diameter=%f cap_ends=%b cap_tris=%b matrix=%m4 calc_uvs=%b", RNA_int_get(op->ptr, "vertices"), RNA_float_get(op->ptr, "radius"), - cap_end, cap_tri, mat)) + cap_end, cap_tri, mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -245,6 +264,7 @@ void MESH_OT_primitive_circle_add(wmOperatorType *ot) ED_object_add_unit_props(ot); RNA_def_enum(ot->srna, "fill_type", fill_type_items, 0, "Fill Type", ""); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -259,20 +279,25 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op) const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type"); const bool cap_end = (end_fill_type != 0); const bool cap_tri = (end_fill_type == 2); + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cylinder"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4", + "create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b", RNA_int_get(op->ptr, "vertices"), RNA_float_get(op->ptr, "radius"), RNA_float_get(op->ptr, "radius"), cap_end, cap_tri, - RNA_float_get(op->ptr, "depth"), mat)) + RNA_float_get(op->ptr, "depth"), mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -302,6 +327,7 @@ void MESH_OT_primitive_cylinder_add(wmOperatorType *ot) RNA_def_float_distance(ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00); RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Cap Fill Type", ""); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -316,17 +342,22 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op) const int end_fill_type = RNA_enum_get(op->ptr, "end_fill_type"); const bool cap_end = (end_fill_type != 0); const bool cap_tri = (end_fill_type == 2); + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Cone"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4", + "create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4 calc_uvs=%b", RNA_int_get(op->ptr, "vertices"), RNA_float_get(op->ptr, "radius1"), - RNA_float_get(op->ptr, "radius2"), cap_end, cap_tri, RNA_float_get(op->ptr, "depth"), mat)) + RNA_float_get(op->ptr, "radius2"), cap_end, cap_tri, RNA_float_get(op->ptr, "depth"), mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -357,6 +388,7 @@ void MESH_OT_primitive_cone_add(wmOperatorType *ot) RNA_def_float_distance(ot->srna, "depth", 2.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Depth", "", 0.001, 100.00); RNA_def_enum(ot->srna, "end_fill_type", fill_type_items, 1, "Base Fill Type", ""); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -368,18 +400,23 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op) bool enter_editmode; bool was_editmode; unsigned int layer; + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Grid"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4", + "create_grid x_segments=%i y_segments=%i size=%f matrix=%m4 calc_uvs=%b", RNA_int_get(op->ptr, "x_subdivisions"), RNA_int_get(op->ptr, "y_subdivisions"), - RNA_float_get(op->ptr, "radius"), mat)) + RNA_float_get(op->ptr, "radius"), mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -410,6 +447,7 @@ void MESH_OT_primitive_grid_add(wmOperatorType *ot) RNA_def_int(ot->srna, "y_subdivisions", 10, 2, MESH_ADD_VERTS_MAXI, "Y Subdivisions", "", 2, 1000); ED_object_add_unit_props(ot); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -471,17 +509,22 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op) bool enter_editmode; bool was_editmode; unsigned int layer; + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Sphere"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_uvsphere u_segments=%i v_segments=%i diameter=%f matrix=%m4", + "create_uvsphere u_segments=%i v_segments=%i diameter=%f matrix=%m4 calc_uvs=%b", RNA_int_get(op->ptr, "segments"), RNA_int_get(op->ptr, "ring_count"), - RNA_float_get(op->ptr, "size"), mat)) + RNA_float_get(op->ptr, "size"), mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -510,6 +553,7 @@ void MESH_OT_primitive_uv_sphere_add(wmOperatorType *ot) RNA_def_int(ot->srna, "ring_count", 16, 3, MESH_ADD_VERTS_MAXI / 100, "Rings", "", 3, 500); RNA_def_float_distance(ot->srna, "size", 1.0f, 0.0, OBJECT_ADD_SIZE_MAXF, "Size", "", 0.001, 100.00); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } @@ -521,17 +565,22 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op) bool enter_editmode; bool was_editmode; unsigned int layer; + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); WM_operator_view3d_unit_defaults(C, op); ED_object_add_generic_get_opts(C, op, 'Z', loc, rot, &enter_editmode, &layer, NULL); obedit = make_prim_init(C, CTX_DATA_(BLT_I18NCONTEXT_ID_MESH, "Icosphere"), &dia, mat, &was_editmode, loc, rot, layer); em = BKE_editmesh_from_object(obedit); + if (calc_uvs && !ED_uvedit_test(obedit)) { + ED_mesh_uv_texture_add(obedit->data, NULL, true); + } + if (!EDBM_op_call_and_selectf( em, op, "verts.out", false, - "create_icosphere subdivisions=%i diameter=%f matrix=%m4", + "create_icosphere subdivisions=%i diameter=%f matrix=%m4 calc_uvs=%b", RNA_int_get(op->ptr, "subdivisions"), - RNA_float_get(op->ptr, "size"), mat)) + RNA_float_get(op->ptr, "size"), mat, calc_uvs)) { return OPERATOR_CANCELLED; } @@ -559,5 +608,6 @@ void MESH_OT_primitive_ico_sphere_add(wmOperatorType *ot) RNA_def_int(ot->srna, "subdivisions", 2, 1, 10, "Subdivisions", "", 1, 8); RNA_def_float_distance(ot->srna, "size", 1.0f, 0.0f, OBJECT_ADD_SIZE_MAXF, "Size", "", 0.001f, 100.00); + ED_object_add_mesh_props(ot); ED_object_add_generic_props(ot, true); } |