Tatooine
Public Types | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
tatooine::kdtree< Mesh > Struct Template Reference

#include <kdtree.h>

Inheritance diagram for tatooine::kdtree< Mesh >:
[legend]
Collaboration diagram for tatooine::kdtree< Mesh >:
[legend]

Public Types

using real_type = typename Mesh::real_type
 
using this_type = kdtree< Mesh >
 
using parent_type = aabb< real_type, num_dimensions()>
 
using vertex_handle = typename Mesh::vertex_handle
 
using vec_type = vec< Real, NumDimensions >
 
- Public Types inherited from tatooine::axis_aligned_bounding_box< Real, NumDimensions >
using real_type = Real
 
using this_type = axis_aligned_bounding_box< Real, NumDimensions >
 
using vec_type = vec< Real, NumDimensions >
 
using pos_type = vec_type
 
- Public Types inherited from tatooine::detail::aabb_ray_intersectable_parent< axis_aligned_bounding_box< Real, NumDimensions >, Real, NumDimensions >
using parent_type = ray_intersectable< Real, NumDimensions >
 
using intersection_type = intersection< real_type, NumDimensions >
 
using optional_intersection_type = std::optional< intersection_type >
 
using ray_type = ray< real_type, NumDimensions >
 
- Public Types inherited from tatooine::ray_intersectable< Real, NumDimensions >
using real_type = Real
 
using intersection_type = intersection< real_type, NumDimensions >
 
using optional_intersection_type = std::optional< intersection_type >
 
using ray_type = ray< real_type, NumDimensions >
 

Public Member Functions

 kdtree (Mesh const &mesh, size_t const max_depth=default_max_depth)
 
virtual ~kdtree ()=default
 
auto mesh () const -> auto const &
 
auto num_vertex_handles () const
 
auto num_triangle_handles () const
 
auto split_if_necessary () -> void
 
constexpr auto is_splitted () const
 
constexpr auto holds_vertices () const
 
constexpr auto is_at_max_depth () const
 
auto write_vtk (filesystem::path const &path)
 
auto constexpr center () const
 
auto constexpr center (std::size_t const i) const
 
auto constexpr is_inside (pos_type const &p) const
 
auto constexpr max () const -> auto const &
 
auto constexpr max () -> auto &
 
auto constexpr max (std::size_t i) const -> auto const &
 
auto constexpr max (std::size_t i) -> auto &
 
auto constexpr min () const -> auto const &
 
auto constexpr min () -> auto &
 
auto constexpr min (std::size_t i) const -> auto const &
 
auto constexpr min (std::size_t i) -> auto &
 
constexpr auto is_simplex_inside (vec< Real, 2 > const &x0, vec< Real, 2 > const &x1, vec< Real, 2 > const &x2) const
 
constexpr auto is_simplex_inside (vec< Real, 3 > x0, vec< Real, 3 > x1, vec< Real, 3 > x2) const
 
constexpr auto is_simplex_inside (vec< Real, 3 > x0, vec< Real, 3 > x1, vec< Real, 3 > x2, vec< Real, 3 > x3) const
 
- Public Member Functions inherited from tatooine::axis_aligned_bounding_box< Real, NumDimensions >
constexpr axis_aligned_bounding_box ()
 
constexpr axis_aligned_bounding_box (axis_aligned_bounding_box const &other)=default
 
constexpr axis_aligned_bounding_box (axis_aligned_bounding_box &&other) noexcept=default
 
constexpr auto operator= (axis_aligned_bounding_box const &other) -> axis_aligned_bounding_box &=default
 
constexpr auto operator= (axis_aligned_bounding_box &&other) noexcept -> axis_aligned_bounding_box &=default
 
 ~axis_aligned_bounding_box ()=default
 
template<typename Real0 , typename Real1 >
constexpr axis_aligned_bounding_box (vec< Real0, NumDimensions > &&min, vec< Real1, NumDimensions > &&max) noexcept
 
template<typename Real0 , typename Real1 >
constexpr axis_aligned_bounding_box (vec< Real0, NumDimensions > const &min, vec< Real1, NumDimensions > const &max)
 
template<typename Tensor0 , typename Tensor1 , typename Real0 , typename Real1 >
constexpr axis_aligned_bounding_box (base_tensor< Tensor0, Real0, NumDimensions > const &min, base_tensor< Tensor1, Real1, NumDimensions > const &max)
 
auto constexpr min () const -> auto const &
 
auto constexpr min () -> auto &
 
auto constexpr min (std::size_t i) const -> auto const &
 
auto constexpr min (std::size_t i) -> auto &
 
auto constexpr max () const -> auto const &
 
auto constexpr max () -> auto &
 
