Graphite  Version 3
An experimental 3D geometry processing program
GEO::MeshCellsAABB Class Reference

Axis Aligned Bounding Box tree of mesh cells. More...

#include <geogram/mesh/mesh_AABB.h>

Inheritance diagram for GEO::MeshCellsAABB:
GEO::MeshAABB3d GEO::AABB< BOX >

Public Member Functions

 MeshCellsAABB ()
 MeshCellsAABB constructor. More...
 
 MeshCellsAABB (Mesh &M, bool reorder=true)
 Creates the Axis Aligned Bounding Boxes tree. More...
 
void initialize (Mesh &M, bool reorder=true)
 Initializes the Axis Aligned Bounding Boxes tree. More...
 
index_t containing_tet (const vec3 &p) const
 Finds the index of a tetrahedron that contains a query point. More...
 
void compute_bbox_cell_bbox_intersections (const Box &box_in, std::function< void(index_t)> action) const
 Computes all the intersections between a given box and the bounding boxes of all the cells. More...
 
void containing_boxes (const vec3 &p, std::function< void(index_t)> action) const
 Finds all the cells such that their bounding box contain a point. More...
 
void compute_cell_bbox_intersections (std::function< void(index_t, index_t)> action) const
 Computes all the pairs of intersecting cells. More...
 
void compute_other_cell_bbox_intersections (MeshCellsAABB *other, std::function< void(index_t, index_t)> action) const
 Computes all the pairs of intersecting cells between this AABB and another one. More...
 
- Public Member Functions inherited from GEO::MeshAABB3d
 MeshAABB3d ()
 MeshAABB3d constructor.
 
const Meshmesh () const
 Gets the mesh. More...
 

Static Public Attributes

static const index_t NO_TET = index_t(-1)
 Symbolic constant for indicating that there is no containing tetrahedron. More...
 

Protected Member Functions

index_t containing_tet_recursive (const vec3 &p, index_t n, index_t b, index_t e) const
 The recursive function used by the implementation of containing_tet(). More...
 
void containing_bboxes_recursive (std::function< void(index_t)> action, const vec3 &p, index_t node, index_t b, index_t e) const
 Computes all the cells that have a bbox that contain a given point in a sub-tree of the AABB tree. More...
 
- Protected Member Functions inherited from GEO::AABB< BOX >
void initialize (index_t nb, std::function< void(BOX &, index_t)> get_bbox)
 Initializes this AABB. More...
 
void bbox_intersect_recursive (std::function< void(index_t)> action, const BOX &box, index_t node, index_t b, index_t e) const
 Computes all the elements that have a bbox that intersects a given bbox in a sub-tree of the AABB tree. More...
 
void self_intersect_recursive (std::function< void(index_t, index_t)> action, index_t node1, index_t b1, index_t e1, index_t node2, index_t b2, index_t e2) const
 Computes all the pairs of intersecting elements for two sub-trees of the AABB tree. More...
 
void other_intersect_recursive (std::function< void(index_t, index_t)> action, index_t node1, index_t b1, index_t e1, const AABB< BOX > *other, index_t node2, index_t b2, index_t e2) const
 Computes all the pairs of intersecting elements for two sub-trees of two AABB trees. More...
 
void init_bboxes_recursive (index_t node_index, index_t b, index_t e, std::function< void(BOX &, index_t)> get_bbox)
 Computes the hierarchy of bounding boxes recursively. More...
 

Additional Inherited Members

- Static Protected Member Functions inherited from GEO::AABB< BOX >
static index_t max_node_index (index_t node_index, index_t b, index_t e)
 Computes the maximum node index in a subtree. More...
 
- Protected Attributes inherited from GEO::MeshAABB3d
Meshmesh_
 
- Protected Attributes inherited from GEO::AABB< BOX >
index_t nb_
 
vector< BOX > bboxes_
 

Detailed Description

Axis Aligned Bounding Box tree of mesh cells.

Used to quickly find the tetrahedron that contains a given 3d point.

Definition at line 731 of file mesh_AABB.h.

Constructor & Destructor Documentation

◆ MeshCellsAABB() [1/2]

GEO::MeshCellsAABB::MeshCellsAABB ( )

MeshCellsAABB constructor.

Creates an uninitialized MeshCellsAABB.

◆ MeshCellsAABB() [2/2]

GEO::MeshCellsAABB::MeshCellsAABB ( Mesh M,
bool  reorder = true 
)

Creates the Axis Aligned Bounding Boxes tree.

