[Bf-blender-cvs] [67d56eb71ef] master: Cleanup: Remove unused/unecessary OpenVDB C API

Hans Goudey noreply at git.blender.org
Mon Aug 2 18:26:40 CEST 2021


Commit: 67d56eb71ef1b8da62d296290a87e7129f4c5ac6
Author: Hans Goudey
Date:   Mon Aug 2 12:26:28 2021 -0400
Branches: master
https://developer.blender.org/rB67d56eb71ef1b8da62d296290a87e7129f4c5ac6

Cleanup: Remove unused/unecessary OpenVDB C API

This commit uses OpenVDB more directly for the voxel remesher, without
the extra indirection of copying to a Blender API. This makes the code
simpler, shorter, and easier to understand (though I didn't observe any
performance improvement).

This also removes the rest of the unused and undocumented OpenVDB C API,
which was written when Blender's code didn't really use C++, and doesn't
serve a purpose anymore. Those features will be implemented as nodes in
the future anyway (see D12100).

Differential Revision: https://developer.blender.org/D12097

===================================================================

M	intern/openvdb/CMakeLists.txt
D	intern/openvdb/intern/openvdb_level_set.cc
D	intern/openvdb/intern/openvdb_level_set.h
D	intern/openvdb/intern/openvdb_transform.cc
D	intern/openvdb/intern/openvdb_transform.h
M	intern/openvdb/openvdb_capi.cc
M	intern/openvdb/openvdb_capi.h
D	intern/openvdb/openvdb_util.cc
D	intern/openvdb/openvdb_util.h
M	source/blender/blenkernel/BKE_mesh_remesh_voxel.h
M	source/blender/blenkernel/intern/mesh_remesh_voxel.cc

===================================================================

diff --git a/intern/openvdb/CMakeLists.txt b/intern/openvdb/CMakeLists.txt
index d695e5533c0..9d37c6cd24c 100644
--- a/intern/openvdb/CMakeLists.txt
+++ b/intern/openvdb/CMakeLists.txt
@@ -20,7 +20,6 @@
 
 set(INC
   .
-  intern
   ../guardedalloc
 )
 
