[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