Parameters
[in]Mthe input mesh. It can be modified, The cells are re-ordered (using Morton's order, see mesh_reorder()).
[in]reorderif not set, Morton re-ordering is skipped (but it means that mesh_reorder() was previously called else the algorithm will be pretty unefficient).

Member Function Documentation

◆ compute_bbox_cell_bbox_intersections()

void GEO::MeshCellsAABB::compute_bbox_cell_bbox_intersections ( const Box box_in,
std::function< void(index_t)>  action 
) const
inline

Computes all the intersections between a given box and the bounding boxes of all the cells.

Parameters
[in]actiona function that takes as argument an index_t (cell index) invoked for all cells that have a bounding box that intersects box_in.

Definition at line 789 of file mesh_AABB.h.

◆ compute_cell_bbox_intersections()

void GEO::MeshCellsAABB::compute_cell_bbox_intersections ( std::function< void(index_t, index_t)>  action) const
inline

Computes all the pairs of intersecting cells.

Parameters
[in]actionis a function that takes two index_t's, invoked of all pairs of cells that have overlapping bounding boxes. Further processing is necessary to detect actual cell intersections.

Definition at line 820 of file mesh_AABB.h.

◆ compute_other_cell_bbox_intersections()

void GEO::MeshCellsAABB::compute_other_cell_bbox_intersections ( MeshCellsAABB other,
std::function< void(index_t, index_t)>  action 
) const
inline

Computes all the pairs of intersecting cells between this AABB and another one.

Parameters
[in]actionis a function that takes two index_t's, invoked of all pairs of cells that have overlapping bounding boxes. Further processing is necessary to detect actual cell intersections.
[in]otherthe other AABB.

Definition at line 839 of file mesh_AABB.h.

◆ containing_bboxes_recursive()

void GEO::MeshCellsAABB::containing_bboxes_recursive ( std::function< void(index_t)>  action,
const vec3 p,
index_t  node,
index_t  b,
index_t  e 
) const
inlineprotected

Computes all the cells that have a bbox that contain a given point in a sub-tree of the AABB tree.

Note that the tree structure is completely implicit, therefore the bounds of the (continuous) facet indices sequences that correspond to the facets contained in the two nodes are sent as well as the node indices.

Parameters
[in]actiona function that takes an index_t that is invoked for all cells that has a bounding box that contains p.
[in]pa const reference to the query point
[in]nodeindex of the first node of the AABB tree
[in]bindex of the first facet in node
[in]eone position past the index of the last facet in node

Definition at line 889 of file mesh_AABB.h.

◆ containing_boxes()

void GEO::MeshCellsAABB::containing_boxes ( const vec3 p,
std::function< void(index_t)>  action 
) const
inline

Finds all the cells such that their bounding box contain a point.

Parameters
[in]actiona function that takes an index_t that is invoked for all cells that have a bounding box that contains p.

Definition at line 805 of file mesh_AABB.h.

◆ containing_tet()

index_t GEO::MeshCellsAABB::containing_tet ( const vec3 p) const
inline

Finds the index of a tetrahedron that contains a query point.

Parameters
[in]pa const reference to the query point
Returns
the index of one of the tetrahedra that contains p or NO_TET if p is outside the mesh.
Note
The input mesh needs to be tetrahedralized. If the mesh has arbitrary cells, then one may use instead containing_boxes().

Definition at line 775 of file mesh_AABB.h.

◆ containing_tet_recursive()

index_t GEO::MeshCellsAABB::containing_tet_recursive ( const vec3 p,
index_t  n,
index_t  b,
index_t  e 
) const
protected

The recursive function used by the implementation of containing_tet().

Parameters
[in]pa const reference to the query point
[in]nindex of the current node in the AABB tree
[in]bindex of the first tet in the subtree under node n
[in]eone position past the index of the last tet in the subtree under node n
Returns
the index of one of the tetrahedra that contains p, or NO_TET if p is outside the mesh.

◆ initialize()

void GEO::MeshCellsAABB::initialize ( Mesh M,
bool  reorder = true 
)

Initializes the Axis Aligned Bounding Boxes tree.

Parameters
[in]Mthe input mesh. It can be modified, The cells are re-ordered (using Morton's order, see mesh_reorder()).
[in]reorderif not set, Morton re-ordering is skipped (but it means that mesh_reorder() was previously called else the algorithm will be pretty unefficient).

Member Data Documentation

◆ NO_TET

const index_t GEO::MeshCellsAABB::NO_TET = index_t(-1)
static

Symbolic constant for indicating that there is no containing tetrahedron.

See also
containing_tet()

Definition at line 739 of file mesh_AABB.h.


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