triangulate and beauty fill also needed changes to selection handling after recent changes.
This commit is contained in:
@@ -118,7 +118,8 @@ static int add_primitive_plane_exec(bContext *C, wmOperator *op)
|
||||
obedit = make_prim_init(C, CTX_DATA_(BLF_I18NCONTEXT_ID_MESH, "Plane"), &dia, mat, &was_editmode, loc, rot, layer);
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(em, op, "verts.out",
|
||||
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))
|
||||
{
|
||||
@@ -162,7 +163,9 @@ static int add_primitive_cube_exec(bContext *C, wmOperator *op)
|
||||
obedit = make_prim_init(C, CTX_DATA_(BLF_I18NCONTEXT_ID_MESH, "Cube"), &dia, mat, &was_editmode, loc, rot, layer);
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(em, op, "verts.out", "create_cube matrix=%m4 size=%f",
|
||||
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))
|
||||
{
|
||||
return OPERATOR_CANCELLED;
|
||||
@@ -216,7 +219,8 @@ static int add_primitive_circle_exec(bContext *C, wmOperator *op)
|
||||
obedit = make_prim_init(C, CTX_DATA_(BLF_I18NCONTEXT_ID_MESH, "Circle"), &dia, mat, &was_editmode, loc, rot, layer);
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(em, op, "verts.out",
|
||||
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",
|
||||
RNA_int_get(op->ptr, "vertices"), RNA_float_get(op->ptr, "radius"),
|
||||
cap_end, cap_tri, mat))
|
||||
@@ -269,7 +273,7 @@ static int add_primitive_cylinder_exec(bContext *C, wmOperator *op)
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "verts.out",
|
||||
em, op, "verts.out", false,
|
||||
"create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4",
|
||||
RNA_int_get(op->ptr, "vertices"),
|
||||
RNA_float_get(op->ptr, "radius"),
|
||||
@@ -329,7 +333,7 @@ static int add_primitive_cone_exec(bContext *C, wmOperator *op)
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "verts.out",
|
||||
em, op, "verts.out", false,
|
||||
"create_cone segments=%i diameter1=%f diameter2=%f cap_ends=%b cap_tris=%b depth=%f matrix=%m4",
|
||||
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))
|
||||
@@ -385,7 +389,8 @@ static int add_primitive_grid_exec(bContext *C, wmOperator *op)
|
||||
obedit = make_prim_init(C, CTX_DATA_(BLF_I18NCONTEXT_ID_MESH, "Grid"), &dia, mat, &was_editmode, loc, rot, layer);
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(em, op, "verts.out",
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "verts.out", false,
|
||||
"create_grid x_segments=%i y_segments=%i size=%f matrix=%m4",
|
||||
RNA_int_get(op->ptr, "x_subdivisions"),
|
||||
RNA_int_get(op->ptr, "y_subdivisions"),
|
||||
@@ -444,7 +449,10 @@ static int add_primitive_monkey_exec(bContext *C, wmOperator *op)
|
||||
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(em, op, "verts.out", "create_monkey matrix=%m4", mat)) {
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "verts.out", false,
|
||||
"create_monkey matrix=%m4", mat))
|
||||
{
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
@@ -485,7 +493,8 @@ static int add_primitive_uvsphere_exec(bContext *C, wmOperator *op)
|
||||
obedit = make_prim_init(C, CTX_DATA_(BLF_I18NCONTEXT_ID_MESH, "Sphere"), &dia, mat, &was_editmode, loc, rot, layer);
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(em, op, "verts.out",
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "verts.out", false,
|
||||
"create_uvsphere u_segments=%i v_segments=%i diameter=%f matrix=%m4",
|
||||
RNA_int_get(op->ptr, "segments"), RNA_int_get(op->ptr, "ring_count"),
|
||||
RNA_float_get(op->ptr, "size"), mat))
|
||||
@@ -538,7 +547,7 @@ static int add_primitive_icosphere_exec(bContext *C, wmOperator *op)
|
||||
em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "verts.out",
|
||||
em, op, "verts.out", false,
|
||||
"create_icosphere subdivisions=%i diameter=%f matrix=%m4",
|
||||
RNA_int_get(op->ptr, "subdivisions"),
|
||||
RNA_float_get(op->ptr, "size"), mat))
|
||||
|
@@ -2759,8 +2759,13 @@ static int edbm_beautify_fill_exec(bContext *C, wmOperator *op)
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
|
||||
if (!EDBM_op_callf(em, op, "beautify_fill faces=%hf edges=ae", BM_ELEM_SELECT))
|
||||
if (!EDBM_op_call_and_selectf(
|
||||
em, op, "geom.out", true,
|
||||
"beautify_fill faces=%hf edges=ae",
|
||||
BM_ELEM_SELECT))
|
||||
{
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
EDBM_update_generic(em, true, true);
|
||||
|
||||
@@ -2855,9 +2860,12 @@ static int edbm_quads_convert_to_tris_exec(bContext *C, wmOperator *op)
|
||||
EDBM_op_init(em, &bmop, op, "triangulate faces=%hf use_beauty=%b", BM_ELEM_SELECT, use_beauty);
|
||||
BMO_op_exec(em->bm, &bmop);
|
||||
|
||||
BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "faces.out", BM_FACE, BM_ELEM_SELECT, true);
|
||||
|
||||
/* now call beauty fill */
|
||||
if (use_beauty) {
|
||||
EDBM_op_callf(em, op,
|
||||
EDBM_op_call_and_selectf(
|
||||
em, op, "geom.out", true,
|
||||
"beautify_fill faces=%S edges=%S",
|
||||
&bmop, "faces.out", &bmop, "edges.out");
|
||||
}
|
||||
@@ -3057,7 +3065,6 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op)
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMesh *bm = em->bm;
|
||||
BMOperator bmop;
|
||||
const float angle_limit = RNA_float_get(op->ptr, "angle_limit");
|
||||
const bool use_dissolve_boundaries = RNA_boolean_get(op->ptr, "use_dissolve_boundaries");
|
||||
const int delimit = RNA_enum_get(op->ptr, "delimit");
|
||||
@@ -3095,14 +3102,10 @@ static int edbm_dissolve_limited_exec(bContext *C, wmOperator *op)
|
||||
dissolve_flag = BM_ELEM_SELECT;
|
||||
}
|
||||
|
||||
EDBM_op_init(em, &bmop, op,
|
||||
EDBM_op_call_and_selectf(
|
||||
em, op, "region.out", true,
|
||||
"dissolve_limit edges=%he verts=%hv angle_limit=%f use_dissolve_boundaries=%b delimit=%i",
|
||||
dissolve_flag, dissolve_flag, angle_limit, use_dissolve_boundaries, delimit);
|
||||
BMO_op_exec(em->bm, &bmop);
|
||||
BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, "region.out", BM_FACE, BM_ELEM_SELECT, true);
|
||||
if (!EDBM_op_finish(em, &bmop, op, true)) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
EDBM_update_generic(em, true, true);
|
||||
|
||||
|
@@ -270,7 +270,9 @@ bool EDBM_op_callf(BMEditMesh *em, wmOperator *op, const char *fmt, ...)
|
||||
return EDBM_op_finish(em, &bmop, op, true);
|
||||
}
|
||||
|
||||
bool EDBM_op_call_and_selectf(BMEditMesh *em, wmOperator *op, const char *select_slot_out, const char *fmt, ...)
|
||||
bool EDBM_op_call_and_selectf(BMEditMesh *em, wmOperator *op,
|
||||
const char *select_slot_out, const bool select_extend,
|
||||
const char *fmt, ...)
|
||||
{
|
||||
BMOpSlot *slot_select_out;
|
||||
BMesh *bm = em->bm;
|
||||
@@ -294,8 +296,11 @@ bool EDBM_op_call_and_selectf(BMEditMesh *em, wmOperator *op, const char *select
|
||||
|
||||
slot_select_out = BMO_slot_get(bmop.slots_out, select_slot_out);
|
||||
hflag = slot_select_out->slot_subtype.elem & BM_ALL_NOLOOP;
|
||||
BLI_assert(hflag != 0);
|
||||
|
||||
if (select_extend == false) {
|
||||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, false);
|
||||
}
|
||||
|
||||
BMO_slot_buffer_hflag_enable(em->bm, bmop.slots_out, select_slot_out, hflag, BM_ELEM_SELECT, true);
|
||||
|
||||
|
@@ -59,7 +59,8 @@ struct LinkNode;
|
||||
/* Calls a bmesh op, reporting errors to the user, etc */
|
||||
bool EDBM_op_callf(struct BMEditMesh *em, struct wmOperator *op, const char *fmt, ...);
|
||||
bool EDBM_op_call_and_selectf(struct BMEditMesh *em, struct wmOperator *op,
|
||||
const char *selectslot, const char *fmt, ...);
|
||||
const char *select_slot, const bool select_replace,
|
||||
const char *fmt, ...);
|
||||
/* Same as above, but doesn't report errors.*/
|
||||
bool EDBM_op_call_silentf(struct BMEditMesh *em, const char *fmt, ...);
|
||||
|
||||
|
Reference in New Issue
Block a user