supereight
Loading...
Searching...
No Matches
Namespaces | Functions | Variables
marching_cube.hpp File Reference
#include <se/common/bounded_vector.hpp>
#include <se/common/timings.hpp>
#include <se/map/algorithms/edge_tables.hpp>
#include <se/map/algorithms/mesh.hpp>
#include <se/map/octree/iterator.hpp>
#include <se/map/octree/visitor.hpp>
#include "impl/marching_cube_impl.hpp"
Include dependency graph for marching_cube.hpp:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  se
 Helper wrapper to allocate and de-allocate octants in the octree.
 
namespace  se::meshing
 
namespace  se::algorithms
 

Functions

template<typename OctreeT >
Eigen::Vector3f se::meshing::compute_intersection (const OctreeT &octree, const Eigen::Vector3i &coord_0, const Eigen::Vector3i &coord_1)
 Single-res marching cube implementation.
 
template<typename OctreeT >
Eigen::Vector3f se::meshing::interp_vertexes (const OctreeT &octree, const int x, const int y, const int z, const int edge)
 
template<typename BlockT >
void se::meshing::gather_data (const BlockT *block, typename BlockT::DataType data[8], const int x, const int y, const int z)
 
template<typename OctreeT >
void se::meshing::gather_data (const OctreeT &octree, typename OctreeT::DataType data[8], const int x, const int y, const int z)
 
template<typename OctreeT >
uint8_t se::meshing::compute_index (const OctreeT &octree, const typename OctreeT::BlockType *block_ptr, const int x, const int y, const int z)
 
template<typename DataT >
Eigen::Vector3f se::meshing::compute_dual_intersection (const DataT &data_0, const DataT &data_1, const Eigen::Vector3f &dual_point_0_M, const Eigen::Vector3f &dual_point_1_M)
 Multires-res marching cube implementation.
 
template<typename DataT , typename ValueSelector >
Eigen::Vector3f se::meshing::interp_dual_vertexes (const int edge, const DataT data[8], const std::array< Eigen::Vector3f, 8 > &dual_corner_coords_f)
 
template<typename BlockT , typename DataT >
void se::meshing::gather_dual_data (const BlockT *block, const int scale, const Eigen::Vector3f &primal_corner_coord_f, DataT data[8], std::array< Eigen::Vector3f, 8 > &dual_corner_coords_f, std::array< Eigen::Vector3i, 8 > &dual_corner_coords_i)
 
void se::meshing::norm_dual_corner_idxs (const Eigen::Vector3i &primal_corner_coord_rel, const int block_size, BoundedVector< int, 8 > &lower_priority_neighbours, BoundedVector< int, 8 > &higher_priority_neighbours, BoundedVector< BoundedVector< int, 8 >, 8 > &neighbours)
 The following strategy is derived from I.
 
template<typename OctreeT , typename DataT >
void se::meshing::gather_dual_data (const OctreeT &octree, const typename OctreeT::BlockType *block, const int scale, const Eigen::Vector3i &primal_corner_coord, DataT data[8], std::array< Eigen::Vector3f, 8 > &dual_corner_coords_f, std::array< Eigen::Vector3i, 8 > &dual_corner_coords_i)
 
template<typename OctreeT , typename DataT >
void se::meshing::compute_dual_index (const OctreeT &octree, const typename OctreeT::BlockType *block_ptr, const int scale, const Eigen::Vector3i &primal_corner_coord, uint8_t &edge_pattern_idx, DataT data[8], std::array< Eigen::Vector3f, 8 > &dual_corner_coords_f, std::array< Eigen::Vector3i, 8 > &dual_corner_coords_i)
 
bool se::meshing::checkVertex (const Eigen::Vector3f &vertex_M, const float dim)
 
template<typename OctreeT , typename = std::enable_if_t<OctreeT::res_ == se::Res::Single>>
OctreeT::SurfaceMesh se::algorithms::marching_cube_kernel (const OctreeT &octree, const std::vector< const typename OctreeT::BlockType * > &block_ptrs)
 
template<typename OctreeT , typename = std::enable_if_t<OctreeT::res_ == se::Res::Multi>>
OctreeT::SurfaceMesh se::algorithms::dual_marching_cube_kernel (const OctreeT &octree, const std::vector< const typename OctreeT::BlockType * > &block_ptrs, const int min_desired_scale)
 
template<typename OctreeT >
std::vector< meshing::VertexIndexMesh< 3 > > se::algorithms::dual_marching_cube_kernel_new (const OctreeT &octree, const std::vector< const typename OctreeT::BlockType * > &block_ptrs)
 
template<typename OctreeT >
meshing::VertexIndexMesh< 3 > se::algorithms::dual_marching_cube_new (const OctreeT &octree, const std::vector< const typename OctreeT::BlockType * > &block_ptrs)
 
template<typename OctreeT >
meshing::VertexIndexMesh< 3 > se::algorithms::dual_marching_cube_new (const OctreeT &octree)
 
template<typename OctreeT >
OctreeT::SurfaceMesh se::algorithms::marching_cube (const OctreeT &octree, const int min_desired_scale=0)
 Return a triangle mesh of the surface in octree.
 

Variables

static const Eigen::Vector3f se::meshing::norm_dual_offset_f [8]
 
static const Eigen::Vector3i se::meshing::logical_dual_offset [8]