@@ -42,14 +41,7 @@ if(WITH_OPENVDB)
   )
 
   list(APPEND SRC
-    intern/openvdb_level_set.cc
-    intern/openvdb_transform.cc
     openvdb_capi.cc
-    openvdb_util.cc
-
-    intern/openvdb_level_set.h
-    intern/openvdb_transform.h
-    openvdb_util.h
   )
 
   list(APPEND LIB
diff --git a/intern/openvdb/intern/openvdb_level_set.cc b/intern/openvdb/intern/openvdb_level_set.cc
deleted file mode 100644
index 5b01c3b0cb7..00000000000
--- a/intern/openvdb/intern/openvdb_level_set.cc
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2015 Blender Foundation.
- * All rights reserved.
- */
-
-#include "openvdb_level_set.h"
-#include "MEM_guardedalloc.h"
-#include "openvdb/tools/Composite.h"
-#include "openvdb_capi.h"
-#include "openvdb_util.h"
-
-OpenVDBLevelSet::OpenVDBLevelSet()
-{
-  openvdb::initialize();
-}
-
-OpenVDBLevelSet::~OpenVDBLevelSet()
-{
-}
-
-void OpenVDBLevelSet::mesh_to_level_set(const float *vertices,
-                                        const int *faces,
-                                        const int totvertices,
-                                        const int totfaces,
-                                        const openvdb::math::Transform::Ptr &xform)
-{
-  std::vector<openvdb::Vec3s> points(totvertices);
-  std::vector<openvdb::Vec3I> triangles(totfaces);
-  std::vector<openvdb::Vec4I> quads;
-
-  for (int i = 0; i < totvertices; i++) {
-    points[i] = openvdb::Vec3s(vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2]);
-  }
-
-  for (int i = 0; i < totfaces; i++) {
-    triangles[i] = openvdb::Vec3I(faces[i * 3], faces[i * 3 + 1], faces[i * 3 + 2]);
-  }
-
-  this->grid = openvdb::tools::meshToLevelSet<openvdb::FloatGrid>(
-      *xform, points, triangles, quads, 1);
-}
-
-void OpenVDBLevelSet::volume_to_mesh(OpenVDBVolumeToMeshData *mesh,
-                                     const double isovalue,
-                                     const double adaptivity,
-                                     const bool relax_disoriented_triangles)
-{
-  std::vector<openvdb::Vec3s> out_points;
-  std::vector<openvdb::Vec4I> out_quads;
-  std::vector<openvdb::Vec3I> out_tris;
-  openvdb::tools::volumeToMesh<openvdb::FloatGrid>(*this->grid,
-                                                   out_points,
-                                                   out_tris,
-                                                   out_quads,
-                                                   isovalue,
-                                                   adaptivity,
-                                                   relax_disoriented_triangles);
-  mesh->vertices = (float *)MEM_malloc_arrayN(out_points.size(), sizeof(float[3]), __func__);
-  mesh->quads = (int *)MEM_malloc_arrayN(out_quads.size(), sizeof(int[4]), __func__);
-  mesh->triangles = NULL;
-  if (out_tris.size() > 0) {
-    mesh->triangles = (int *)MEM_malloc_arrayN(out_tris.size(), sizeof(int[3]), __func__);
-  }
-
-  mesh->totvertices = out_points.size();
-  mesh->tottriangles = out_tris.size();
-  mesh->totquads = out_quads.size();
-
-  for (size_t i = 0; i < out_points.size(); i++) {
-    mesh->vertices[i * 3] = out_points[i].x();
-    mesh->vertices[i * 3 + 1] = out_points[i].y();
-    mesh->vertices[i * 3 + 2] = out_points[i].z();
-  }
-
-  for (size_t i = 0; i < out_quads.size(); i++) {
-    mesh->quads[i * 4] = out_quads[i].x();
-    mesh->quads[i * 4 + 1] = out_quads[i].y();
-    mesh->quads[i * 4 + 2] = out_quads[i].z();
-    mesh->quads[i * 4 + 3] = out_quads[i].w();
-  }
-
-  for (size_t i = 0; i < out_tris.size(); i++) {
-    mesh->triangles[i * 3] = out_tris[i].x();
-    mesh->triangles[i * 3 + 1] = out_tris[i].y();
-    mesh->triangles[i * 3 + 2] = out_tris[i].z();
-  }
-}
-
-void OpenVDBLevelSet::filter(OpenVDBLevelSet_FilterType filter_type,
-                             int width,
-                             float distance,
-                             OpenVDBLevelSet_FilterBias filter_bias)
-{
-
-  if (!this->grid) {
-    return;
-  }
-
-  if (this->grid->getGridClass() != openvdb::GRID_LEVEL_SET) {
-    return;
-  }
-
-  openvdb::tools::LevelSetFilter<openvdb::FloatGrid> filter(*this->grid);
-  filter.setSpatialScheme((openvdb::math::BiasedGradientScheme)filter_bias);
-  switch (filter_type) {
-    case OPENVDB_LEVELSET_FILTER_GAUSSIAN:
-      filter.gaussian(width);
-      break;
-    case OPENVDB_LEVELSET_FILTER_MEDIAN:
-      filter.median(width);
-      break;
-    case OPENVDB_LEVELSET_FILTER_MEAN:
-      filter.mean(width);
-      break;
-    case OPENVDB_LEVELSET_FILTER_MEAN_CURVATURE:
-      filter.meanCurvature();
-      break;
-    case OPENVDB_LEVELSET_FILTER_LAPLACIAN:
-      filter.laplacian();
-      break;
-    case OPENVDB_LEVELSET_FILTER_DILATE:
-      filter.offset(distance);
-      break;
-    case OPENVDB_LEVELSET_FILTER_ERODE:
-      filter.offset(distance);
-      break;
-    case OPENVDB_LEVELSET_FILTER_NONE:
-      break;
-  }
-}
-openvdb::FloatGrid::Ptr OpenVDBLevelSet::CSG_operation_apply(
-    const openvdb::FloatGrid::Ptr &gridA,
-    const openvdb::FloatGrid::Ptr &gridB,
-    OpenVDBLevelSet_CSGOperation operation)
-{
-  switch (operation) {
-    case OPENVDB_LEVELSET_CSG_UNION:
-      openvdb::tools::csgUnion(*gridA, *gridB);
-      break;
-    case OPENVDB_LEVELSET_CSG_DIFFERENCE:
-      openvdb::tools::csgDifference(*gridA, *gridB);
-      break;
-    case OPENVDB_LEVELSET_CSG_INTERSECTION:
-      openvdb::tools::csgIntersection(*gridA, *gridB);
-      break;
-  }
-
-  return gridA;
-}
-
-const openvdb::FloatGrid::Ptr &OpenVDBLevelSet::get_grid()
-{
-  return this->grid;
-}
-
-void OpenVDBLevelSet::set_grid(const openvdb::FloatGrid::Ptr &grid)
-{
-  this->grid = grid;
-}
diff --git a/intern/openvdb/intern/openvdb_level_set.h b/intern/openvdb/intern/openvdb_level_set.h
deleted file mode 100644
index 2c8f140c012..00000000000
--- a/intern/openvdb/intern/openvdb_level_set.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2015 Blender Foundation.
- * All rights reserved.
- */
-
-#ifndef __OPENVDB_LEVEL_SET_H__
-#define __OPENVDB_LEVEL_SET_H__
-
-#include "openvdb_capi.h"
-#include <openvdb/math/FiniteDifference.h>
-#include <openvdb/openvdb.h>
-#include <openvdb/tools/GridTransformer.h>
-#include <openvdb/tools/LevelSetFilter.h>
-#include <openvdb/tools/MeshToVolume.h>
-#include <openvdb/tools/VolumeToMesh.h>
-
-struct OpenVDBLevelSet {
- private:
-  openvdb::FloatGrid::Ptr grid;
-
- public:
-  OpenVDBLevelSet();
-  ~OpenVDBLevelSet();
-  const openvdb::FloatGrid::Ptr &get_grid();
-  void set_grid(const openvdb::FloatGrid::Ptr &grid);
-
-  void mesh_to_level_set(const float *vertices,
-                         const int *faces,
-                         const int totvertices,
-                         const int totfaces,
-                         const openvdb::math::Transform::Ptr &transform);
-
-  void volume_to_mesh(struct OpenVDBVolumeToMeshData *mesh,
-                      const double isovalue,
-                      const double adaptivity,
-                      const bool relax_disoriented_triangles);
-  void filter(OpenVDBLevelSet_FilterType filter_type,
-              int width,
-              float distance,
-              OpenVDBLevelSet_FilterBias filter_bias);
-  openvdb::FloatGrid::Ptr CSG_operation_apply(const openvdb::FloatGrid::Ptr &gridA,
-                                              const openvdb::FloatGrid::Ptr &gridB,
-                                              OpenVDBLevelSet_CSGOperation operation);
-};
-
-#endif /* __OPENVDB_LEVEL_SET_H__ */
diff --git a/intern/openvdb/intern/openvdb_transform.cc b/intern/openvdb/intern/openvdb_transform.cc
deleted file mode 100644
index 4bfcf43f81a..00000000000
--- a/intern/openvdb/intern/openvdb_transform.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list