diff options
author | Fabian Schempp <fabianschempp@googlemail.com> | 2021-08-06 00:47:44 +0300 |
---|---|---|
committer | Fabian Schempp <fabianschempp@googlemail.com> | 2021-08-06 00:47:44 +0300 |
commit | 504e3c563f851fc0296fb2d6b96704233c477814 (patch) | |
tree | de2e8e00995bd44c3fe73bc1746b4a0f99816ce8 /source/blender/bmesh/intern | |
parent | b5573bfbf45fb67a5ee4081f3e22f9e73c74e8ae (diff) |
added side selection.
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mesh.c | 80 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_mesh.h | 5 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_opdefines.c | 6 |
3 files changed, 54 insertions, 37 deletions
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c index ad8158e2e6f..217c3502b40 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.c +++ b/source/blender/bmesh/intern/bmesh_mesh.c @@ -1455,12 +1455,7 @@ void BM_select_vertices(BMesh *bm, const bool *mask) BMVert *v; int i = 0; BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - if (mask[i]) { - BM_elem_flag_set(v, BM_ELEM_SELECT, true); - } - else { - BM_elem_flag_set(v, BM_ELEM_SELECT, false); - } + BM_elem_flag_set(v, BM_ELEM_SELECT, mask[i]); i++; } } @@ -1474,12 +1469,7 @@ void BM_select_edges(BMesh *bm, const bool *mask) BMEdge *e; int i = 0; BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { - if (mask[i]) { - BM_elem_flag_set(e, BM_ELEM_SELECT, true); - } - else { - BM_elem_flag_set(e, BM_ELEM_SELECT, false); - } + BM_elem_flag_set(e, BM_ELEM_SELECT, mask[i]); i++; } } @@ -1493,14 +1483,47 @@ void BM_select_faces(BMesh *bm, const bool *mask) BMFace *f; int i = 0; BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - if (mask[i]) { - BM_elem_flag_set(f, BM_ELEM_SELECT, true); - } - else { - BM_elem_flag_set(f, BM_ELEM_SELECT, false); - } + BM_elem_flag_set(f, BM_ELEM_SELECT, mask[i]); + i++; + } +} + +void BM_get_selected_faces(BMesh *bm, bool **selection) +{ + BMIter iter; + BMFace *f; + int i = 0; + *selection = MEM_malloc_arrayN((size_t)bm->totface, sizeof(bool), "bm faces"); + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + (*selection)[i] = BM_elem_flag_test(f, BM_ELEM_SELECT); i++; } + // BMO_slot_map_elem_get() +} + +void BM_get_tagged_faces(BMesh *bm, bool **selection) +{ + BMIter iter; + BMFace *f; + int i = 0; + *selection = MEM_malloc_arrayN((size_t)bm->totface, sizeof(bool), "bm faces"); + BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { + (*selection)[i] = BM_elem_flag_test(f, BM_ELEM_TAG); + i++; + } +} + +void BM_tag_new_faces(BMesh *bm, BMOperator *b_mesh_operator) +{ + BMIter iter; + BMFace *f; + int i = 0; + //*selection = MEM_malloc_arrayN((size_t)bm->totface, sizeof(bool), "bm faces"); + BM_mesh_elem_hflag_disable_all(bm, BM_FACE, BM_ELEM_TAG, false); + BMO_ITER (f, &iter, b_mesh_operator->slots_out, "faces.out", BM_FACE) { + BM_elem_flag_enable(f, BM_ELEM_TAG); + } + // BMO_slot_map_elem_get() } void BM_tag_vertices(BMesh *bm, const bool *mask) @@ -1509,12 +1532,7 @@ void BM_tag_vertices(BMesh *bm, const bool *mask) BMVert *v; int i = 0; BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - if (mask[i]) { - BM_elem_flag_set(v, BM_ELEM_TAG, true); - } - else { - BM_elem_flag_set(v, BM_ELEM_TAG, false); - } + BM_elem_flag_set(v, BM_ELEM_TAG, mask[i]); i++; } } @@ -1528,12 +1546,7 @@ void BM_tag_edges(BMesh *bm, const bool *mask) BMEdge *e; int i = 0; BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { - if (mask[i]) { - BM_elem_flag_set(e, BM_ELEM_TAG, true); - } - else { - BM_elem_flag_set(e, BM_ELEM_TAG, false); - } + BM_elem_flag_set(e, BM_ELEM_TAG, mask[i]); i++; } } @@ -1547,12 +1560,7 @@ void BM_tag_faces(BMesh *bm, const bool *mask) BMFace *f; int i = 0; BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - if (mask[i]) { - BM_elem_flag_set(f, BM_ELEM_TAG, true); - } - else { - BM_elem_flag_set(f, BM_ELEM_TAG, false); - } + BM_elem_flag_set(f, BM_ELEM_TAG, mask[i]); i++; } } diff --git a/source/blender/bmesh/intern/bmesh_mesh.h b/source/blender/bmesh/intern/bmesh_mesh.h index eb7dcaac046..99baaa1421f 100644 --- a/source/blender/bmesh/intern/bmesh_mesh.h +++ b/source/blender/bmesh/intern/bmesh_mesh.h @@ -138,6 +138,9 @@ void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm, void BM_select_vertices(BMesh *bm, const bool *mask); void BM_select_edges(BMesh *bm, const bool *mask); void BM_select_faces(BMesh *bm, const bool *mask); +void BM_get_selected_faces(BMesh *bm, bool **selection); void BM_tag_vertices(BMesh *bm, const bool *mask); void BM_tag_edges(BMesh *bm, const bool *mask); -void BM_tag_faces(BMesh *bm, const bool *mask);
\ No newline at end of file +void BM_tag_faces(BMesh *bm, const bool *mask); +void BM_get_tagged_faces(BMesh *bm, bool **selection); +void BM_tag_new_faces(BMesh *bm, BMOperator *b_mesh_operator);
\ No newline at end of file diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c index b63a09a97a6..651f9184e19 100644 --- a/source/blender/bmesh/intern/bmesh_opdefines.c +++ b/source/blender/bmesh/intern/bmesh_opdefines.c @@ -1898,6 +1898,9 @@ static BMOpDefine bmo_inset_individual_def = { {{"faces", BMO_OP_SLOT_ELEMENT_BUF, {BM_FACE}}, /* input faces */ {"thickness", BMO_OP_SLOT_FLT}, /* thickness */ {"depth", BMO_OP_SLOT_FLT}, /* depth */ + {"thickness_array", BMO_OP_SLOT_PTR}, /* thickness */ + {"depth_array", BMO_OP_SLOT_PTR}, /* depth */ + {"use_attributes", BMO_OP_SLOT_BOOL}, /* Use spans for thickness and depth */ {"use_even_offset", BMO_OP_SLOT_BOOL}, /* scale the offset to give more even thickness */ {"use_interpolate", BMO_OP_SLOT_BOOL}, /* blend face data across the inset */ {"use_relative_offset", BMO_OP_SLOT_BOOL}, /* scale the offset by surrounding geometry */ @@ -1929,6 +1932,9 @@ static BMOpDefine bmo_inset_region_def = { {"use_edge_rail", BMO_OP_SLOT_BOOL}, /* inset the region along existing edges */ {"thickness", BMO_OP_SLOT_FLT}, /* thickness */ {"depth", BMO_OP_SLOT_FLT}, /* depth */ + {"thickness_array", BMO_OP_SLOT_PTR}, /* thickness */ + {"depth_array", BMO_OP_SLOT_PTR}, /* depth */ + {"use_attributes", BMO_OP_SLOT_BOOL}, /* Use spans for thickness and depth */ {"use_outset", BMO_OP_SLOT_BOOL}, /* outset rather than inset */ {{'\0'}}, }, |