Axis Aligned Bounding Box tree of mesh cells.
More...
#include <geogram/mesh/mesh_AABB.h>
|
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...
|
|
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...
|
|
Axis Aligned Bounding Box tree of mesh cells.
Used to quickly find the tetrahedron that contains a given 3d point.
Definition at line 733 of file mesh_AABB.h.
◆ MeshCellsAABB() [1/2]
GEO::MeshCellsAABB::MeshCellsAABB |
( |
| ) |
|
◆ MeshCellsAABB() [2/2]
GEO::MeshCellsAABB::MeshCellsAABB |
( |
Mesh & |
M, |
|
|
bool |
reorder = true |
|
) |
| |
Creates the Axis Aligned Bounding Boxes tree.
- Parameters
-
[in] | M | the input mesh. It can be modified, The cells are re-ordered (using Morton's order, see mesh_reorder()). |
[in] | reorder | if not set, Morton re-ordering is skipped (but it means that mesh_reorder() was previously called else the algorithm will be pretty unefficient). |
◆ 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] | action | a 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 791 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] | action | is 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 822 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] | action | is 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] | other | the other AABB. |
Definition at line 841 of file mesh_AABB.h.
◆ containing_bboxes_recursive()
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] | action | a function that takes an index_t that is invoked for all cells that has a bounding box that contains p . |
[in] | p | a const reference to the query point |
[in] | node | index of the first node of the AABB tree |
[in] | b | index of the first facet in node |
[in] | e | one position past the index of the last facet in node |
Definition at line 891 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] | action | a function that takes an index_t that is invoked for all cells that have a bounding box that contains p . |
Definition at line 807 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] | p | a 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 777 of file mesh_AABB.h.
◆ containing_tet_recursive()
The recursive function used by the implementation of containing_tet().
- Parameters
-
[in] | p | a const reference to the query point |
[in] | n | index of the current node in the AABB tree |
[in] | b | index of the first tet in the subtree under node n |
[in] | e | one 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] | M | the input mesh. It can be modified, The cells are re-ordered (using Morton's order, see mesh_reorder()). |
[in] | reorder | if not set, Morton re-ordering is skipped (but it means that mesh_reorder() was previously called else the algorithm will be pretty unefficient). |
◆ NO_TET
The documentation for this class was generated from the following file: