Mesh Oriented datABase  (version 5.5.0)
An array-based unstructured mesh library
moab::BSPTree Class Reference

BSP tree, for sorting and searching entities spatially. More...

#include <BSPTree.hpp>

+ Collaboration diagram for moab::BSPTree:

Classes

struct  Plane
 struct to store a plane More...
 

Public Types

enum  Axis { X = 0 , Y = 1 , Z = 2 }
 Enumerate split plane directions. More...
 

Public Member Functions

 BSPTree (Interface *iface, const char *tagname=0, unsigned meshset_creation_flags=MESHSET_SET)
 
 BSPTree (Interface *iface, bool destroy_created_trees, const char *tagname=0, unsigned meshset_creation_flags=MESHSET_SET)
 
 ~BSPTree ()
 
ErrorCode get_split_plane (EntityHandle node, Plane &plane)
 Get split plane for tree node. More...
 
ErrorCode set_split_plane (EntityHandle node, const Plane &plane)
 Set split plane for tree node. More...
 
ErrorCode get_tree_box (EntityHandle root_node, double corner_coords[8][3])
 Get bounding box for entire tree. More...
 
ErrorCode get_tree_box (EntityHandle root_node, double corner_coords[24])
 Get bounding box for entire tree. More...
 
ErrorCode set_tree_box (EntityHandle root_node, const double box_min[3], const double box_max[3])
 Set bounding box for entire tree. More...
 
ErrorCode set_tree_box (EntityHandle root_node, const double corner_coords[8][3])
 
ErrorCode create_tree (const double box_min[3], const double box_max[3], EntityHandle &root_handle)
 Create tree root node. More...
 
ErrorCode create_tree (const double corner_coords[8][3], EntityHandle &root_handle)
 
ErrorCode create_tree (EntityHandle &root_handle)
 Create tree root node. More...
 
ErrorCode find_all_trees (Range &results)
 Find all tree roots. More...
 
ErrorCode delete_tree (EntityHandle root_handle)
 Destroy a tree. More...
 
Interfacemoab ()
 
ErrorCode get_tree_iterator (EntityHandle tree_root, BSPTreeIter &result)
 Get iterator for tree. More...
 
ErrorCode get_tree_end_iterator (EntityHandle tree_root, BSPTreeIter &result)
 Get iterator at right-most ('last') leaf. More...
 
ErrorCode split_leaf (BSPTreeIter &leaf, Plane plane)
 Split leaf of tree Updates iterator location to point to first new leaf node. More...
 
ErrorCode split_leaf (BSPTreeIter &leaf, Plane plane, EntityHandle &left_child, EntityHandle &right_child)
 Split leaf of tree Updates iterator location to point to first new leaf node. More...
 
ErrorCode split_leaf (BSPTreeIter &leaf, Plane plane, const Range &left_entities, const Range &right_entities)
 Split leaf of tree Updates iterator location to point to first new leaf node. More...
 
ErrorCode split_leaf (BSPTreeIter &leaf, Plane plane, const std::vector< EntityHandle > &left_entities, const std::vector< EntityHandle > &right_entities)
 Split leaf of tree Updates iterator location to point to first new leaf node. More...
 
ErrorCode merge_leaf (BSPTreeIter &iter)
 Merge the leaf pointed to by the current iterator with it's sibling. If the sibling is not a leaf, multiple merges may be done. More...
 
ErrorCode leaf_containing_point (EntityHandle tree_root, const double point[3], EntityHandle &leaf_out)
 Get leaf containing input position. More...
 
ErrorCode leaf_containing_point (EntityHandle tree_root, const double xyz[3], BSPTreeIter &result)
 Get iterator at leaf containing input position. More...
 

Static Public Member Functions

static double epsilon ()
 

Private Member Functions

ErrorCode init_tags (const char *tagname=0)
 

Private Attributes

InterfacembInstance
 
Tag planeTag
 
Tag rootTag
 
unsigned meshSetFlags
 
bool cleanUpTrees
 
std::vector< EntityHandlecreatedTrees
 

Detailed Description

BSP tree, for sorting and searching entities spatially.

Definition at line 42 of file BSPTree.hpp.

Member Enumeration Documentation

◆ Axis

Enumerate split plane directions.

Enumerator

Definition at line 69 of file BSPTree.hpp.

70  {
71  X = 0,
72  Y = 1,
73  Z = 2
74  };

Constructor & Destructor Documentation

◆ BSPTree() [1/2]

