Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/mesh/editmesh_tools.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
| Show First 20 Lines • Show All 3,257 Lines • ▼ Show 20 Lines | static int edbm_merge_exec(bContext *C, wmOperator *op) | ||||
| } | } | ||||
| MEM_freeN(objects); | MEM_freeN(objects); | ||||
| return OPERATOR_FINISHED; | return OPERATOR_FINISHED; | ||||
| } | } | ||||
| static const EnumPropertyItem merge_type_items[] = { | static const EnumPropertyItem merge_type_items[] = { | ||||
| {MESH_MERGE_FIRST, "FIRST", 0, "At First", ""}, | |||||
| {MESH_MERGE_LAST, "LAST", 0, "At Last", ""}, | |||||
| {MESH_MERGE_CENTER, "CENTER", 0, "At Center", ""}, | {MESH_MERGE_CENTER, "CENTER", 0, "At Center", ""}, | ||||
| {MESH_MERGE_CURSOR, "CURSOR", 0, "At Cursor", ""}, | {MESH_MERGE_CURSOR, "CURSOR", 0, "At Cursor", ""}, | ||||
| {MESH_MERGE_COLLAPSE, "COLLAPSE", 0, "Collapse", ""}, | {MESH_MERGE_COLLAPSE, "COLLAPSE", 0, "Collapse", ""}, | ||||
| {MESH_MERGE_FIRST, "FIRST", 0, "At First", ""}, | |||||
| {MESH_MERGE_LAST, "LAST", 0, "At Last", ""}, | |||||
| {0, NULL, 0, NULL, NULL}, | {0, NULL, 0, NULL, NULL}, | ||||
| }; | }; | ||||
| static const EnumPropertyItem *merge_type_itemf(bContext *C, | static const EnumPropertyItem *merge_type_itemf(bContext *C, | ||||
| PointerRNA *UNUSED(ptr), | PointerRNA *UNUSED(ptr), | ||||
| PropertyRNA *UNUSED(prop), | PropertyRNA *UNUSED(prop), | ||||
| bool *r_free) | bool *r_free) | ||||
| { | { | ||||
| Object *obedit; | Object *obedit; | ||||
| EnumPropertyItem *item = NULL; | EnumPropertyItem *item = NULL; | ||||
| int totitem = 0; | int totitem = 0; | ||||
| if (!C) { /* needed for docs */ | if (!C) { /* needed for docs */ | ||||
| return merge_type_items; | return merge_type_items; | ||||
| } | } | ||||
| obedit = CTX_data_edit_object(C); | obedit = CTX_data_edit_object(C); | ||||
| if (obedit && obedit->type == OB_MESH) { | if (obedit && obedit->type == OB_MESH) { | ||||
| BMEditMesh *em = BKE_editmesh_from_object(obedit); | BMEditMesh *em = BKE_editmesh_from_object(obedit); | ||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_CENTER); | |||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_CURSOR); | |||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_COLLAPSE); | |||||
| /* Only active object supported: | /* Only active object supported: | ||||
| * In practice it doesn't make sense to run this operation on non-active meshes | * In practice it doesn't make sense to run this operation on non-active meshes | ||||
| * since selecting will activate - we could have own code-path for these but it's a hassle | * since selecting will activate - we could have own code-path for these but it's a hassle | ||||
| * for now just apply to the active (first) object. */ | * for now just apply to the active (first) object. */ | ||||
| if (em->selectmode & SCE_SELECT_VERTEX) { | if (em->selectmode & SCE_SELECT_VERTEX) { | ||||
| if (em->bm->selected.first && em->bm->selected.last && | if (em->bm->selected.first && em->bm->selected.last && | ||||
| ((BMEditSelection *)em->bm->selected.first)->htype == BM_VERT && | ((BMEditSelection *)em->bm->selected.first)->htype == BM_VERT && | ||||
| ((BMEditSelection *)em->bm->selected.last)->htype == BM_VERT) { | ((BMEditSelection *)em->bm->selected.last)->htype == BM_VERT) { | ||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_FIRST); | RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_FIRST); | ||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_LAST); | RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_LAST); | ||||
| } | } | ||||
| else if (em->bm->selected.first && | else if (em->bm->selected.first && | ||||
| ((BMEditSelection *)em->bm->selected.first)->htype == BM_VERT) { | ((BMEditSelection *)em->bm->selected.first)->htype == BM_VERT) { | ||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_FIRST); | RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_FIRST); | ||||
| } | } | ||||
| else if (em->bm->selected.last && | else if (em->bm->selected.last && | ||||
| ((BMEditSelection *)em->bm->selected.last)->htype == BM_VERT) { | ((BMEditSelection *)em->bm->selected.last)->htype == BM_VERT) { | ||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_LAST); | RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_LAST); | ||||
| } | } | ||||
| } | } | ||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_CENTER); | |||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_CURSOR); | |||||
| RNA_enum_items_add_value(&item, &totitem, merge_type_items, MESH_MERGE_COLLAPSE); | |||||
| RNA_enum_item_end(&item, &totitem); | RNA_enum_item_end(&item, &totitem); | ||||
| *r_free = true; | *r_free = true; | ||||
| return item; | return item; | ||||
| } | } | ||||
| /* Get all items e.g. when creating keymap item. */ | /* Get all items e.g. when creating keymap item. */ | ||||
| ▲ Show 20 Lines • Show All 6,220 Lines • Show Last 20 Lines | |||||