Index: source/blender/editors/mesh/editmesh_select.c =================================================================== --- source/blender/editors/mesh/editmesh_select.c (Revision 60953) +++ source/blender/editors/mesh/editmesh_select.c (Arbeitskopie) @@ -74,6 +74,9 @@ /* use bmesh operator flags for a few operators */ #define BMO_ELE_TAG 1 + +int edbm_select_linked_exec(bContext *C, wmOperator *op); + /* ****************************** MIRROR **************** */ void EDBM_select_mirrored(BMEditMesh *em, bool extend, @@ -847,6 +850,8 @@ PropertyRNA *prop = RNA_struct_find_property(op->ptr, "threshold"); const int type = RNA_enum_get(op->ptr, "type"); + const bool linked = RNA_boolean_get(op->ptr, "linked"); + int ret; if (!RNA_property_is_set(op->ptr, prop)) { RNA_property_float_set(op->ptr, prop, ts->select_thresh); @@ -855,9 +860,17 @@ ts->select_thresh = RNA_property_float_get(op->ptr, prop); } - if (type < 100) return similar_vert_select_exec(C, op); - else if (type < 200) return similar_edge_select_exec(C, op); - else return similar_face_select_exec(C, op); + if (type < 100) ret = similar_vert_select_exec(C, op); + else if (type < 200) ret = similar_edge_select_exec(C, op); + else ret = similar_face_select_exec(C, op); + + if (linked) + { + /* extend selection to islands */ + ret = edbm_select_linked_exec(C, op); + } + + return ret; } static EnumPropertyItem *select_similar_type_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), @@ -929,6 +942,9 @@ RNA_def_enum(ot->srna, "compare", prop_similar_compare_types, SIM_CMP_EQ, "Compare", ""); RNA_def_float(ot->srna, "threshold", 0.0, 0.0, 1.0, "Threshold", "", 0.0, 1.0); + + RNA_def_boolean(ot->srna, "linked", false, "Linked", "Select all geometry linked to initial selection"); + RNA_def_boolean(ot->srna, "limit", false, "Limit Linked by Seams", ""); } @@ -1850,7 +1866,7 @@ } } -static int edbm_select_linked_exec(bContext *C, wmOperator *op) +int edbm_select_linked_exec(bContext *C, wmOperator *op) { Object *obedit = CTX_data_edit_object(C); BMEditMesh *em = BKE_editmesh_from_object(obedit);