moab::BSPTree::BSPTree ( Interface iface,
const char *  tagname = 0,
unsigned  meshset_creation_flags = MESHSET_SET 
)

Definition at line 109 of file BSPTree.cpp.

110  : mbInstance( mb ), meshSetFlags( set_flags ), cleanUpTrees( false )
111 {
112  init_tags( tagname );
113 }

References init_tags().

◆ BSPTree() [2/2]

moab::BSPTree::BSPTree ( Interface iface,
bool  destroy_created_trees,
const char *  tagname = 0,
unsigned  meshset_creation_flags = MESHSET_SET 
)

Definition at line 115 of file BSPTree.cpp.

116  : mbInstance( mb ), meshSetFlags( set_flags ), cleanUpTrees( destroy_created_trees )
117 {
118  init_tags( tagname );
119 }

References init_tags().

◆ ~BSPTree()

moab::BSPTree::~BSPTree ( )

Definition at line 121 of file BSPTree.cpp.

122 {
123  if( !cleanUpTrees ) return;
124 
125  while( !createdTrees.empty() )
126  {
127  EntityHandle tree = createdTrees.back();
128  // make sure this is a tree (rather than some other, stale handle)
129  const void* data_ptr = 0;
130  ErrorCode rval = moab()->tag_get_by_ptr( rootTag, &tree, 1, &data_ptr );
131  if( MB_SUCCESS == rval ) rval = delete_tree( tree );
132  if( MB_SUCCESS != rval ) createdTrees.pop_back();
133  }
134 }

References cleanUpTrees, createdTrees, delete_tree(), ErrorCode, MB_SUCCESS, moab(), rootTag, and moab::Interface::tag_get_by_ptr().

Member Function Documentation

◆ create_tree() [1/3]

ErrorCode moab::BSPTree::create_tree ( const double  box_min[3],
const double  box_max[3],
EntityHandle root_handle 
)

Create tree root node.

Definition at line 203 of file BSPTree.cpp.

204 {
205  double corners[8][3];
206  corners_from_box( box_min, box_max, corners );
207  return create_tree( corners, root_handle );
208 }

References box_max(), box_min(), and moab::corners_from_box().

Referenced by create_tree().

◆ create_tree() [2/3]

ErrorCode moab::BSPTree::create_tree ( const double  corner_coords[8][3],
EntityHandle root_handle 
)

Definition at line 186 of file BSPTree.cpp.

187 {
188  ErrorCode rval = moab()->create_meshset( meshSetFlags, root_handle );
189  if( MB_SUCCESS != rval ) return rval;
190 
191  rval = set_tree_box( root_handle, corners );
192  if( MB_SUCCESS != rval )
193  {
194  moab()->delete_entities( &root_handle, 1 );
195  root_handle = 0;
196  return rval;
197  }
198 
199  createdTrees.push_back( root_handle );
200  return MB_SUCCESS;
201 }

References moab::Interface::create_meshset(), createdTrees, moab::Interface::delete_entities(), ErrorCode, MB_SUCCESS, meshSetFlags, moab(), and set_tree_box().

◆ create_tree() [3/3]

ErrorCode moab::BSPTree::create_tree ( EntityHandle root_handle)

Create tree root node.

Definition at line 179 of file BSPTree.cpp.

180 {
181  const double min[3] = { -HUGE_VAL, -HUGE_VAL, -HUGE_VAL };
182  const double max[3] = { HUGE_VAL, HUGE_VAL, HUGE_VAL };
183  return create_tree( min, max, root_handle );
184 }

References create_tree().

◆ delete_tree()

ErrorCode moab::BSPTree::delete_tree ( EntityHandle  root_handle)

Destroy a tree.

Definition at line 210 of file BSPTree.cpp.

211 {
212  ErrorCode rval;
213 
214  std::vector< EntityHandle > children, dead_sets, current_sets;
215  current_sets.push_back( root_handle );
216  while( !current_sets.empty() )
217  {
218  EntityHandle set = current_sets.back();
219  current_sets.pop_back();
220  dead_sets.push_back( set );
221  rval = moab()->get_child_meshsets( set, children );
222  if( MB_SUCCESS != rval ) return rval;
223  std::copy( children.begin(), children.end(), std::back_inserter( current_sets ) );
224  children.clear();
225  }
226 
227  rval = moab()->tag_delete_data( rootTag, &root_handle, 1 );
228  if( MB_SUCCESS != rval ) return rval;
229 
230  createdTrees.erase( std::remove( createdTrees.begin(), createdTrees.end(), root_handle ), createdTrees.end() );
231  return moab()->delete_entities( &dead_sets[0], dead_sets.size() );
232 }

