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

An implementation of an Intersection Registration Context for use GQT ray-firing. More...

+ Inheritance diagram for moab::GQT_IntRegCtxt:
+ Collaboration diagram for moab::GQT_IntRegCtxt:

Public Member Functions

 GQT_IntRegCtxt (OrientedBoxTreeTool *obbtool, const double ray_point[3], const double ray_dir[3], double tolerance, int min_tolerance_intersections, const EntityHandle *root_set, const EntityHandle *geom_volume, const Tag *sense_tag, const int *desired_orient, const std::vector< EntityHandle > *prev_facets)
 
virtual ErrorCode register_intersection (EntityHandle set, EntityHandle triangle, double distance, OrientedBoxTreeTool::IntersectSearchWindow &, GeomUtil::intersection_type int_type)
 
virtual ErrorCode update_orient (EntityHandle set, int *surfTriOrient)
 
virtual const int * getDesiredOrient ()
 
- Public Member Functions inherited from moab::OrientedBoxTreeTool::IntRegCtxt
std::vector< double > get_intersections ()
 
std::vector< EntityHandleget_facets ()
 
std::vector< EntityHandleget_sets ()
 

Private Member Functions

void add_intersection (EntityHandle set, EntityHandle tri, double dist, OrientedBoxTreeTool::IntersectSearchWindow &search_win)
 
void append_intersection (EntityHandle set, EntityHandle facet, double dist)
 
void set_intersection (int len_idx, EntityHandle set, EntityHandle facet, double dist)
 
void add_mode1_intersection (EntityHandle set, EntityHandle facet, double dist, OrientedBoxTreeTool::IntersectSearchWindow &search_win)
 
bool edge_node_piercing_intersect (const EntityHandle tri, const CartVect &ray_direction, const GeomUtil::intersection_type int_type, const std::vector< EntityHandle > &close_tris, const std::vector< int > &close_senses, const Interface *MBI, std::vector< EntityHandle > *neighborhood_tris=0)
 Determine if a ray-edge/node intersection is glancing or piercing. This function avoids asking for upward adjacencies to prevent their creation. More...
 
bool in_prevFacets (const EntityHandle tri)
 
bool in_neighborhoods (const EntityHandle tri)
 

Private Attributes

OrientedBoxTreeTooltool
 
const CartVect ray_origin
 
const CartVect ray_direction
 
const double tol
 
const int minTolInt
 
const EntityHandlerootSet
 
const EntityHandlegeomVol
 
const TagsenseTag
 
const int * desiredOrient
 
const std::vector< EntityHandle > * prevFacets
 
std::vector< std::vector< EntityHandle > > neighborhoods
 
std::vector< EntityHandleneighborhood
 

Additional Inherited Members

- Protected Attributes inherited from moab::OrientedBoxTreeTool::IntRegCtxt
std::vector< double > intersections
 
std::vector< EntityHandlesets
 
std::vector< EntityHandlefacets
 

Detailed Description

An implementation of an Intersection Registration Context for use GQT ray-firing.

This context uses a variety of tests and conditions to confirm whether or not to accumulate an intersection, to ensure robustness for ray firing.

This context only accumulates intersections that are oriented parallel to the 'desiredOrient', if provided, with respect to 'geomVol', using information in the in 'senseTag'.

This context only accumulates a single intersection out of a set of multiple intersections that fall in the same 'neighborhood', where a 'neighborhood' is defined as facets that share edges or vertices.

This context only accumulates piercing intersections. This is relevant for intersections that are found to be on an edge or vertex by the Plucker test. Such intersections are piercing if the ray has the same orientation w.r.t. to all fecets that share that edge or vertex.

This context tests intersections against a list of 'prevFacets' to prevent a ray from crossing the same facet more than once. The user is responsible for ensuring that this list is reset when appropriate.

This context accumulates all intersections within 'tol' of the start of the ray and if the number of intersections within the 'tol' of the ray start point is less than 'minTolInt', the next closest intersection. If the desired result is only the closest intersection, 'minTolInt' should be 0. This function will return all intersections, regardless of distance from the start of the ray, if 'minTolInt' is negative.

Definition at line 123 of file GeomQueryTool.cpp.

Constructor & Destructor Documentation

◆ GQT_IntRegCtxt()

moab::GQT_IntRegCtxt::GQT_IntRegCtxt ( OrientedBoxTreeTool obbtool,
const double  ray_point[3],
const double  ray_dir[3],
double  tolerance,
int  min_tolerance_intersections,
const EntityHandle root_set,
const EntityHandle geom_volume,
const Tag sense_tag,
const int *  desired_orient,
const std::vector< EntityHandle > *  prev_facets 
)
inline

Definition at line 176 of file GeomQueryTool.cpp.

186  : tool( obbtool ), ray_origin( ray_point ), ray_direction( ray_dir ), tol( tolerance ),
187  minTolInt( min_tolerance_intersections ), rootSet( root_set ), geomVol( geom_volume ), senseTag( sense_tag ),
188  desiredOrient( desired_orient ), prevFacets( prev_facets ) {
189 
190  };

Member Function Documentation

◆ add_intersection()

void moab::GQT_IntRegCtxt::add_intersection ( EntityHandle  set,
EntityHandle  tri,
double  dist,
OrientedBoxTreeTool::IntersectSearchWindow search_win 
)
private

Definition at line 525 of file GeomQueryTool.cpp.

529 {
530 
531  // Mode 1, detected by non-null neg_ray_len pointer
532  // keep the closest nonneg intersection and one negative intersection, if closer
533  if( search_win.second && search_win.first )
534  {
535  return add_mode1_intersection( set, facet, dist, search_win );
536  }
537 
538  // ---------------------------------------------------------------------------
539  /* Mode 2: Used if neg_ray_len is not specified
540  variables used: min_tol_int, tol, search_win.first
541  variables not used: neg_ray_len
542  1) if(min_tol_int<0) return all intersections
543  2) otherwise return all inside tolerance and unless there are >min_tol_int
544  inside of tolerance, return the closest outside of tolerance */
545  // Mode 2
546  // If minTolInt is less than zero, return all intersections
547  if( minTolInt < 0 && dist > -tol )
548  {
549  append_intersection( set, facet, dist );
550  neighborhoods.push_back( neighborhood );
551  return;
552  }
553 
554  // Check if the 'len' pointer is pointing into the intersection
555  // list. If this is the case, then the list contains, at that
556  // location, an intersection greater than the tolerance away from
557  // the base point of the ray.
558  int len_idx = -1;
559  if( search_win.first && search_win.first >= &intersections[0] &&
560  search_win.first < &intersections[0] + intersections.size() )
561  len_idx = search_win.first - &intersections[0];
562 
563  // If the intersection is within tol of the ray base point, we
564  // always add it to the list.
565  if( dist <= tol )
566  {
567  // If the list contains an intersection outside the tolerance...
568  if( len_idx >= 0 )
569  {
570  // If we no longer want an intersection outside the tolerance,
571  // remove it.
572  if( (int)intersections.size() >= minTolInt )
573  {
574  set_intersection( len_idx, set, facet, dist );
575  // From now on, we want only intersections within the tolerance,
576  // so update length accordingly
577  search_win.first = &tol;
578  }
579  // Otherwise appended to the list and update pointer
580  else
581  {
582  append_intersection( set, facet, dist );
583  search_win.first = &intersections[len_idx];
584  }
585  }
586  // Otherwise just append it
587  else
588  {
589  append_intersection( set, facet, dist );
590  // If we have all the intersections we want, set
591  // length such that we will only find further intersections
592  // within the tolerance
593  if( (int)intersections.size() >= minTolInt ) search_win.first = &tol;
594  }
595  }
596  // Otherwise the intersection is outside the tolerance
597  // If we already have an intersection outside the tolerance and
598  // this one is closer, replace the existing one with this one.
599  else if( len_idx >= 0 )
600  {
601  if( dist <= *search_win.first )
602  {
603  set_intersection( len_idx, set, facet, dist );
604  }
605  }
606  // Otherwise if we want an intersection outside the tolerance
607  // and don'thave one yet, add it.
608  else if( (int)intersections.size() < minTolInt )
609  {
610  append_intersection( set, facet, dist );
611  // update length. this is currently the closest intersection, so
612  // only want further intersections that are closer than this one.
613  search_win.first = &intersections.back();
614  }
615 }

References add_mode1_intersection(), append_intersection(), moab::OrientedBoxTreeTool::IntRegCtxt::intersections, minTolInt, neighborhood, neighborhoods, set_intersection(), and tol.

Referenced by register_intersection().

◆ add_mode1_intersection()

