Loading [MathJax]/extensions/tex2jax.js
Mesh Oriented datABase  (version 5.5.1)
An array-based unstructured mesh library
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
BSPTreePoly.hpp
Go to the documentation of this file.
1 #ifndef MOAB_BSP_TREE_POLY_HPP 2 #define MOAB_BSP_TREE_POLY_HPP 3  4 #include "moab/Types.hpp" 5 #include <vector> 6  7 namespace moab 8 { 9  10 class CartVect; 11  12 /**\brief Convex polyhedron 13  * 14  * This class is used to represent the convex polyhedron that bounds 15  * a node in a general plane-based BSP-tree. 16  */ 17 class BSPTreePoly 18 { 19  public: 20  struct Vertex; 21  struct VertexUse; 22  struct Edge; 23  struct EdgeUse; 24  struct Face; 25  26  private: 27  Face* faceList; 28  29  void set_vertex_marks( int value ); 30  31  BSPTreePoly( const BSPTreePoly& copy ); // not implemented 32  BSPTreePoly& operator=( const BSPTreePoly& copy ); // not implemented 33  34  public: 35  /**\brief Initialize as a planar-faced hexahedron 36  *\param hex_corners Corner coordinates for a hexahedron, in Exodus/Patran order 37  */ 38  BSPTreePoly( const CartVect hex_corners[8] ) : faceList( 0 ) 39  { 40  set( hex_corners ); 41  } 42  BSPTreePoly() : faceList( 0 ) {} 43  ~BSPTreePoly() 44  { 45  clear(); 46  } 47  48  /**\brief Initialize as a planar-faced hexahedron 49  *\param hex_corners Corner coordinates for a hexahedron, in Exodus/Patran order 50  */ 51  ErrorCode set( const CartVect hex_corners[8] ); 52  void clear(); 53  54  /**\brief Get handles for faces */ 55  void get_faces( std::vector< const Face* >& face_list ) const; 56  /**\brief Get corner coordinates for a face */ 57  void get_vertices( const Face* face, std::vector< CartVect >& vertices ) const; 58  59  /** Intersect a plane with a polyhedron, retaining 60  * the portion of the polyhedron below the plane. 61  * This will fail if polyhedron is not convex. 62  */ 63  bool cut_polyhedron( const CartVect& plane_normal, double plane_coeff ); 64  65  /** Test if a point is contained in the polyhedron. 66  * 67  *\NOTE algorithm assumes *convex* polyhedron. 68  */ 69  bool is_point_contained( const CartVect& point ) const; 70  71  //! Assumes planar faces 72  double volume() const; 73  74  // Check that data structure is consistent and represents 75  // a closed polyhedron 76  bool is_valid() const; 77  78  /** For debugging, does nothing unless debug feature is enabled */ 79  static void reset_debug_ids(); 80 }; 81  82 } // namespace moab 83  84 #endif