References children, createdTrees, moab::Interface::delete_entities(), ErrorCode, moab::Interface::get_child_meshsets(), MB_SUCCESS, moab(), rootTag, and moab::Interface::tag_delete_data().

Referenced by ~BSPTree().

◆ epsilon()

static double moab::BSPTree::epsilon ( )
inlinestatic

Definition at line 54 of file BSPTree.hpp.

55  {
56  return 1e-6;
57  }

Referenced by moab::BSPTreeBoxIter::side_on_plane(), and moab::BSPTreeBoxIter::splits().

◆ find_all_trees()

ErrorCode moab::BSPTree::find_all_trees ( Range results)

Find all tree roots.

Definition at line 234 of file BSPTree.cpp.

235 {
236  return moab()->get_entities_by_type_and_tag( 0, MBENTITYSET, &rootTag, 0, 1, results );
237 }

References moab::Interface::get_entities_by_type_and_tag(), MBENTITYSET, moab(), and rootTag.

◆ get_split_plane()

◆ get_tree_box() [1/2]

ErrorCode moab::BSPTree::get_tree_box ( EntityHandle  root_node,
double  corner_coords[24] 
)

Get bounding box for entire tree.

Definition at line 174 of file BSPTree.cpp.

175 {
176  return moab()->tag_get_data( rootTag, &root_handle, 1, corners );
177 }

References moab(), rootTag, and moab::Interface::tag_get_data().

◆ get_tree_box() [2/2]

ErrorCode moab::BSPTree::get_tree_box ( EntityHandle  root_node,
double  corner_coords[8][3] 
)

Get bounding box for entire tree.

Definition at line 169 of file BSPTree.cpp.

170 {
171  return moab()->tag_get_data( rootTag, &root_handle, 1, corners );
172 }

References moab(), rootTag, and moab::Interface::tag_get_data().

Referenced by moab::BSPTreeIter::calculate_polyhedron(), moab::BSPTreeBoxIter::initialize(), and moab::BSPTreeIter::intersect_ray().

◆ get_tree_end_iterator()

ErrorCode moab::BSPTree::get_tree_end_iterator ( EntityHandle  tree_root,
BSPTreeIter result 
)

Get iterator at right-most ('last') leaf.

Definition at line 246 of file BSPTree.cpp.

247 {
248  ErrorCode rval = iter.initialize( this, root );
249  if( MB_SUCCESS != rval ) return rval;
250  return iter.step_to_first_leaf( BSPTreeIter::RIGHT );
251 }

References ErrorCode, moab::BSPTreeIter::initialize(), MB_SUCCESS, moab::BSPTreeIter::RIGHT, and moab::BSPTreeIter::step_to_first_leaf().

◆ get_tree_iterator()

ErrorCode moab::BSPTree::get_tree_iterator ( EntityHandle  tree_root,
BSPTreeIter result 
)

Get iterator for tree.

Definition at line 239 of file BSPTree.cpp.

240 {
241  ErrorCode rval = iter.initialize( this, root );
242  if( MB_SUCCESS != rval ) return rval;
243  return iter.step_to_first_leaf( BSPTreeIter::LEFT );
244 }

References ErrorCode, moab::BSPTreeIter::initialize(), moab::BSPTreeIter::LEFT, MB_SUCCESS, and moab::BSPTreeIter::step_to_first_leaf().

◆ init_tags()

ErrorCode moab::BSPTree::init_tags ( const char *  tagname = 0)
private

Definition at line 93 of file BSPTree.cpp.

94 {
95  if( !tagname ) tagname = MB_BSP_TREE_DEFAULT_TAG_NAME;
96 
97  std::string rootname( tagname );
98  rootname += "_box";
99 
101  if( MB_SUCCESS != rval )
102  planeTag = 0;
103  else
104  rval = moab()->tag_get_handle( rootname.c_str(), 24, MB_TYPE_DOUBLE, rootTag, MB_TAG_CREAT | MB_TAG_SPARSE );
105  if( MB_SUCCESS != rval ) rootTag = 0;
106  return rval;
107 }

References ErrorCode, MB_BSP_TREE_DEFAULT_TAG_NAME, MB_SUCCESS, MB_TAG_CREAT, MB_TAG_DENSE, MB_TAG_SPARSE, MB_TYPE_DOUBLE, moab(), planeTag, rootTag, and moab::Interface::tag_get_handle().