void moab::GQT_IntRegCtxt::add_mode1_intersection ( EntityHandle  set,
EntityHandle  facet,
double  dist,
OrientedBoxTreeTool::IntersectSearchWindow search_win 
)
private

Definition at line 487 of file GeomQueryTool.cpp.

491 {
492  if( 2 != intersections.size() )
493  {
494  intersections.resize( 2, 0 );
495  sets.resize( 2, 0 );
496  facets.resize( 2, 0 );
497  // must initialize this for comparison below
498  intersections[0] = -std::numeric_limits< double >::max();
499  }
500 
501  // negative case
502  if( 0.0 > dist )
503  {
504  set_intersection( 0, set, facet, dist );
505  search_win.second = &intersections[0];
506  // nonnegative case
507  }
508  else
509  {
510  set_intersection( 1, set, facet, dist );
511  search_win.first = &intersections[1];
512  // if the intersection is closer than the negative one, remove the negative one
513  if( dist < -*( search_win.second ) )
514  {
515  set_intersection( 0, 0, 0, -intersections[1] );
516  search_win.second = &intersections[0];
517  }
518  }
519  // std::cout << "add_intersection: dist = " << dist << " search_win.second=" <<
520  // *search_win.second
521  // << " search_win.first=" << *search_win.first << std::endl;
522  return;
523 }

References moab::OrientedBoxTreeTool::IntRegCtxt::facets, moab::OrientedBoxTreeTool::IntRegCtxt::intersections, set_intersection(), and moab::OrientedBoxTreeTool::IntRegCtxt::sets.

Referenced by add_intersection().

◆ append_intersection()

void moab::GQT_IntRegCtxt::append_intersection ( EntityHandle  set,
EntityHandle  facet,
double  dist 
)
private

Definition at line 465 of file GeomQueryTool.cpp.

466 {
467  intersections.push_back( dist );
468  sets.push_back( set );
469  facets.push_back( facet );
470  neighborhoods.push_back( neighborhood );
471  return;
472 }

References moab::OrientedBoxTreeTool::IntRegCtxt::facets, moab::OrientedBoxTreeTool::IntRegCtxt::intersections, neighborhood, neighborhoods, and moab::OrientedBoxTreeTool::IntRegCtxt::sets.

Referenced by add_intersection().

◆ edge_node_piercing_intersect()

bool moab::GQT_IntRegCtxt::edge_node_piercing_intersect ( const EntityHandle  tri,
const CartVect ray_dir,
const GeomUtil::intersection_type  int_type,
const std::vector< EntityHandle > &  close_tris,
const std::vector< int > &  close_senses,
const Interface MBI,
std::vector< EntityHandle > *  neighborhood_tris = 0 
)
private

Determine if a ray-edge/node intersection is glancing or piercing. This function avoids asking for upward adjacencies to prevent their creation.

Parameters
triThe intersected triangle
ray_dirThe direction of the ray
int_typeThe type of intersection (EDGE0, EDGE1, NODE2, ...)
close_trisVector of triangles in the proximity of the intersection
close_sensesVector of surface senses for tris in the proximity of the intersection
neighborhoodVector of triangles in the topological neighborhood of the intersection
Returns
True if piercing, false otherwise.

Definition at line 274 of file GeomQueryTool.cpp.

281 {
282 
283  // get the node of the triangle
284  const EntityHandle* conn = NULL;
285  int len = 0;
286  MB_CHK_ERR_RET_VAL( MBI->get_connectivity( tri, conn, len ), false );
287  // NOTE: original code is next line, but return type was wrong; returning true to get same net effect
288  if( 3 != len ) return false;
289 
290  // get adjacent tris (and keep their corresponding senses)
291  std::vector< EntityHandle > adj_tris;
292  std::vector< int > adj_senses;
293 
294  // node intersection
295  if( GeomUtil::NODE0 == int_type || GeomUtil::NODE1 == int_type || GeomUtil::NODE2 == int_type )
296  {
297 
298  // get the intersected node
299  EntityHandle node;
300  if( GeomUtil::NODE0 == int_type )
301  node = conn[0];
302  else if( GeomUtil::NODE1 == int_type )
303  node = conn[1];
304  else
305  node = conn[2];
306 
307  // get tris adjacent to node
308  for( unsigned i = 0; i < close_tris.size(); ++i )
309  {
310  const EntityHandle* con = NULL;
311  MB_CHK_ERR_RET_VAL( MBI->get_connectivity( close_tris[i], con, len ), false );
312  if( 3 != len ) return false;
313 
314  if( node == con[0] || node == con[1] || node == con[2] )
315  {
316  adj_tris.push_back( close_tris[i] );
317  adj_senses.push_back( close_senses[i] );
318  }
319  }
320  if( adj_tris.empty() )
321  {
322  std::cerr << "error: no tris are adjacent to the node" << std::endl;
323  return false;
324  }
325  // edge intersection
326  }
327  else if( GeomUtil::EDGE0 == int_type || GeomUtil::EDGE1 == int_type || GeomUtil::EDGE2 == int_type )
328  {
329 
330  // get the endpoints of the edge
331  EntityHandle endpts[2];
332  if( GeomUtil::EDGE0 == int_type )
333  {
334  endpts[0] = conn[0];
335  endpts[1] = conn[1];
336  }
337  else if( GeomUtil::EDGE1 == int_type )
338  {
339  endpts[0] = conn[1];
340  endpts[1] = conn[2];
341  }
342  else
343  {
344  endpts[0] = conn[2];
345  endpts[1] = conn[0];
346  }
347 
348  // get tris adjacent to edge
349  for( unsigned i = 0; i < close_tris.size(); ++i )
350  {
351  const EntityHandle* con = NULL;
352  MB_CHK_ERR_RET_VAL( MBI->get_connectivity( close_tris[i], con, len ), false );
353  if( 3 != len ) return false;
354 
355  // check both orientations in case close_tris are not on the same surface
356  if( ( endpts[0] == con[0] && endpts[1] == con[1] ) || ( endpts[0] == con[1] && endpts[1] == con[0] ) ||
357  ( endpts[0] == con[1] && endpts[1] == con[2] ) || ( endpts[0] == con[2] && endpts[1] == con[1] ) ||
358  ( endpts[0] == con[2] && endpts[1] == con[0] ) || ( endpts[0] == con[0] && endpts[1] == con[2] ) )
359  {
360  adj_tris.push_back( close_tris[i] );
361  adj_senses.push_back( close_senses[i] );
362  }
363  }
364  // In a 2-manifold each edge is adjacent to exactly 2 tris
365  if( 2 != adj_tris.size() )
366  {
367  std::cerr << "error: edge of a manifold must be topologically adjacent to exactly 2 tris" << std::endl;
368  MBI->list_entities( endpts, 2 );
369  return true;
370  }
371  }
372  else
373  {
374  std::cerr << "error: special case not an node/edge intersection" << std::endl;
375  return false;
376  }
377 
378  // The close tris were in proximity to the intersection. The adj_tris are
379  // topologically adjacent to the intersection (the neighborhood).
380  if( neighborhood_tris ) ( *neighborhood_tris ).assign( adj_tris.begin(), adj_tris.end() );
381 
382  // determine glancing/piercing
383  // If a desired_orientation was used in this call to ray_intersect_sets,
384  // the plucker_ray_tri_intersect will have already used it. For a piercing
385  // intersection, the normal of all tris must have the same orientation.
386  int sign = 0;
387  for( unsigned i = 0; i < adj_tris.size(); ++i )
388  {
389  const EntityHandle* con = NULL;
390  MB_CHK_ERR_RET_VAL( MBI->get_connectivity( adj_tris[i], con, len ), false );
391  if( 3 != len ) return false;
392 
393  CartVect coords[3];
394  MB_CHK_ERR_RET_VAL( MBI->get_coords( con, len, coords[0].array() ), false );
395 
396  // get normal of triangle
397  CartVect v0 = coords[1] - coords[0];
398  CartVect v1 = coords[2] - coords[0];
399  CartVect norm = adj_senses[i] * ( v0 * v1 );
400  double dot_prod = norm % ray_dir;
401 
402  // if the sign has not yet been decided, choose it
403  if( 0 == sign && 0 != dot_prod )
404  {
405  if( 0 < dot_prod )
406  sign = 1;
407  else
408  sign = -1;
409  }
410 
411  // intersection is glancing if tri and ray do not point in same direction
412  // for every triangle
413  if( 0 != sign && 0 > sign * dot_prod ) return false;
414  }
415  return true;
416 }

References moab::CartVect::array(), moab::GeomUtil::EDGE0, moab::GeomUtil::EDGE1, moab::GeomUtil::EDGE2, MB_CHK_ERR_RET_VAL, MBI, moab::GeomUtil::NODE0, moab::GeomUtil::NODE1, and moab::GeomUtil::NODE2.

Referenced by register_intersection().

◆ getDesiredOrient()

virtual const int* moab::GQT_IntRegCtxt::getDesiredOrient ( )
inlinevirtual

Reimplemented from moab::OrientedBoxTreeTool::IntRegCtxt.

Definition at line 199 of file GeomQueryTool.cpp.

200  {
201  return desiredOrient;
202  };

References desiredOrient.

◆ in_neighborhoods()

bool moab::GQT_IntRegCtxt::in_neighborhoods ( const EntityHandle  tri)
private

Definition at line 248 of file GeomQueryTool.cpp.

249 {
250  bool same_neighborhood = false;
251  for( unsigned i = 0; i < neighborhoods.size(); ++i )
252  {
253  if( neighborhoods[i].end() != find( neighborhoods[i].begin(), neighborhoods[i].end(), tri ) )
254  {
255  same_neighborhood = true;
256  continue;
257  }
258  }
259  return same_neighborhood;
260 }

References neighborhoods.

Referenced by register_intersection().

◆ in_prevFacets()

bool moab::GQT_IntRegCtxt::in_prevFacets ( const EntityHandle  tri)
private

Definition at line 243 of file GeomQueryTool.cpp.

244 {
245  return ( prevFacets && ( ( *prevFacets ).end() != find( ( *prevFacets ).begin(), ( *prevFacets ).end(), tri ) ) );
246 }

References prevFacets.

Referenced by register_intersection().

◆ register_intersection()

ErrorCode moab::GQT_IntRegCtxt::register_intersection ( EntityHandle  set,
EntityHandle  triangle,
double  distance,
OrientedBoxTreeTool::IntersectSearchWindow search_win,
GeomUtil::intersection_type  int_type 
)
virtual

Reimplemented from moab::OrientedBoxTreeTool::IntRegCtxt.

Definition at line 418 of file GeomQueryTool.cpp.

423 {
424  // Do not accept intersections if they are in the vector of previously intersected
425  // facets.
426  if( in_prevFacets( t ) ) return MB_SUCCESS;
427 
428  // Do not accept intersections if they are in the neighborhood of previous
429  // intersections.
430  if( in_neighborhoods( t ) ) return MB_SUCCESS;
431 
432  neighborhood.clear();
433 
434  // Handle special case of edge/node intersection. Accept piercing
435  // intersections and reject glancing intersections.
436  // The edge_node_intersection function needs to know surface sense wrt volume.
437  // A less-robust implementation could work without sense information.
438  // Would it ever be useful to accept a glancing intersection?
439  if( GeomUtil::INTERIOR != int_type && rootSet && geomVol && senseTag )
440  {
441  // get triangles in the proximity of the intersection
442  std::vector< EntityHandle > close_tris;
443  std::vector< int > close_senses;
445  close_tris, close_senses ),
446  "failed to get close triangles" );
447 
448  if( !edge_node_piercing_intersect( t, ray_direction, int_type, close_tris, close_senses,
450  return MB_SUCCESS;
451  }
452  else
453  {
454  neighborhood.push_back( t );
455  }
456 
457  // NOTE: add_intersection may modify the 'neg_ray_len' and 'nonneg_ray_len'
458  // members, which will affect subsequent calls to ray_tri_intersect
459  // in this loop.
460  add_intersection( set, t, int_dist, search_win );
461 
462  return MB_SUCCESS;
463 }

References add_intersection(), edge_node_piercing_intersect(), geomVol, moab::OrientedBoxTreeTool::get_close_tris(), moab::OrientedBoxTreeTool::get_moab_instance(), in_neighborhoods(), in_prevFacets(), moab::GeomUtil::INTERIOR, MB_CHK_SET_ERR, MB_SUCCESS, neighborhood, ray_direction, ray_origin, rootSet, senseTag, tol, and tool.

◆ set_intersection()

void moab::GQT_IntRegCtxt::set_intersection ( int  len_idx,
EntityHandle  set,
EntityHandle  facet,
double  dist 
)
private

Definition at line 474 of file GeomQueryTool.cpp.

475 {
476  intersections[len_idx] = dist;
477  sets[len_idx] = set;
478  facets[len_idx] = facet;
479  return;
480 }

References moab::OrientedBoxTreeTool::IntRegCtxt::facets, moab::OrientedBoxTreeTool::IntRegCtxt::intersections, and moab::OrientedBoxTreeTool::IntRegCtxt::sets.

Referenced by add_intersection(), and add_mode1_intersection().

◆ update_orient()

ErrorCode moab::GQT_IntRegCtxt::update_orient ( EntityHandle  set,
int *  surfTriOrient 
)
virtual

Reimplemented from moab::OrientedBoxTreeTool::IntRegCtxt.

Definition at line 205 of file GeomQueryTool.cpp.

206 {
207  // Get desired orientation of surface wrt volume. Use this to return only
208  // exit or entrance intersections.
209  if( geomVol && senseTag && desiredOrient && surfTriOrient )
210  {
211  if( 1 != *desiredOrient && -1 != *desiredOrient )
212  {
213  std::cerr << "error: desired orientation must be 1 (forward) or -1 (reverse)" << std::endl;
214  }
215  EntityHandle vols[2];
217  "failed to get sense tag data" );
218  if( vols[0] == vols[1] )
219  {
220  std::cerr << "error: surface has positive and negative sense wrt same volume" << std::endl;
221  return MB_FAILURE;
222  }
223  // surfTriOrient will be used by plucker_ray_tri_intersect to avoid
224  // intersections with wrong orientation.
225  if( *geomVol == vols[0] )
226  {
227  *surfTriOrient = *desiredOrient * 1;
228  }
229  else if( *geomVol == vols[1] )
230  {
231  *surfTriOrient = *desiredOrient * ( -1 );
232  }
233  else
234  {
235  assert( false );
236  return MB_FAILURE;
237  }
238  }
239 
240  return MB_SUCCESS;
241 }

References desiredOrient, geomVol, moab::OrientedBoxTreeTool::get_moab_instance(), MB_CHK_SET_ERR, MB_SUCCESS, senseTag, moab::Interface::tag_get_data(), and tool.

Member Data Documentation

◆ desiredOrient

const int* moab::GQT_IntRegCtxt::desiredOrient
private

Definition at line 141 of file GeomQueryTool.cpp.

Referenced by getDesiredOrient(), and update_orient().

◆ geomVol

const EntityHandle* moab::GQT_IntRegCtxt::geomVol
private

Definition at line 138 of file GeomQueryTool.cpp.

Referenced by register_intersection(), and update_orient().

◆ minTolInt

const int moab::GQT_IntRegCtxt::minTolInt
private

Definition at line 134 of file GeomQueryTool.cpp.

Referenced by add_intersection().

◆ neighborhood

std::vector< EntityHandle > moab::GQT_IntRegCtxt::neighborhood
private

Definition at line 152 of file GeomQueryTool.cpp.

Referenced by add_intersection(), append_intersection(), and register_intersection().

◆ neighborhoods

std::vector< std::vector< EntityHandle > > moab::GQT_IntRegCtxt::neighborhoods
private

Definition at line 151 of file GeomQueryTool.cpp.

Referenced by add_intersection(), append_intersection(), and in_neighborhoods().

◆ prevFacets

const std::vector< EntityHandle >* moab::GQT_IntRegCtxt::prevFacets
private

Definition at line 147 of file GeomQueryTool.cpp.

Referenced by in_prevFacets().

◆ ray_direction

const CartVect moab::GQT_IntRegCtxt::ray_direction
private

Definition at line 130 of file GeomQueryTool.cpp.

Referenced by register_intersection().

◆ ray_origin

const CartVect moab::GQT_IntRegCtxt::ray_origin
private

Definition at line 129 of file GeomQueryTool.cpp.

Referenced by register_intersection().

◆ rootSet

const EntityHandle* moab::GQT_IntRegCtxt::rootSet
private

Definition at line 137 of file GeomQueryTool.cpp.

Referenced by register_intersection().

◆ senseTag

const Tag* moab::GQT_IntRegCtxt::senseTag
private

Definition at line 139 of file GeomQueryTool.cpp.

Referenced by register_intersection(), and update_orient().

◆ tol

const double moab::GQT_IntRegCtxt::tol
private

Definition at line 131 of file GeomQueryTool.cpp.

Referenced by add_intersection(), and register_intersection().

◆ tool

OrientedBoxTreeTool* moab::GQT_IntRegCtxt::tool
private

Definition at line 128 of file GeomQueryTool.cpp.

Referenced by register_intersection(), and update_orient().


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