[Bf-blender-cvs] [1aaf4ce0a40] master: Cleanup: Use C++ BitVector instead of BLI_bitmap for BVH utils
Hans Goudey
noreply at git.blender.org
Mon Nov 14 15:01:33 CET 2022
Commit: 1aaf4ce0a40129332513c7e78b204c500ab87f08
Author: Hans Goudey
Date: Sun Nov 13 23:23:59 2022 -0600
Branches: master
https://developer.blender.org/rB1aaf4ce0a40129332513c7e78b204c500ab87f08
Cleanup: Use C++ BitVector instead of BLI_bitmap for BVH utils
This gives a friendlier interface, an inline buffer, RAII, etc.
Also switch some BMesh functions that were only used by the snap
system's use of BVH utils.
===================================================================
M source/blender/blenkernel/BKE_bvhutils.h
M source/blender/blenkernel/intern/bvhutils.cc
M source/blender/blenkernel/intern/mesh_remap.cc
M source/blender/blenlib/BLI_bit_vector.hh
M source/blender/bmesh/intern/bmesh_iterators.cc
M source/blender/bmesh/intern/bmesh_iterators.h
M source/blender/editors/transform/transform_snap_object.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index a0a6ac58c58..ca0c973b9e8 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -6,12 +6,13 @@
* \ingroup bke
*/
-#include "BLI_bitmap.h"
#include "BLI_kdopbvh.h"
#include "BLI_threads.h"
#ifdef __cplusplus
# include <mutex>
+
+# include "BLI_bit_vector.hh"
#endif
#ifdef __cplusplus
@@ -102,12 +103,14 @@ typedef enum BVHCacheType {
BVHTree *bvhtree_from_editmesh_verts(
BVHTreeFromEditMesh *data, struct BMEditMesh *em, float epsilon, int tree_type, int axis);
+#ifdef __cplusplus
+
/**
* Builds a BVH-tree where nodes are the vertices of the given `em`.
*/
BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
- const BLI_bitmap *mask,
+ const blender::BitVector<> &mask,
int verts_num_active,
float epsilon,
int tree_type,
@@ -123,7 +126,7 @@ BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data,
const struct MVert *vert,
int verts_num,
- const BLI_bitmap *verts_mask,
+ const blender::BitVector<> &verts_mask,
int verts_num_active,
float epsilon,
int tree_type,
@@ -137,7 +140,7 @@ BVHTree *bvhtree_from_editmesh_edges(
*/
BVHTree *bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
- const BLI_bitmap *edges_mask,
+ const blender::BitVector<> &edges_mask,
int edges_num_active,
float epsilon,
int tree_type,
@@ -155,7 +158,7 @@ BVHTree *bvhtree_from_mesh_edges_ex(struct BVHTreeFromMesh *data,
const struct MVert *vert,
const struct MEdge *edge,
int edges_num,
- const BLI_bitmap *edges_mask,
+ const blender::BitVector<> &edges_mask,
int edges_num_active,
float epsilon,
int tree_type,
@@ -169,7 +172,7 @@ BVHTree *bvhtree_from_editmesh_looptri(
*/
BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
- const BLI_bitmap *mask,
+ const blender::BitVector<> &mask,
int looptri_num_active,
float epsilon,
int tree_type,
@@ -183,12 +186,14 @@ BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
const struct MLoop *mloop,
const struct MLoopTri *looptri,
int looptri_num,
- const BLI_bitmap *mask,
+ const blender::BitVector<> &mask,
int looptri_num_active,
float epsilon,
int tree_type,
int axis);
+#endif
+
/**
* Builds or queries a BVH-cache for the cache BVH-tree of the request type.
*
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index afc3e525143..8b23f136221 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -13,6 +13,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_pointcloud_types.h"
+#include "BLI_bit_vector.hh"
#include "BLI_linklist.h"
#include "BLI_math.h"
#include "BLI_span.hh"
@@ -28,6 +29,7 @@
#include "MEM_guardedalloc.h"
+using blender::BitVector;
using blender::Span;
using blender::VArray;
@@ -670,12 +672,12 @@ static BVHTree *bvhtree_from_editmesh_verts_create_tree(float epsilon,
int tree_type,
int axis,
BMEditMesh *em,
- const BLI_bitmap *verts_mask,
+ const BitVector<> &verts_mask,
int verts_num_active)
{
BM_mesh_elem_table_ensure(em->bm, BM_VERT);
const int verts_num = em->bm->totvert;
- if (verts_mask) {
+ if (!verts_mask.is_empty()) {
BLI_assert(IN_RANGE_INCL(verts_num_active, 0, verts_num));
}
else {
@@ -686,7 +688,7 @@ static BVHTree *bvhtree_from_editmesh_verts_create_tree(float epsilon,
if (tree) {
for (int i = 0; i < verts_num; i++) {
- if (verts_mask && !BLI_BITMAP_TEST_BOOL(verts_mask, i)) {
+ if (!verts_mask.is_empty() && !verts_mask[i]) {
continue;
}
BMVert *eve = BM_vert_at_index(em->bm, i);
@@ -703,12 +705,12 @@ static BVHTree *bvhtree_from_mesh_verts_create_tree(float epsilon,
int axis,
const MVert *vert,
const int verts_num,
- const BLI_bitmap *verts_mask,
+ const BitVector<> &verts_mask,
int verts_num_active)
{
BVHTree *tree = nullptr;
- if (verts_mask) {
+ if (!verts_mask.is_empty()) {
BLI_assert(IN_RANGE_INCL(verts_num_active, 0, verts_num));
}
else {
@@ -720,7 +722,7 @@ static BVHTree *bvhtree_from_mesh_verts_create_tree(float epsilon,
if (tree) {
for (int i = 0; i < verts_num; i++) {
- if (verts_mask && !BLI_BITMAP_TEST_BOOL(verts_mask, i)) {
+ if (!verts_mask.is_empty() && !verts_mask[i]) {
continue;
}
BLI_bvhtree_insert(tree, i, vert[i].co, 1);
@@ -734,7 +736,7 @@ static BVHTree *bvhtree_from_mesh_verts_create_tree(float epsilon,
BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
BMEditMesh *em,
- const BLI_bitmap *verts_mask,
+ const BitVector<> &verts_mask,
int verts_num_active,
float epsilon,
int tree_type,
@@ -756,13 +758,13 @@ BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
BVHTree *bvhtree_from_editmesh_verts(
BVHTreeFromEditMesh *data, BMEditMesh *em, float epsilon, int tree_type, int axis)
{
- return bvhtree_from_editmesh_verts_ex(data, em, nullptr, -1, epsilon, tree_type, axis);
+ return bvhtree_from_editmesh_verts_ex(data, em, {}, -1, epsilon, tree_type, axis);
}
BVHTree *bvhtree_from_mesh_verts_ex(BVHTreeFromMesh *data,
const MVert *vert,
const int verts_num,
- const BLI_bitmap *verts_mask,
+ const BitVector<> &verts_mask,
int verts_num_active,
float epsilon,
int tree_type,
@@ -793,13 +795,13 @@ static BVHTree *bvhtree_from_editmesh_edges_create_tree(float epsilon,
int tree_type,
int axis,
BMEditMesh *em,
- const BLI_bitmap *edges_mask,
+ const BitVector<> &edges_mask,
int edges_num_active)
{
BM_mesh_elem_table_ensure(em->bm, BM_EDGE);
const int edges_num = em->bm->totedge;
- if (edges_mask) {
+ if (!edges_mask.is_empty()) {
BLI_assert(IN_RANGE_INCL(edges_num_active, 0, edges_num));
}
else {
@@ -813,7 +815,7 @@ static BVHTree *bvhtree_from_editmesh_edges_create_tree(float epsilon,
BMIter iter;
BMEdge *eed;
BM_ITER_MESH_INDEX (eed, &iter, em->bm, BM_EDGES_OF_MESH, i) {
- if (edges_mask && !BLI_BITMAP_TEST_BOOL(edges_mask, i)) {
+ if (!edges_mask.is_empty() && !edges_mask[i]) {
continue;
}
float co[2][3];
@@ -831,7 +833,7 @@ static BVHTree *bvhtree_from_editmesh_edges_create_tree(float epsilon,
static BVHTree *bvhtree_from_mesh_edges_create_tree(const MVert *vert,
const MEdge *edge,
const int edge_num,
- const BLI_bitmap *edges_mask,
+ const BitVector<> &edges_mask,
int edges_num_active,
float epsilon,
int tree_type,
@@ -839,7 +841,7 @@ static BVHTree *bvhtree_from_mesh_edges_create_tree(const MVert *vert,
{
BVHTree *t
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list