MOAB: Mesh Oriented datABase  (version 5.2.1)
BSPTreePoly.hpp
Go to the documentation of this file.
00001 #ifndef MOAB_BSP_TREE_POLY_HPP
00002 #define MOAB_BSP_TREE_POLY_HPP
00003 
00004 #include "moab/Types.hpp"
00005 #include <vector>
00006 
00007 namespace moab
00008 {
00009 
00010 class CartVect;
00011 
00012 /**\brief Convex polyhedron
00013  *
00014  * This class is used to represent the convex polyhedron that bounds
00015  * a node in a general plane-based BSP-tree.
00016  */
00017 class BSPTreePoly
00018 {
00019   public:
00020     struct Vertex;
00021     struct VertexUse;
00022     struct Edge;
00023     struct EdgeUse;
00024     struct Face;
00025 
00026   private:
00027     Face* faceList;
00028 
00029     void set_vertex_marks( int value );
00030 
00031     BSPTreePoly( const BSPTreePoly& copy );             // not implemented
00032     BSPTreePoly& operator=( const BSPTreePoly& copy );  // not implemented
00033 
00034   public:
00035     /**\brief Initialize as a planar-faced hexahedron
00036      *\param hex_corners Corner coordinates for a hexahedron, in Exodus/Patran order
00037      */
00038     BSPTreePoly( const CartVect hex_corners[8] ) : faceList( 0 )
00039     {
00040         set( hex_corners );
00041     }
00042     BSPTreePoly() : faceList( 0 ) {}
00043     ~BSPTreePoly()
00044     {
00045         clear();
00046     }
00047 
00048     /**\brief Initialize as a planar-faced hexahedron
00049      *\param hex_corners Corner coordinates for a hexahedron, in Exodus/Patran order
00050      */
00051     ErrorCode set( const CartVect hex_corners[8] );
00052     void clear();
00053 
00054     /**\brief Get handles for faces */
00055     void get_faces( std::vector< const Face* >& face_list ) const;
00056     /**\brief Get corner coordinates for a face */
00057     void get_vertices( const Face* face, std::vector< CartVect >& vertices ) const;
00058 
00059     /** Intersect a plane with a polyhedron, retaining
00060      * the portion of the polyhedron below the plane.
00061      * This will fail if polyhedron is not convex.
00062      */
00063     bool cut_polyhedron( const CartVect& plane_normal, double plane_coeff );
00064 
00065     /** Test if a point is contained in the polyhedron.
00066      *
00067      *\NOTE algorithm assumes *convex* polyhedron.
00068      */
00069     bool is_point_contained( const CartVect& point ) const;
00070 
00071     //! Assumes planar faces
00072     double volume() const;
00073 
00074     // Check that data structure is consistent and represents
00075     // a closed polyhedron
00076     bool is_valid() const;
00077 
00078     /** For debugging, does nothing unless debug feature is enabled */
00079     static void reset_debug_ids();
00080 };
00081 
00082 }  // namespace moab
00083 
00084 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines