Branch data Line data Source code
1 : : #ifndef MESHKIT_CAMAL_TET_MESHER_HPP
2 : : #define MESHKIT_CAMAL_TET_MESHER_HPP
3 : :
4 : : #include "meshkit/iGeom.hpp"
5 : : #include <set>
6 : : #include <vector>
7 : : #include "meshkit/MeshScheme.hpp"
8 : : #include "moab/Interface.hpp"
9 : :
10 : : /** \file CAMALTetMesher.hpp
11 : : */
12 : :
13 : : #include "meshkit/MeshScheme.hpp"
14 : :
15 : : class CMLTetMesher;
16 : :
17 : : namespace MeshKit
18 : : {
19 : :
20 : : class MKCore;
21 : :
22 : : /** \class CAMALTetMesher CAMALTetMesher.hpp "meshkit/CAMALTetMesher.hpp"
23 : : * \brief The wrapper for the CAMAL tet mesher
24 : : *
25 : : * This class calls the CAMAL tet mesher and converts mesh to/from the required format for that mesher.
26 : : */
27 : : class CAMALTetMesher : public MeshScheme
28 : : {
29 : : public:
30 : : /** \brief Constructor
31 : : * \param mk_core MKCore instance
32 : : * \param me_vec ModelEnts this mesher will be applied to
33 : : */
34 : : CAMALTetMesher(MKCore *mk_core, const MEntVector &me_vec);
35 : :
36 : : /** \brief Destructor
37 : : */
38 : : ~CAMALTetMesher();
39 : :
40 : : /** \brief Setup function for this mesher, simply calls setup_boundary
41 : : */
42 : : virtual void setup_this();
43 : :
44 : : /** \brief Execute the mesher (calling CAMAL mesher on this volume)
45 : : */
46 : : virtual void execute_this();
47 : :
48 : : /** \brief Static list of mesh types treated by this scheme
49 : : */
50 : : static moab::EntityType meshTps[];
51 : :
52 : :
53 : : /**\brief Get class name */
54 : 124 : static const char* name()
55 : 124 : { return "CAMALTetMesher"; }
56 : :
57 : : /**\brief Function returning whether this scheme can mesh entities of t
58 : : * the specified dimension.
59 : : *\param dim entity dimension
60 : : */
61 : 160 : static bool can_mesh(iBase_EntityType dim)
62 : 160 : { return iBase_REGION == dim; }
63 : :
64 : : /** \brief Function returnign whether this scheme can mesh the specified entity
65 : : *
66 : : * Used by MeshOpFactory to find scheme for an entity.
67 : : * \param me ModelEnt being queried
68 : : * \return If true, this scheme can mesh the specified ModelEnt
69 : : */
70 : 0 : static bool can_mesh(ModelEnt *me)
71 : 0 : { return canmesh_region(me); }
72 : :
73 : : /**\brief Get list of mesh entity types that can be generated.
74 : : *\return array terminated with \c moab::MBMAXTYPE
75 : : */
76 : 40 : static const moab::EntityType* output_types()
77 : 40 : { return meshTps; }
78 : :
79 : : /** \brief Return the mesh entity types operated on by this scheme
80 : : * \return array terminated with \c moab::MBMAXTYPE
81 : : */
82 : 0 : virtual const moab::EntityType* mesh_types_arr() const
83 : 0 : { return output_types(); }
84 : :
85 : : private:
86 : :
87 : : /** \brief Construct a MeshOp that can generate triangle elements
88 : : * \return A MeshOp that can generate tri elements
89 : : */
90 : : MeshOp *get_tri_mesher();
91 : :
92 : : /** \brief print debug information and save input boundary mesh for CAMAL library
93 : : */
94 : : void print_debug(ModelEnt *me, std::vector<double> &coords,
95 : : moab::Range &bdy_vrange,
96 : : std::vector<moab::EntityHandle> &bdy,
97 : : std::vector<int> &group_sizes,
98 : : std::vector<int> &bdy_ids);
99 : :
100 : : /** \brief CAMAL mesher object called by this mesher
101 : : */
102 : : CMLTetMesher *cmlTetMesher;
103 : : };
104 : :
105 : : } // namespace MeshKit
106 : :
107 : : #endif
|