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