Referenced by BSPTree().

◆ leaf_containing_point() [1/2]

ErrorCode moab::BSPTree::leaf_containing_point ( EntityHandle  tree_root,
const double  point[3],
EntityHandle leaf_out 
)

Get leaf containing input position.

Does not take into account global bounding box of tree.

  • Therefore there is always one leaf containing the point.
  • If caller wants to account for global bounding box, then caller can test against that box and not call this method at all if the point is outside the box, as there is no leaf containing the point in that case.

Definition at line 1135 of file BSPTree.cpp.

1136 {
1137  std::vector< EntityHandle > children;
1138  Plane plane;
1139  EntityHandle node = tree_root;
1140  ErrorCode rval = moab()->get_child_meshsets( node, children );
1141  if( MB_SUCCESS != rval ) return rval;
1142  while( !children.empty() )
1143  {
1144  rval = get_split_plane( node, plane );
1145  if( MB_SUCCESS != rval ) return rval;
1146 
1147  node = children[plane.above( point )];
1148  children.clear();
1149  rval = moab()->get_child_meshsets( node, children );
1150  if( MB_SUCCESS != rval ) return rval;
1151  }
1152  leaf_out = node;
1153  return MB_SUCCESS;
1154 }

References moab::BSPTree::Plane::above(), children, ErrorCode, moab::Interface::get_child_meshsets(), get_split_plane(), MB_SUCCESS, and moab().

◆ leaf_containing_point() [2/2]

ErrorCode moab::BSPTree::leaf_containing_point ( EntityHandle  tree_root,
const double  xyz[3],
BSPTreeIter result 
)

Get iterator at leaf containing input position.

Returns MB_ENTITY_NOT_FOUND if point is not within bounding box of tree.

Definition at line 1156 of file BSPTree.cpp.

1157 {
1158  ErrorCode rval;
1159 
1160  rval = iter.initialize( this, root, point );
1161  if( MB_SUCCESS != rval ) return rval;
1162 
1163  for( ;; )
1164  {
1165  iter.childVect.clear();
1166  rval = moab()->get_child_meshsets( iter.handle(), iter.childVect );
1167  if( MB_SUCCESS != rval || iter.childVect.empty() ) return rval;
1168 
1169  Plane plane;
1170  rval = get_split_plane( iter.handle(), plane );
1171  if( MB_SUCCESS != rval ) return rval;
1172 
1173  rval = iter.down( plane, ( BSPTreeIter::Direction )( plane.above( point ) ) );
1174  if( MB_SUCCESS != rval ) return rval;
1175  }
1176 }

References moab::BSPTree::Plane::above(), moab::BSPTreeIter::childVect, moab::BSPTreeIter::down(), ErrorCode, moab::Interface::get_child_meshsets(), get_split_plane(), moab::BSPTreeIter::handle(), moab::BSPTreeIter::initialize(), MB_SUCCESS, and moab().

◆ merge_leaf()

ErrorCode moab::BSPTree::merge_leaf ( BSPTreeIter iter)

Merge the leaf pointed to by the current iterator with it's sibling. If the sibling is not a leaf, multiple merges may be done.

Definition at line 325 of file BSPTree.cpp.

326 {
327  ErrorCode rval;
328  if( iter.depth() == 1 ) // at root
329  return MB_FAILURE;
330 
331  // Move iter to parent
332  iter.up();
333 
334  // Get sets to merge
335  EntityHandle parent = iter.handle();
336  iter.childVect.clear();
337  rval = moab()->get_child_meshsets( parent, iter.childVect );
338  if( MB_SUCCESS != rval ) return rval;
339 
340  // Remove child links
341  moab()->remove_child_meshset( parent, iter.childVect[0] );
342  moab()->remove_child_meshset( parent, iter.childVect[1] );
343  std::vector< EntityHandle > stack( iter.childVect );
344 
345  // Get all entities from children and put them in parent
346  Range range;
347  while( !stack.empty() )
348  {
349  EntityHandle h = stack.back();
350  stack.pop_back();
351  range.clear();
352  rval = moab()->get_entities_by_handle( h, range );
353  if( MB_SUCCESS != rval ) return rval;
354  rval = moab()->add_entities( parent, range );
355  if( MB_SUCCESS != rval ) return rval;
356 
357  iter.childVect.clear();
358  rval = moab()->get_child_meshsets( h, iter.childVect );MB_CHK_ERR( rval );
359  if( !iter.childVect.empty() )
360  {
361  moab()->remove_child_meshset( h, iter.childVect[0] );
362  moab()->remove_child_meshset( h, iter.childVect[1] );
363  stack.push_back( iter.childVect[0] );
364  stack.push_back( iter.childVect[1] );
365  }
366 
367  rval = moab()->delete_entities( &h, 1 );
368  if( MB_SUCCESS != rval ) return rval;
369  }
370 
371  return MB_SUCCESS;
372 }

