diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-11-09 19:37:21 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-11-09 19:37:21 +0300 |
commit | cde2bd1828ea9f2f5f6a4b5001593695ccf224d7 (patch) | |
tree | bc5ec65141659b3e0b6b95bc9253498756f13b50 /source/blender/bmesh | |
parent | bd2dda90b6a35da21446ccfb7db2de0cb972d3f5 (diff) | |
parent | ec6a9322e8723b906089f02ff76b04a7bb7d136f (diff) |
Merge branch 'blender-v2.91-release'
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/operators/bmo_hull.c | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/source/blender/bmesh/operators/bmo_hull.c b/source/blender/bmesh/operators/bmo_hull.c index 84938084aec..4876a12a923 100644 --- a/source/blender/bmesh/operators/bmo_hull.c +++ b/source/blender/bmesh/operators/bmo_hull.c @@ -60,12 +60,12 @@ typedef struct HullTriangle { /*************************** Hull Triangles ***************************/ static void hull_add_triangle( - BMesh *bm, GSet *hull_triangles, BLI_mempool *pool, BMVert *v1, BMVert *v2, BMVert *v3) + BMesh *bm, BLI_mempool *hull_triangles, BMVert *v1, BMVert *v2, BMVert *v3) { HullTriangle *t; int i; - t = BLI_mempool_calloc(pool); + t = BLI_mempool_calloc(hull_triangles); t->v[0] = v1; t->v[1] = v2; t->v[2] = v3; @@ -75,7 +75,6 @@ static void hull_add_triangle( BMO_vert_flag_disable(bm, t->v[i], HULL_FLAG_INTERIOR_ELE); } - BLI_gset_insert(hull_triangles, t); normal_tri_v3(t->no, v1->co, v2->co, v3->co); } @@ -94,12 +93,13 @@ static BMFace *hull_find_example_face(BMesh *bm, BMEdge *e) return NULL; } -static void hull_output_triangles(BMesh *bm, GSet *hull_triangles) +static void hull_output_triangles(BMesh *bm, BLI_mempool *hull_triangles) { - GSetIterator iter; + BLI_mempool_iter iter; + BLI_mempool_iternew(hull_triangles, &iter); + HullTriangle *t; - GSET_ITER (iter, hull_triangles) { - HullTriangle *t = BLI_gsetIterator_getKey(&iter); + while ((t = BLI_mempool_iterstep(&iter))) { int i; if (!t->skip) { @@ -198,18 +198,20 @@ static int hull_final_edges_lookup(HullFinalEdges *final_edges, BMVert *v1, BMVe } /* Used for checking whether a pre-existing edge lies on the hull */ -static HullFinalEdges *hull_final_edges(GSet *hull_triangles) +static HullFinalEdges *hull_final_edges(BLI_mempool *hull_triangles) { HullFinalEdges *final_edges; - GSetIterator iter; final_edges = MEM_callocN(sizeof(HullFinalEdges), "HullFinalEdges"); final_edges->edges = BLI_ghash_ptr_new("final edges ghash"); final_edges->base_pool = BLI_mempool_create(sizeof(ListBase), 0, 128, BLI_MEMPOOL_NOP); final_edges->link_pool = BLI_mempool_create(sizeof(LinkData), 0, 128, BLI_MEMPOOL_NOP); - GSET_ITER (iter, hull_triangles) { - HullTriangle *t = BLI_gsetIterator_getKey(&iter); + BLI_mempool_iter iter; + BLI_mempool_iternew(hull_triangles, &iter); + HullTriangle *t; + + while ((t = BLI_mempool_iterstep(&iter))) { LinkData *link; int i; @@ -250,12 +252,15 @@ static void hull_final_edges_free(HullFinalEdges *final_edges) /**************************** Final Output ****************************/ -static void hull_remove_overlapping(BMesh *bm, GSet *hull_triangles, HullFinalEdges *final_edges) +static void hull_remove_overlapping(BMesh *bm, + BLI_mempool *hull_triangles, + HullFinalEdges *final_edges) { - GSetIterator hull_iter; + BLI_mempool_iter iter; + BLI_mempool_iternew(hull_triangles, &iter); + HullTriangle *t; - GSET_ITER (hull_iter, hull_triangles) { - HullTriangle *t = BLI_gsetIterator_getKey(&hull_iter); + while ((t = BLI_mempool_iterstep(&iter))) { BMIter bm_iter1, bm_iter2; BMFace *f; bool f_on_hull; @@ -467,7 +472,7 @@ static BMVert **hull_verts_from_bullet(plConvexHull hull, return hull_verts; } -static void hull_from_bullet(BMesh *bm, BMOperator *op, GSet *hull_triangles, BLI_mempool *pool) +static void hull_from_bullet(BMesh *bm, BMOperator *op, BLI_mempool *hull_triangles) { int *fvi = NULL; BLI_array_declare(fvi); @@ -509,7 +514,7 @@ static void hull_from_bullet(BMesh *bm, BMOperator *op, GSet *hull_triangles, BL fv[1] = hull_verts[fvi[j - 1]]; fv[2] = hull_verts[fvi[j]]; - hull_add_triangle(bm, hull_triangles, pool, fv[0], fv[1], fv[2]); + hull_add_triangle(bm, hull_triangles, fv[0], fv[1], fv[2]); } } } @@ -543,10 +548,9 @@ static bool hull_num_input_verts_is_ok(BMOperator *op) void bmo_convex_hull_exec(BMesh *bm, BMOperator *op) { HullFinalEdges *final_edges; - BLI_mempool *hull_pool; + BLI_mempool *hull_triangles; BMElemF *ele; BMOIter oiter; - GSet *hull_triangles; /* Verify that at least three verts in the input */ if (!hull_num_input_verts_is_ok(op)) { @@ -569,10 +573,9 @@ void bmo_convex_hull_exec(BMesh *bm, BMOperator *op) } } - hull_pool = BLI_mempool_create(sizeof(HullTriangle), 0, 128, BLI_MEMPOOL_NOP); - hull_triangles = BLI_gset_ptr_new("hull_triangles"); + hull_triangles = BLI_mempool_create(sizeof(HullTriangle), 0, 128, BLI_MEMPOOL_ALLOW_ITER); - hull_from_bullet(bm, op, hull_triangles, hull_pool); + hull_from_bullet(bm, op, hull_triangles); final_edges = hull_final_edges(hull_triangles); @@ -590,9 +593,7 @@ void bmo_convex_hull_exec(BMesh *bm, BMOperator *op) /* Convert hull triangles to BMesh faces */ hull_output_triangles(bm, hull_triangles); - BLI_mempool_destroy(hull_pool); - - BLI_gset_free(hull_triangles, NULL); + BLI_mempool_destroy(hull_triangles); hull_tag_unused(bm, op); |