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 : : namespace MeshKit
21 : : {
22 : :
23 : : using namespace std;
24 : :
25 : : /** \class SolidCurveMesher SolidCurveMesher.hpp "meshkit/SolidCurveMesher.hpp"
26 : : * \brief A class for generating facet-based mesh of geometric curves.
27 : : * INPUT: one or more ModelEnts representing geometric curves
28 : : * MESH TYPE(S): MBEDGE, MBVERTEX
29 : : * OUTPUT: a set of edges and vertices for each ModelEnt
30 : : * DEPENDENCIES: meshkit build with iGeom interface
31 : : *
32 : : * This class uses the facets generated for the visualization of solid models in typical CAD
33 : : * software to represent a geometric curve as mesh. Upon execution, this class will call for
34 : : * the facet data and store it as part of the ModelEnt's mesh.
35 : : */
36 : :
37 : : class CurveFacetMeshReader : public MeshScheme
38 : : {
39 : : public:
40 : : CurveFacetMeshReader(MKCore *mk, const MEntVector &ments);
41 : :
42 : : ~CurveFacetMeshReader();
43 : : private:
44 : : double facet_tol;
45 : : double geom_res;
46 : : MKCore *mk;
47 : :
48 : : /** \brief Returns the distance between an iGeom vertex and an iMesh vertex.
49 : : * \param vtx1 iGeom vertex handle
50 : : * \param vtx2 iMesh vertex handle
51 : : */
52 : : virtual double vtx2vtx_dist(iGeom::EntityHandle vtx1, iMesh::EntityHandle vtx2);
53 : :
54 : : /** \brief Returns the distance between an iMesh vertex and an iMesh vertex.
55 : : * \param vtx1 iMesh vertex handle
56 : : * \param vtx2 iMesh vertex handle
57 : : */
58 : : virtual double mvtx2mvtx_dist(iMesh::EntityHandle vtx1, iMesh::EntityHandle vtx2);
59 : :
60 : :
61 : : virtual void facet(ModelEnt *curve);
62 : :
63 : : /** \brief Sets the senses wrt all surfaces adjacent to the curve
64 : : * \param curve Pointer to the ModelEnt to be meshed
65 : : */
66 : : virtual void set_senses( ModelEnt *curve);
67 : :
68 : : public:
69 : : virtual void setup_this();
70 : : virtual void execute_this();
71 : :
72 : : /** \brief Sets the faceting tolerance and geom_reabs values. If
73 : : * this function is not run before mk->setup(). Default values
74 : : * for these parameters will be used.
75 : : * \param faceting_tolerance value to be set for the faceting tolerance
76 : : * \param geom_resabs value to be set for the geom_resabs (used for vertex proximity checks)
77 : : */
78 : : void set_mesh_params(double faceting_tolerance = 0, double geom_resabs = 0);
79 : :
80 : : /** \brief Function returning whether this scheme can mesh entities of the
81 : : * specified dimension
82 : : * \param dim entity dimension
83 : : */
84 : 160 : static bool can_mesh(iBase_EntityType dim)
85 : 160 : { return iBase_EDGE == dim; }
86 : :
87 : : /** \brief Function returning whether this scheme can mesh the specified entity
88 : : *
89 : : * Used by MeshOpFactory to find scheme for an entity.
90 : : * \param me ModelEnt being queried
91 : : * \return If true, this scheme can mesh the specified ModelEnt
92 : : */
93 : 0 : static bool can_mesh(ModelEnt *me)
94 : 0 : { return canmesh_edge(me); }
95 : :
96 : : /** \brief Get the class name */
97 : 303 : static const char* name()
98 : 303 : {return "CurveFacetMeshReader";}
99 : :
100 : : /** \brief Function that names the output types of this meshing class
101 : : * \return array terminated with \c moab::MBMAXTYPE
102 : : */
103 : : static const moab::EntityType* output_types();
104 : :
105 : 0 : virtual const moab::EntityType* mesh_types_arr() const
106 : 0 : { return output_types(); }
107 : :
108 : : };
109 : :
110 : :
111 : : }
|