References moab::Interface::add_entities(), moab::Range::back(), moab::BSPTreeIter::childVect, moab::Range::clear(), moab::Interface::delete_entities(), moab::BSPTreeIter::depth(), ErrorCode, moab::Interface::get_child_meshsets(), moab::Interface::get_entities_by_handle(), moab::BSPTreeIter::handle(), MB_CHK_ERR, MB_SUCCESS, moab(), moab::Interface::remove_child_meshset(), and moab::BSPTreeIter::up().

◆ moab()

◆ set_split_plane()

ErrorCode moab::BSPTree::set_split_plane ( EntityHandle  node,
const Plane plane 
)

Set split plane for tree node.

Definition at line 136 of file BSPTree.cpp.

137 {
138  // check for unit-length normal
139  const double lensqr = p.norm[0] * p.norm[0] + p.norm[1] * p.norm[1] + p.norm[2] * p.norm[2];
140  if( fabs( lensqr - 1.0 ) < std::numeric_limits< double >::epsilon() )
141  return moab()->tag_set_data( planeTag, &node, 1, &p );
142 
143  const double inv_len = 1.0 / sqrt( lensqr );
144  Plane p2( p );
145  p2.norm[0] *= inv_len;
146  p2.norm[1] *= inv_len;
147  p2.norm[2] *= inv_len;
148  p2.coeff *= inv_len;
149 
150  // check for zero-length normal
151  if( !Util::is_finite( p2.norm[0] + p2.norm[1] + p2.norm[2] + p2.coeff ) ) return MB_FAILURE;
152 
153  // store plane
154  return moab()->tag_set_data( planeTag, &node, 1, &p2 );
155 }

References moab::BSPTree::Plane::coeff, moab::Util::is_finite(), moab(), moab::BSPTree::Plane::norm, planeTag, and moab::Interface::tag_set_data().

Referenced by split_leaf().

◆ set_tree_box() [1/2]

ErrorCode moab::BSPTree::set_tree_box ( EntityHandle  root_node,
const double  box_min[3],
const double  box_max[3] 
)

Set bounding box for entire tree.

Definition at line 157 of file BSPTree.cpp.

158 {
159  double corners[8][3];
160  corners_from_box( box_min, box_max, corners );
161  return set_tree_box( root_handle, corners );
162 }

References box_max(), box_min(), and moab::corners_from_box().

Referenced by create_tree().

◆ set_tree_box() [2/2]

ErrorCode moab::BSPTree::set_tree_box ( EntityHandle  root_node,
const double  corner_coords[8][3] 
)

Definition at line 164 of file BSPTree.cpp.

165 {
166  return moab()->tag_set_data( rootTag, &root_handle, 1, corners );
167 }

References moab(), rootTag, and moab::Interface::tag_set_data().

◆ split_leaf() [1/4]

ErrorCode moab::BSPTree::split_leaf ( BSPTreeIter leaf,
Plane  plane 
)

Split leaf of tree Updates iterator location to point to first new leaf node.

Definition at line 280 of file BSPTree.cpp.

281 {
282  EntityHandle left, right;
283  return split_leaf( leaf, plane, left, right );
284 }

Referenced by split_leaf().

◆ split_leaf() [2/4]

ErrorCode moab::BSPTree::split_leaf ( BSPTreeIter leaf,
Plane  plane,
const Range left_entities,
const Range right_entities 
)

Split leaf of tree Updates iterator location to point to first new leaf node.

Definition at line 286 of file BSPTree.cpp.

287 {
288  EntityHandle left, right, parent = leaf.handle();
289  ErrorCode rval = split_leaf( leaf, plane, left, right );
290  if( MB_SUCCESS != rval ) return rval;
291 
292  if( MB_SUCCESS == moab()->add_entities( left, left_entities ) &&
293  MB_SUCCESS == moab()->add_entities( right, right_entities ) &&
294  MB_SUCCESS == moab()->clear_meshset( &parent, 1 ) )
295  return MB_SUCCESS;
296 
297  moab()->remove_child_meshset( parent, left );
298  moab()->remove_child_meshset( parent, right );
299  EntityHandle children[] = { left, right };
300  moab()->delete_entities( children, 2 );
301  return MB_FAILURE;
302 }

References children, moab::Interface::delete_entities(), ErrorCode, moab::BSPTreeIter::handle(), MB_SUCCESS, moab(), moab::Interface::remove_child_meshset(), and split_leaf().

◆ split_leaf() [3/4]

ErrorCode moab::BSPTree::split_leaf ( BSPTreeIter leaf,
Plane  plane,
const std::vector< EntityHandle > &  left_entities,
const std::vector< EntityHandle > &  right_entities 
)

Split leaf of tree Updates iterator location to point to first new leaf node.

Definition at line 304 of file BSPTree.cpp.

308 {
309  EntityHandle left, right, parent = leaf.handle();
310  ErrorCode rval = split_leaf( leaf, plane, left, right );
311  if( MB_SUCCESS != rval ) return rval;
312 
313  if( MB_SUCCESS == moab()->add_entities( left, &left_entities[0], left_entities.size() ) &&
314  MB_SUCCESS == moab()->add_entities( right, &right_entities[0], right_entities.size() ) &&
315  MB_SUCCESS == moab()->clear_meshset( &parent, 1 ) )
316  return MB_SUCCESS;
317 
318  moab()->remove_child_meshset( parent, left );
319  moab()->remove_child_meshset( parent, right );
320  EntityHandle children[] = { left, right };
321  moab()->delete_entities( children, 2 );
322  return MB_FAILURE;
323 }

References children, moab::Interface::delete_entities(), ErrorCode, moab::BSPTreeIter::handle(), MB_SUCCESS, moab(), moab::Interface::remove_child_meshset(), and split_leaf().

◆ split_leaf() [4/4]

ErrorCode moab::BSPTree::split_leaf ( BSPTreeIter leaf,
Plane  plane,
EntityHandle left_child,
EntityHandle right_child 
)

Split leaf of tree Updates iterator location to point to first new leaf node.

Definition at line 253 of file BSPTree.cpp.

254 {
255  ErrorCode rval;
256 
257  rval = moab()->create_meshset( meshSetFlags, left );
258  if( MB_SUCCESS != rval ) return rval;
259 
260  rval = moab()->create_meshset( meshSetFlags, right );
261  if( MB_SUCCESS != rval )
262  {
263  moab()->delete_entities( &left, 1 );
264  return rval;
265  }
266 
267  if( MB_SUCCESS != set_split_plane( leaf.handle(), plane ) ||
268  MB_SUCCESS != moab()->add_child_meshset( leaf.handle(), left ) ||
269  MB_SUCCESS != moab()->add_child_meshset( leaf.handle(), right ) ||
270  MB_SUCCESS != leaf.step_to_first_leaf( BSPTreeIter::LEFT ) )
271  {
272  EntityHandle children[] = { left, right };
273  moab()->delete_entities( children, 2 );
274  return MB_FAILURE;
275  }
276 
277  return MB_SUCCESS;
278 }

References children, moab::Interface::create_meshset(), moab::Interface::delete_entities(), ErrorCode, moab::BSPTreeIter::handle(), moab::BSPTreeIter::LEFT, MB_SUCCESS, meshSetFlags, moab(), set_split_plane(), and moab::BSPTreeIter::step_to_first_leaf().

Member Data Documentation

◆ cleanUpTrees

bool moab::BSPTree::cleanUpTrees
private

Definition at line 48 of file BSPTree.hpp.

Referenced by ~BSPTree().

◆ createdTrees

std::vector< EntityHandle > moab::BSPTree::createdTrees
private

Definition at line 49 of file BSPTree.hpp.

Referenced by create_tree(), delete_tree(), and ~BSPTree().

◆ mbInstance

Interface* moab::BSPTree::mbInstance
private

Definition at line 45 of file BSPTree.hpp.

Referenced by moab().

◆ meshSetFlags

unsigned moab::BSPTree::meshSetFlags
private

Definition at line 47 of file BSPTree.hpp.

Referenced by create_tree(), and split_leaf().

◆ planeTag

Tag moab::BSPTree::planeTag
private

Definition at line 46 of file BSPTree.hpp.

Referenced by get_split_plane(), init_tags(), and set_split_plane().

◆ rootTag

Tag moab::BSPTree::rootTag
private

Definition at line 46 of file BSPTree.hpp.

Referenced by delete_tree(), find_all_trees(), get_tree_box(), init_tags(), set_tree_box(), and ~BSPTree().


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