Branch data Line data Source code
1 : : #ifndef MESHKIT_MESH_OP_TEMPLATE_HPP
2 : : #define MESHKIT_MESH_OP_TEMPLATE_HPP
3 : :
4 : : #include <cassert>
5 : : #include <string>
6 : : #include <vector>
7 : : #include <set>
8 : :
9 : : #include "meshkit/Types.hpp"
10 : : #include "meshkit/Error.hpp"
11 : : #include "meshkit/MeshScheme.hpp"
12 : : #include "meshkit/ModelEnt.hpp"
13 : :
14 : : #include "CESets.hpp"
15 : : #include "meshkit/LocalTag.hpp"
16 : : #include "meshkit/Matrix.hpp"
17 : :
18 : : #include "meshkit/iMesh.hpp"
19 : : #include "meshkit/iGeom.hpp"
20 : :
21 : : namespace MeshKit {
22 : :
23 : : class MKCore;
24 : :
25 : : class MeshOpTemplate : public MeshScheme
26 : : {
27 : : public:
28 : : /* \brief Constructor
29 : : *
30 : : * Create a new MeshOpTemplate instance
31 : : * \param impl the iGeom instance handle for the Geom
32 : : */
33 : : MeshOpTemplate(MKCore *mkcore, const MEntVector &me_vec);
34 : :
35 : : /* \brief Destructor
36 : : */
37 : : virtual ~MeshOpTemplate();
38 : :
39 : : /**\brief Get class name */
40 : : static const char* name();
41 : :
42 : : /**\brief Function returning whether this scheme can mesh entities of t
43 : : * the specified dimension.
44 : : *\param dim entity dimension
45 : : */
46 : : static bool can_mesh(iBase_EntityType dim);
47 : :
48 : : /** \brief Function returning whether this scheme can mesh the specified entity
49 : : *
50 : : * Used by MeshOpFactory to find scheme for an entity.
51 : : * \param me ModelEnt being queried
52 : : * \return If true, this scheme can mesh the specified ModelEnt
53 : : */
54 : : static bool can_mesh(ModelEnt *me);
55 : :
56 : : /**\brief Get list of mesh entity types that can be generated.
57 : : *\return array terminated with \c moab::MBMAXTYPE
58 : : */
59 : : static const moab::EntityType* output_types();
60 : :
61 : : /** \brief Return the mesh entity types operated on by this scheme
62 : : * \return array terminated with \c moab::MBMAXTYPE
63 : : */
64 : : virtual const moab::EntityType* mesh_types_arr() const;
65 : :
66 : : /** \brief Re-implemented here so we can check topological dimension of model_ent
67 : : * \param model_ent ModelEnt being added
68 : : */
69 : : virtual bool add_modelent(ModelEnt *model_ent);
70 : :
71 : : //! Setup is a no-op, but must be provided since it's pure virtual
72 : : virtual void setup_this();
73 : :
74 : : //! The only setup/execute function we need, since meshing vertices is trivial
75 : : virtual void execute_this();
76 : :
77 : : /* \brief set size
78 : : *
79 : : * \param vector with x y z size
80 : : */
81 : : void set_size(const Vector<3> &dx);
82 : :
83 : : void tag_copied_sets(const char **tag_names, const char **tag_vals,
84 : : const int num_tags);
85 : : private:
86 : : iGeom *igeomImpl;
87 : : Vector<3> s_x;
88 : : };
89 : :
90 : 462 : inline const char* MeshOpTemplate::name()
91 : : {
92 : 462 : return "MeshOpTemplate";
93 : : }
94 : :
95 : 160 : inline bool MeshOpTemplate::can_mesh(iBase_EntityType)
96 : : {
97 : : // Given just a dimension, MeshOpTemplate can't do anything since it doesn't know
98 : : // what to copy.
99 : 160 : return false;
100 : : }
101 : :
102 : 0 : inline bool MeshOpTemplate::can_mesh(ModelEnt *)
103 : : {
104 : 0 : return true;
105 : : }
106 : :
107 : 0 : inline const moab::EntityType* MeshOpTemplate::mesh_types_arr() const
108 : : {
109 : 0 : return output_types();
110 : : }
111 : :
112 : : } // namespace MeshKit
113 : : #endif
|