auto constexpr max (std::size_t i) const -> auto const &
 
auto constexpr max (std::size_t i) -> auto &
 
auto constexpr extents () const
 
auto constexpr extent (std::size_t i) const
 
auto constexpr area () const
 
auto constexpr volume () const
 
auto constexpr center () const
 
auto constexpr center (std::size_t const i) const
 
auto constexpr is_inside (pos_type const &p) const
 
constexpr auto is_rectangle_inside (vec< Real, 2 > x0, vec< Real, 2 > x1, vec< Real, 2 > x2, vec< Real, 2 > x3) const
 
constexpr auto is_simplex_inside (vec< Real, 2 > const &x0, vec< Real, 2 > const &x1, vec< Real, 2 > const &x2) const
 
constexpr auto is_simplex_inside (vec< Real, 3 > x0, vec< Real, 3 > x1, vec< Real, 3 > x2) const
 
constexpr auto is_simplex_inside (vec< Real, 3 > x0, vec< Real, 3 > x1, vec< Real, 3 > x2, vec< Real, 3 > x3) const
 
constexpr auto operator+= (pos_type const &point)
 
constexpr auto reset ()
 
constexpr auto add_dimension (Real const min, Real const max) const
 
template<typename RandomEngine = std::mt19937_64>
auto random_point (RandomEngine &&random_engine=RandomEngine{ std::random_device{}()}) const
 
auto write_vtk (filesystem::path const &path)
 
- Public Member Functions inherited from tatooine::detail::aabb_ray_intersectable_parent< axis_aligned_bounding_box< Real, NumDimensions >, Real, NumDimensions >
auto as_aabb () const -> auto const &
 
auto check_intersection (ray_type const &r, Real const=0) const -> optional_intersection_type override
 
- Public Member Functions inherited from tatooine::ray_intersectable< Real, NumDimensions >
virtual ~ray_intersectable ()=default
 
virtual auto check_intersection (ray_type const &r, real_type const min_t) const -> optional_intersection_type=0
 

Static Public Member Functions

static constexpr auto num_dimensions () -> std::size_t
 
- Static Public Member Functions inherited from tatooine::axis_aligned_bounding_box< Real, NumDimensions >
static constexpr auto num_dimensions () -> std::size_t
 
static constexpr auto infinite ()
 

Private Member Functions

 kdtree (Mesh const &mesh, vec_type const &min, vec_type const &max, size_t const level, size_t const max_depth)
 
auto distribute_vertices (size_t const split_index, real_type const split_pos)
 
auto split ()
 
auto write_vtk_collect_positions_and_indices (std::vector< vec< real_type, num_dimensions()> > &positions, std::vector< std::vector< size_t > > &indices, size_t cur_idx=0) -> size_t
 

Private Attributes

Mesh const * m_mesh
 
size_t m_level
 
size_t m_max_depth
 
std::vector< vertex_handlem_vertex_handles
 
std::vector< size_t > m_triangle_handles
 
std::array< std::unique_ptr< kdtree >, 2 > m_children
 

Static Private Attributes

static constexpr size_t default_max_depth = 64
 

Friends

class std::unique_ptr< this_type >
 

Member Typedef Documentation

◆ parent_type

template<typename Mesh >
using tatooine::kdtree< Mesh >::parent_type = aabb<real_type, num_dimensions()>

◆ real_type

template<typename Mesh >
using tatooine::kdtree< Mesh >::real_type = typename Mesh::real_type

◆ this_type

template<typename Mesh >
using tatooine::kdtree< Mesh >::this_type = kdtree<Mesh>

◆ vec_type

template<typename Mesh >
using tatooine::axis_aligned_bounding_box< Real, NumDimensions >::vec_type = vec<Real, NumDimensions>

◆ vertex_handle

template<typename Mesh >
using tatooine::kdtree< Mesh >::vertex_handle = typename Mesh::vertex_handle

Constructor & Destructor Documentation

◆ kdtree() [1/2]

template<typename Mesh >
tatooine::kdtree< Mesh >::kdtree ( Mesh const &  mesh,
size_t const  max_depth = default_max_depth 
)
inlineexplicit

◆ ~kdtree()

template<typename Mesh >
virtual tatooine::kdtree< Mesh >::~kdtree ( )
virtualdefault

◆ kdtree() [2/2]

template<typename Mesh >
tatooine::kdtree< Mesh >::kdtree ( Mesh const &  mesh,
vec_type const &  min,
vec_type const &  max,
size_t const  level,
size_t const  max_depth 
)
inlineprivate

Member Function Documentation

◆ center() [1/2]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::center ( ) const
inlineconstexpr

◆ center() [2/2]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::center ( std::size_t const  i) const
inlineconstexpr

