Branch data Line data Source code
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 : 3 : BSPTreePoly( const CartVect hex_corners[8] ) : faceList( 0 )
39 : : {
40 : 3 : set( hex_corners );
41 : 3 : }
42 : 24 : BSPTreePoly() : faceList( 0 ) {}
43 : 27 : ~BSPTreePoly()
44 : : {
45 : 27 : clear();
46 : 27 : }
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
|