14#include <lagrange/Logger.h>
15#include <lagrange/MeshTrait.h>
16#include <lagrange/legacy/inline.h>
18#include <openvdb/openvdb.h>
19#include <openvdb/tools/MeshToVolume.h>
30template <
typename MeshType>
44 , m_transform(transform)
48 size_t polygonCount()
const {
return static_cast<size_t>(m_mesh.get_num_facets()); }
51 size_t pointCount()
const {
return static_cast<size_t>(m_mesh.get_num_vertices()); }
56 return static_cast<size_t>(m_mesh.get_vertex_per_facet());
68 Eigen::RowVector3d p =
69 m_mesh.get_vertices().row(m_mesh.get_facets()(f, lv)).template cast<double>();
70 pos = openvdb::Vec3d(p.x(), p.y(), p.z());
71 pos = m_transform.worldToIndex(pos);
76 const openvdb::math::Transform& m_transform;
91template <
typename MeshType,
typename Gr
idType = openvdb::FloatGr
id>
92auto mesh_to_volume(
const MeshType& mesh,
double voxel_size) ->
typename GridType::Ptr
96 openvdb::initialize();
98 const openvdb::Vec3d offset(voxel_size / 2.0, voxel_size / 2.0, voxel_size / 2.0);
99 auto transform = openvdb::math::Transform::createLinearTransform(voxel_size);
100 transform->postTranslate(offset);
102 MeshAdapter<MeshType> adapter(mesh, *transform);
104 return openvdb::tools::meshToVolume<GridType, MeshAdapter<MeshType>>(adapter, *transform);
105 }
catch (openvdb::ArithmeticError&) {
106 logger().error(
"Voxel size too small: {}", voxel_size);
Adapter class to interface a Lagrange mesh with OpenVDB functions.
Definition: mesh_to_volume.h:32
size_t vertexCount(size_t) const
Number of vertices for a given facet.
Definition: mesh_to_volume.h:54
size_t polygonCount() const
Number of mesh facets.
Definition: mesh_to_volume.h:48
size_t pointCount() const
Number of mesh vertices.
Definition: mesh_to_volume.h:51
MeshAdapter(const MeshType &mesh, const openvdb::math::Transform &transform)
Constructs a new instance.
Definition: mesh_to_volume.h:42
void getIndexSpacePoint(size_t f, size_t lv, openvdb::Vec3d &pos) const
Return a vertex position in the grid index space.
Definition: mesh_to_volume.h:66
LA_CORE_API spdlog::logger & logger()
Retrieves the current logger.
Definition: Logger.cpp:40
Main namespace for Lagrange.
Definition: AABBIGL.h:30
MeshTrait class provide compiler check for different mesh types.
Definition: MeshTrait.h:108