◆ distribute_vertices()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::distribute_vertices ( size_t const  split_index,
real_type const  split_pos 
)
inlineprivate

◆ holds_vertices()

template<typename Mesh >
constexpr auto tatooine::kdtree< Mesh >::holds_vertices ( ) const
inlineconstexpr

◆ is_at_max_depth()

template<typename Mesh >
constexpr auto tatooine::kdtree< Mesh >::is_at_max_depth ( ) const
inlineconstexpr

◆ is_inside()

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::is_inside ( pos_type const &  p) const
inlineconstexpr

◆ is_simplex_inside() [1/3]

template<typename Mesh >
constexpr auto tatooine::axis_aligned_bounding_box< Real, NumDimensions >::is_simplex_inside ( vec< Real, 2 > const &  x0,
vec< Real, 2 > const &  x1,
vec< Real, 2 > const &  x2 
) const
inlineconstexpr

◆ is_simplex_inside() [2/3]

template<typename Mesh >
constexpr auto tatooine::axis_aligned_bounding_box< Real, NumDimensions >::is_simplex_inside ( vec< Real, 3 >  x0,
vec< Real, 3 >  x1,
vec< Real, 3 >  x2 
) const
inlineconstexpr

◆ is_simplex_inside() [3/3]

template<typename Mesh >
constexpr auto tatooine::axis_aligned_bounding_box< Real, NumDimensions >::is_simplex_inside ( vec< Real, 3 >  x0,
vec< Real, 3 >  x1,
vec< Real, 3 >  x2,
vec< Real, 3 >  x3 
) const
inlineconstexpr

◆ is_splitted()

template<typename Mesh >
constexpr auto tatooine::kdtree< Mesh >::is_splitted ( ) const
inlineconstexpr

◆ max() [1/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( ) -> auto&
inlineconstexpr

◆ max() [2/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( ) const -> auto const&
inlineconstexpr

◆ max() [3/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( std::size_t  i) -> auto&
inlineconstexpr

◆ max() [4/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::max ( std::size_t  i) const -> auto const&
inlineconstexpr

◆ mesh()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::mesh ( ) const -> auto const&
inline

◆ min() [1/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( ) -> auto&
inlineconstexpr

◆ min() [2/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( ) const -> auto const&
inlineconstexpr

◆ min() [3/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( std::size_t  i) -> auto&
inlineconstexpr

◆ min() [4/4]

template<typename Mesh >
auto constexpr tatooine::axis_aligned_bounding_box< Real, NumDimensions >::min ( std::size_t  i) const -> auto const&
inlineconstexpr

◆ num_dimensions()

template<typename Mesh >
static constexpr auto tatooine::kdtree< Mesh >::num_dimensions ( ) -> std::size_t
inlinestaticconstexpr

◆ num_triangle_handles()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::num_triangle_handles ( ) const
inline

◆ num_vertex_handles()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::num_vertex_handles ( ) const
inline

◆ split()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::split ( )
inlineprivate

◆ split_if_necessary()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::split_if_necessary ( ) -> void
inline

◆ write_vtk()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::write_vtk ( filesystem::path const &  path)
inline

◆ write_vtk_collect_positions_and_indices()

template<typename Mesh >
auto tatooine::kdtree< Mesh >::write_vtk_collect_positions_and_indices ( std::vector< vec< real_type, num_dimensions()> > &  positions,
std::vector< std::vector< size_t > > &  indices,
size_t  cur_idx = 0 
) -> size_t
inlineprivate

Friends And Related Function Documentation

◆ std::unique_ptr< this_type >

template<typename Mesh >
friend class std::unique_ptr< this_type >
friend

Member Data Documentation

◆ default_max_depth

template<typename Mesh >
constexpr size_t tatooine::kdtree< Mesh >::default_max_depth = 64
staticconstexprprivate

◆ m_children

template<typename Mesh >
std::array<std::unique_ptr<kdtree>, 2> tatooine::kdtree< Mesh >::m_children
private

◆ m_level

template<typename Mesh >
size_t tatooine::kdtree< Mesh >::m_level
private

◆ m_max_depth

template<typename Mesh >
size_t tatooine::kdtree< Mesh >::m_max_depth
private

◆ m_mesh

template<typename Mesh >
Mesh const* tatooine::kdtree< Mesh >::m_mesh
private

◆ m_triangle_handles

template<typename Mesh >
std::vector<size_t> tatooine::kdtree< Mesh >::m_triangle_handles
private

◆ m_vertex_handles

template<typename Mesh >
std::vector<vertex_handle> tatooine::kdtree< Mesh >::m_vertex_handles
private

The documentation for this struct was generated from the following file: