Branch data Line data Source code
1 : :
2 : :
3 : : #include <stdlib.h>
4 : : #include <stdio.h>
5 : : #include <assert.h>
6 : : #include <string>
7 : : #include <iostream>
8 : : #include <fstream>
9 : : #include <string.h>
10 : : #include <limits.h>
11 : :
12 : : #include <iGeom.h>
13 : : #include <iMesh.h>
14 : : #include <set>
15 : : #include <iRel.h>
16 : : #include <vector>
17 : : #include "meshkit/MKCore.hpp"
18 : : #include "meshkit/MeshScheme.hpp"
19 : :
20 : :
21 : : namespace MeshKit
22 : : {
23 : :
24 : : using namespace std;
25 : :
26 : : /** \class SurfaceFacetMeshReader SurfaceFacetMeshReader.hpp "meshkit/SurfaceFacetMeshReader.hpp"
27 : : * \brief A class for generating facet-based mesh of geometric surfaces
28 : : * INPUT: one or more ModelEnts representing geometric surfaces
29 : : * MESH TYPE(S): MBEDGE, MBVERTEX, MBTRI
30 : : * OUTPUT: a set of triangles, edges and verticesfor each ModelEnt
31 : : * DEPENDENCIES: meshkit build with iGeom interface
32 : : *
33 : : * This class uses the facets generated for the visualization of solid models in typical CAD
34 : : * software to represent a geometric surface as mesh. Upon execution, this class will call for
35 : : * the facet data and store it as part of the ModelEnt's mesh.
36 : : */
37 : : class SurfaceFacetMeshReader : public MeshScheme
38 : : {
39 : : public:
40 : : /** \brief Construction function for the Solid CAD Surface Mesher
41 : : */
42 : : SurfaceFacetMeshReader(MKCore *mk, const MEntVector &ments);
43 : :
44 : : /** \brief Decstructor function for the Solid CAD Surface Mesher
45 : : */
46 : : ~SurfaceFacetMeshReader();
47 : :
48 : : virtual void setup_this();
49 : :
50 : : virtual void execute_this();
51 : :
52 : : //Functions needed to register the new meshing class in MK
53 : :
54 : : /** \brief Function returning whether this scheme can mesh entities of the
55 : : * specified dimension
56 : : * \param dim entity dimension
57 : : */
58 : 160 : static bool can_mesh(iBase_EntityType dim)
59 : 160 : { return iBase_FACE == dim; }
60 : :
61 : : /** \brief Function returning whether this scheme can mesh the specified entity
62 : : *
63 : : * Used by MeshOpFactory to find scheme for an entity.
64 : : * \param me ModelEnt being queried
65 : : * \return If true, this scheme can mesh the specified ModelEnt
66 : : */
67 : 0 : static bool can_mesh(ModelEnt *me)
68 : 0 : { return canmesh_face(me); }
69 : :
70 : : /** \brief Get the class name */
71 : 262 : static const char* name()
72 : 262 : {return "SurfaceFacetMeshReader";}
73 : :
74 : : /** \brief Function that names the output types of this meshing class
75 : : * \return array terminated with \c moab::MBMAXTYPE
76 : : */
77 : : static const moab::EntityType* output_types();
78 : :
79 : 0 : virtual const moab::EntityType* mesh_types_arr() const
80 : 0 : { return output_types(); }
81 : :
82 : : void set_mesh_params(double faceting_tolerance=0, double geom_resabs=0);
83 : :
84 : : private:
85 : : double facet_tol;
86 : : double geom_res;
87 : : MKCore *mk;
88 : :
89 : : /** \brief Function to for creating triangles and adding them to the ModelEntity's meshset
90 : : * \param surf ModelEntity for the surface to be meshed.
91 : : */
92 : : void facet(ModelEnt *surf);
93 : :
94 : : double vtx2vtx_dist( iGeom::EntityHandle vtx1, iMesh::EntityHandle vtx2);
95 : : };
96 : :
97 : : }
|