cgv
|
class used to perform the marching cubes algorithm More...
#include <dual_contouring.h>
Public Types | |
typedef streaming_mesh< X > | base_type |
typedef cgv::math::fvec< X, 3 > | pnt_type |
points must have three components | |
typedef cgv::math::fvec< X, 3 > | vec_type |
vectors must have three components | |
typedef cgv::math::qem< X > | qem_type |
qem type must have dimension three | |
typedef cell_info< X > | cell_info_type |
qem type must have dimension three | |
![]() | |
typedef cgv::math::fvec< X, 3 > | pnt_type |
type of vertex locations | |
typedef cgv::math::fvec< X, 3 > | vec_type |
type of vertex normals | |
Public Member Functions | |
dual_contouring (const cgv::math::v3_func< X, T > &_func, streaming_mesh_callback_handler *_smcbh, const X &_consistency_threshold=0.01f, unsigned int _max_nr_iters=10, const X &_epsilon=1e-6f) | |
construct dual contouring object | |
void | compute_cell_vertex (dc_slice_info< T > *info_ptr, int i, int j) |
construct a new vertex on an edge | |
void | generate_quad (unsigned int vi, unsigned int vj, unsigned int vk, unsigned int vl, bool reorient) |
construct a quadrilateral | |
void | compute_edge_point (const T &_v_1, const T &_v_2, int e, const pnt_type &p, const vec_type &d, pnt_type &q, vec_type &n) |
void | process_edge_plane (const T &v_1, const T &v_2, int e, cell_info_type *C1, cell_info_type *C2, cell_info_type *C3, cell_info_type *C4) |
construct plane through edge and add it to the incident qems | |
void | process_slice (dc_slice_info< T > *prev_info_ptr, dc_slice_info< T > *info_ptr) |
process a slice | |
void | process_slab (dc_slice_info< T > *info_ptr_1, dc_slice_info< T > *info_ptr_2) |
void | generate_slice_quads (dc_slice_info< T > *info_ptr_1, dc_slice_info< T > *info_ptr_2) |
void | extract (const T &_iso_value, const axis_aligned_box< X, 3 > &box, unsigned int _resx, unsigned int _resy, unsigned int _resz, bool show_progress=false) |
extract iso surface and send quads to dual contouring handler | |
![]() | |
streaming_mesh (streaming_mesh_callback_handler *_smcbh=0) | |
construct from callback handler | |
void | set_callback_handler (streaming_mesh_callback_handler *_smcbh) |
set a new callback handler | |
unsigned int | get_nr_dropped_vertices () const |
return the number of vertices dropped from the front, what is used as index offset into a deque | |
unsigned int | get_nr_vertices () const |
return the number of vertices | |
unsigned int | get_nr_faces () const |
return the number of faces | |
void | drop_vertex () |
drop the front most vertex from the deque | |
void | drop_vertices (unsigned int n) |
drop n vertices from the front of the deque | |
pnt_type & | vertex_location (unsigned int vi) |
write access to vertex locations | |
const pnt_type & | vertex_location (unsigned int vi) const |
read access to vertex locations | |
const vec_type & | vertex_normal (unsigned int vi) const |
read access to vertex normals | |
vec_type & | vertex_normal (unsigned int vi) |
write access to vertex normals | |
unsigned int | new_vertex (const pnt_type &p) |
add a new vertex with the given location and call the callback of the callback handler | |
void | new_triangle (unsigned int vi, unsigned int vj, unsigned int vk) |
construct a new triangle by calling the new polygon method of the callback handler | |
void | new_quad (unsigned int vi, unsigned int vj, unsigned int vk, unsigned int vl) |
construct a new quad by calling the new polygon method of the callback handler | |
void | new_polygon (const std::vector< unsigned int > &vertex_indices) |
construct a new polygon by calling the new polygon method of the callback handler | |
Protected Attributes | |
const cgv::math::v3_func< X, T > & | func |
X | epsilon |
unsigned int | max_nr_iters |
X | consistency_threshold |
![]() | |
int | idx_off |
offset used to address vertices in deque | |
unsigned int | nr_faces |
count the number of faces | |
std::deque< pnt_type > | pnts |
store currently used points in deque | |
std::deque< vec_type > | nmls |
store currently used normals in deque | |
streaming_mesh_callback_handler * | smcbh |
store a pointer to the callback handler | |
class used to perform the marching cubes algorithm
Definition at line 83 of file dual_contouring.h.
typedef streaming_mesh<X> cgv::media::mesh::dual_contouring< X, T >::base_type |
Definition at line 86 of file dual_contouring.h.
typedef cell_info<X> cgv::media::mesh::dual_contouring< X, T >::cell_info_type |
qem type must have dimension three
Definition at line 94 of file dual_contouring.h.
typedef cgv::math::fvec<X,3> cgv::media::mesh::dual_contouring< X, T >::pnt_type |
points must have three components
Definition at line 88 of file dual_contouring.h.
typedef cgv::math::qem<X> cgv::media::mesh::dual_contouring< X, T >::qem_type |
qem type must have dimension three
Definition at line 92 of file dual_contouring.h.
typedef cgv::math::fvec<X,3> cgv::media::mesh::dual_contouring< X, T >::vec_type |
vectors must have three components
Definition at line 90 of file dual_contouring.h.
|
inline |
construct dual contouring object
Definition at line 107 of file dual_contouring.h.
References cgv::media::mesh::streaming_mesh< X >::set_callback_handler().
|
inline |
construct a new vertex on an edge
Definition at line 116 of file dual_contouring.h.
References cgv::math::vec< T >::data(), cgv::math::fvec< T, N >::length(), cgv::math::qem< T >::minarg(), cgv::media::mesh::streaming_mesh< X >::new_vertex(), cgv::math::vec< T >::size(), and cgv::math::fvec< T, N >::to_vec().
|
inline |
Definition at line 136 of file dual_contouring.h.
|
inline |
extract iso surface and send quads to dual contouring handler
Definition at line 291 of file dual_contouring.h.
References cgv::media::mesh::streaming_mesh< X >::drop_vertices(), cgv::media::axis_aligned_box< T, N >::get_extent(), cgv::media::axis_aligned_box< T, N >::get_min_pnt(), cgv::media::mesh::streaming_mesh< X >::get_nr_vertices(), cgv::utils::progression::init(), cgv::media::mesh::dual_contouring< X, T >::process_slice(), and cgv::utils::progression::step().
Referenced by cgv::render::gl::gl_implicit_surface_drawable_base::surface_extraction().
|
inline |
construct a quadrilateral
Definition at line 128 of file dual_contouring.h.
References cgv::media::mesh::streaming_mesh< X >::new_quad().
|
inline |
Definition at line 271 of file dual_contouring.h.
|
inline |
construct plane through edge and add it to the incident qems
Definition at line 202 of file dual_contouring.h.
References cgv::math::fvec< T, N >::to_vec().
Referenced by cgv::media::mesh::dual_contouring< X, T >::process_slice().
|
inline |
Definition at line 243 of file dual_contouring.h.
|
inline |
process a slice
Definition at line 217 of file dual_contouring.h.
References cgv::math::mfunc< X, T >::evaluate(), cgv::media::mesh::dual_contouring< X, T >::process_edge_plane(), and cgv::media::mesh::dc_slice_info< T >::set_value().
Referenced by cgv::media::mesh::dual_contouring< X, T >::extract().
|
protected |
Definition at line 104 of file dual_contouring.h.
|
protected |
Definition at line 102 of file dual_contouring.h.
|
protected |
Definition at line 101 of file dual_contouring.h.
|
protected |
Definition at line 103 of file dual_contouring.h.