gmsh-TingyuanDoc  0.1
An Open-Source Timing-driven Analytical Mixed-size FPGA Placer
GModel.h
Go to the documentation of this file.
1 // Gmsh - Copyright (C) 1997-2022 C. Geuzaine, J.-F. Remacle
2 //
3 // See the LICENSE.txt file in the Gmsh root directory for license information.
4 // Please report all issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
5 
6 #ifndef GMODEL_H
7 #define GMODEL_H
8 
9 #include <algorithm>
10 #include <vector>
11 #include <set>
12 #include <map>
13 #include <string>
14 #include <unordered_map>
15 #include <functional>
16 #include "GVertex.h"
17 #include "GEdge.h"
18 #include "GFace.h"
19 #include "GRegion.h"
20 #include "SPoint3.h"
21 #include "SBoundingBox3d.h"
22 #include "MFaceHash.h"
23 #include "MEdgeHash.h"
24 
25 #define hashmapMFace \
26  std::unordered_map<MFace, std::size_t, MFaceHash, MFaceEqual>
27 #define hashmapMEdge \
28  std::unordered_map<MEdge, std::size_t, MEdgeHash, MEdgeEqual>
29 
30 template <class scalar> class simpleFunction;
31 
32 class GEO_Internals;
33 class OCC_Internals;
34 class ACIS_Internals;
35 class Parasolid_Internals;
36 class smooth_normals;
37 class FieldManager;
38 class gLevelset;
39 class discreteFace;
40 class discreteRegion;
41 class MElementOctree;
42 
43 // A geometric model. The model is a "not yet" non-manifold B-Rep.
44 class GModel {
45 private:
46  std::multimap<std::pair<const std::vector<int>, const std::vector<int> >,
47  std::pair<const std::string, const std::vector<int> > >
49  std::set<GRegion *, GEntityPtrLessThan> _chainRegions;
50  std::set<GFace *, GEntityPtrLessThan> _chainFaces;
51  std::set<GEdge *, GEntityPtrLessThan> _chainEdges;
52  std::set<GVertex *, GEntityPtrLessThan> _chainVertices;
55  // the maximum vertex and element id number in the mesh
58 
59 private:
60  int _readMSH2(const std::string &name);
61  int _writeMSH2(const std::string &name, double version, bool binary,
62  bool saveAll, bool saveParametric, double scalingFactor,
63  int elementStartNum, int saveSinglePartition, bool append,
64  bool renumberVertices);
65  int _writePartitionedMSH2(const std::string &baseName, bool binary,
66  bool saveAll, bool saveParametric,
67  double scalingFactor);
68  int _readMSH3(const std::string &name);
69  int _writeMSH3(const std::string &name, double version, bool binary,
70  bool saveAll, bool saveParametric, double scalingFactor,
71  int elementStartNum, int saveSinglePartition, bool append);
72  int _writePartitionedMSH3(const std::string &baseName, double version,
73  bool binary, bool saveAll, bool saveParametric,
74  double scalingFactor);
75  int _readMSH4(const std::string &name);
76  int _writeMSH4(const std::string &name, double version, bool binary,
77  bool saveAll, bool saveParametric, double scalingFactor,
78  bool append, int partitionToSave = 0,
79  std::map<GEntity*, SBoundingBox3d> *entityBounds = nullptr);
80  int _writePartitionedMSH4(const std::string &baseName, double version,
81  bool binary, bool saveAll, bool saveParametric,
82  double scalingFactor);
83  int _writeX3dFile(FILE* fp, bool saveAll,
84  double scalingFactor, int x3dsurfaces, int x3dedges,
85  int x3dvertices, int x3dcolorize,
86  std::vector<GFace *> &customFaces);
87 
88 protected:
89  // the name of the model
90  std::string _name;
91 
92  // the name of the file the model was read from
93  std::string _fileName;
94  std::set<std::string> _fileNames;
95 
96  // the visibility flag
97  char _visible;
98 
99  // vertex and element caches to speed-up direct access by tag (mostly
100  // used for post-processing I/O)
101  std::vector<MVertex *> _vertexVectorCache;
102  std::map<int, MVertex *> _vertexMapCache;
103  std::vector<std::pair<MElement *, int> > _elementVectorCache;
104  std::map<int, std::pair<MElement *, int> > _elementMapCache;
105  std::map<int, int> _elementIndexCache;
106 
107  // ghost cell information (stores partitions for each element acting
108  // as a ghost cell)
109  // /!\ Use only for compatibility with mesh format msh2 and msh3
110  std::multimap<MElement *, short> _ghostCells;
111 
112  // an octree for fast mesh element lookup
114 
115  // global cache storage of discrete curvatures
116  std::map<MVertex *, std::pair<SVector3, SVector3> > _curvatures;
117 
118  // GEO (Gmsh native) model internal data
120  // OpenCASCADE model internal data
122  // ACIS model internal data
123  ACIS_Internals *_acis_internals;
124  // Parasolid model internal data
125  Parasolid_Internals *_parasolid_internals;
126 
127  // characteristic length (mesh size) fields
129 
130  // entity that is currently being meshed (used for error reporting)
132 
133  // last entities/vertices where a meshing error has been reported
134  std::vector<GEntity *> _lastMeshEntityError;
135  std::vector<MVertex *> _lastMeshVertexError;
136 
137  // index of the current model (in the static list of all loaded
138  // models)
139  static int _current;
140 
141  // the sets of geometrical regions, faces, edges and vertices in the
142  // model
143  std::set<GRegion *, GEntityPtrLessThan> regions;
144  std::set<GFace *, GEntityPtrLessThan> faces;
145  std::set<GEdge *, GEntityPtrLessThan> edges;
146  std::set<GVertex *, GEntityPtrLessThan> vertices;
147 
148  // map between the pair <dimension, elementary or physical number>
149  // and an optional associated name
150  std::map<std::pair<int, int>, std::string> _physicalNames, _elementaryNames;
151 
152  // the set of all used mesh partition numbers
153  std::size_t _numPartitions;
154 
155  // additional attributes (e.g. stored in extra sections of MSH files)
156  std::map<std::string, std::vector<std::string> > _attributes;
157 
158 protected:
159  // store the elements given in the map (indexed by elementary region
160  // number) into the model, creating discrete geometrical entities on
161  // the fly if needed
162  void _storeElementsInEntities(std::map<int, std::vector<MElement *> > &map);
163 
164  // store the parent's pointer back into MSubElements (replacing numeric id)
165  void _storeParentsInSubElements(std::map<int, std::vector<MElement *> > &map);
166 
167  // loop over all vertices connected to elements and associate
168  // geometrical entity
170 
171  // store the vertices in the geometrical entity they are associated
172  // with, and delete those that are not associated with any entity
173  void _storeVerticesInEntities(std::map<int, MVertex *> &vertices);
174  void _storeVerticesInEntities(std::vector<MVertex *> &vertices);
175 
176  // store the physical tags in the geometrical entities
177  void
179  std::map<int, std::map<int, std::string> > &map);
180 
181 public:
182  // region, face, edge and vertex iterators
183  typedef std::set<GRegion *, GEntityPtrLessThan>::iterator riter;
184  typedef std::set<GFace *, GEntityPtrLessThan>::iterator fiter;
185  typedef std::set<GEdge *, GEntityPtrLessThan>::iterator eiter;
186  typedef std::set<GVertex *, GEntityPtrLessThan>::iterator viter;
187 
188  typedef std::set<GRegion *, GEntityPtrLessThan>::const_iterator const_riter;
189  typedef std::set<GFace *, GEntityPtrLessThan>::const_iterator const_fiter;
190  typedef std::set<GEdge *, GEntityPtrLessThan>::const_iterator const_eiter;
191  typedef std::set<GVertex *, GEntityPtrLessThan>::const_iterator const_viter;
192 
193  // elementary/physical name iterator
194  typedef std::map<std::pair<int, int>, std::string>::iterator piter;
195 
196 public:
197  GModel(const std::string &name = "");
198  virtual ~GModel();
199 // Required for python bindings on Windows
200 #ifndef SWIG
201  // the static list of all loaded models
202  static std::vector<GModel *> list;
203 #endif
204 
205  // return the current model, and sets the current model index if
206  // index >= 0
207  static GModel *current(int index = -1);
208 
209  // sets a model to current
210  static int setCurrent(GModel *m);
211  int setAsCurrent() { return setCurrent(this); }
212 
213  // find a model by name; if fileName is given, return model only if it does
214  // *not* have a link to the fileName
215  static GModel *findByName(const std::string &name,
216  const std::string &fileName = "");
217 
218  // delete everything in a GModel (optionally keep name and fileName)
219  void destroy(bool keepName = false);
220 
221  // get/set global vertex/element num
222  std::size_t getMaxVertexNumber() const { return _maxVertexNum; }
223  std::size_t getMaxElementNumber() const { return _maxElementNum; }
224  void setMaxVertexNumber(std::size_t num)
225  {
226 #pragma omp atomic write
227  _maxVertexNum = _maxVertexNum > num ? _maxVertexNum : num;
228  }
229  void setMaxElementNumber(std::size_t num)
230  {
231 #pragma omp atomic write
233  }
234 
235  // increment and get global vertex/element num
237  {
238  std::size_t _myVertexNum;
239 #pragma omp atomic capture
240  {
241  ++_maxVertexNum;
242  _myVertexNum = _maxVertexNum;
243  }
244  return _myVertexNum;
245  }
247  {
248  std::size_t _myElementNum;
249 #pragma omp atomic capture
250  {
251  ++_maxElementNum;
252  _myElementNum = _maxElementNum;
253  }
254  return _myElementNum;
255  }
256 
257  // decrement global vertex num
259  {
260 #pragma omp atomic update
261  --_maxVertexNum;
262  }
263 
265  {
268  }
269  void getCheckPointedMaxNumbers(std::size_t &maxv, std::size_t &maxe) const
270  {
273  }
274 
275  // add a mesh edge or face in the global edge or face map with number "num",
276  // or number it (starting at 1) if num == 0
277  std::size_t addMEdge(MEdge &edge, std::size_t num = 0);
278  std::size_t addMFace(MFace &face, std::size_t num = 0);
279  // get the edge of face and its global number given mesh nodes (return 0 if
280  // the edge or face does not exist in the edge or face map)
281  std::size_t getMEdge(MVertex *v0, MVertex *v1, MEdge &edge);
282  std::size_t getMFace(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3,
283  MFace &face);
284  // iterate on edges and faces
285  hashmapMEdge::const_iterator firstMEdge() { return _mapEdgeNum.begin(); }
286  hashmapMEdge::const_iterator lastMEdge() { return _mapEdgeNum.end(); }
287  hashmapMFace::const_iterator firstMFace() { return _mapFaceNum.begin(); }
288  hashmapMFace::const_iterator lastMFace() { return _mapFaceNum.end(); }
289 
290  // renumber mesh vertices and elements in a continuous sequence (this
291  // invalidates the mesh caches)
292  void renumberMeshVertices();
293  void renumberMeshElements();
294 
295  // delete all the mesh-related caches (this must be called when the
296  // mesh is changed)
297  void destroyMeshCaches();
298  // delete the mesh stored in entities and call destroMeshCaches
299  void deleteMesh();
300  void deleteMesh(const std::vector<GEntity *> &entities);
301  // delete the vertex arrays used for efficient mesh drawing
302  void deleteVertexArrays();
303 
304  // remove all mesh vertex associations to geometrical entities and remove
305  // vertices from geometrical entities, then _associateEntityWithMeshVertices
306  // and _storeVerticesInEntities are called to rebuild the associations
308 
309  // access internal CAD representations
310  void createGEOInternals();
311  void createOCCInternals();
312  void createACISInternals();
316  ACIS_Internals *getACISInternals() { return _acis_internals; }
317  Parasolid_Internals *getParasolidInternals() { return _parasolid_internals; }
318  void deleteGEOInternals();
319  void deleteOCCInternals();
320  void resetOCCInternals();
321  void deleteACISInternals();
323 
324  // access characteristic length (mesh size) fields
326 
327  // get/set the model name
328  void setName(const std::string &name) { _name = name; }
329  std::string getName() const { return _name; }
330 
331  // get/set the model file name
332  void setFileName(const std::string &fileName);
333  std::string getFileName() const { return _fileName; }
334  bool hasFileName(const std::string &name) const
335  {
336  return _fileNames.find(name) != _fileNames.end();
337  }
338 
339  // get/set the visibility flag
340  char getVisibility() const { return _visible; }
341  void setVisibility(char val) { _visible = val; }
342 
343  // get the number of entities in this model
344  std::size_t getNumRegions() const { return regions.size(); }
345  std::size_t getNumFaces() const { return faces.size(); }
346  std::size_t getNumEdges() const { return edges.size(); }
347  std::size_t getNumVertices() const { return vertices.size(); }
348 
349  // quickly check if the model is empty (i.e., if it contains no
350  // entities)
351  bool empty() const;
352 
353  // get an iterator initialized to the first/last entity in this model
354  riter firstRegion() { return regions.begin(); }
355  fiter firstFace() { return faces.begin(); }
356  eiter firstEdge() { return edges.begin(); }
357  viter firstVertex() { return vertices.begin(); }
358  riter lastRegion() { return regions.end(); }
359  fiter lastFace() { return faces.end(); }
360  eiter lastEdge() { return edges.end(); }
361  viter lastVertex() { return vertices.end(); }
362  const_riter firstRegion() const { return regions.begin(); }
363  const_fiter firstFace() const { return faces.begin(); }
364  const_eiter firstEdge() const { return edges.begin(); }
365  const_viter firstVertex() const { return vertices.begin(); }
366  const_riter lastRegion() const { return regions.end(); }
367  const_fiter lastFace() const { return faces.end(); }
368  const_eiter lastEdge() const { return edges.end(); }
369  const_viter lastVertex() const { return vertices.end(); }
370 
371  // get the set of entities
372  std::set<GRegion *, GEntityPtrLessThan> getRegions() const
373  {
374  return regions;
375  };
376  std::set<GFace *, GEntityPtrLessThan> getFaces() const { return faces; };
377  std::set<GEdge *, GEntityPtrLessThan> getEdges() const { return edges; };
378  std::set<GVertex *, GEntityPtrLessThan> getVertices() const
379  {
380  return vertices;
381  };
382 
383  // find the entity with the given tag
384  GRegion *getRegionByTag(int n) const;
385  GFace *getFaceByTag(int n) const;
386  GEdge *getEdgeByTag(int n) const;
387  GVertex *getVertexByTag(int n) const;
388  GEntity *getEntityByTag(int dim, int n) const;
389 
390  // change entity tag (modifies the model entity sets)
391  bool changeEntityTag(int dim, int tag, int newTag);
392 
393  // add/remove an entity in the model
394  bool add(GRegion *r) { return regions.insert(r).second; }
395  bool add(GFace *f) { return faces.insert(f).second; }
396  bool add(GEdge *e) { return edges.insert(e).second; }
397  bool add(GVertex *v) { return vertices.insert(v).second; }
398  bool remove(GRegion *r);
399  bool remove(GFace *f);
400  bool remove(GEdge *e);
401  bool remove(GVertex *v);
402  void remove(int dim, int tag, std::vector<GEntity*> &removed,
403  bool recursive = false);
404  void remove(const std::vector<std::pair<int, int> > &dimTags,
405  std::vector<GEntity*> &removed,
406  bool recursive = false);
407  void remove();
408 
409  // snap vertices on model edges by using geometry tolerance
410  void snapVertices();
411 
412  // fill a vector containing all the entities in the model
413  void getEntities(std::vector<GEntity *> &entities, int dim = -1) const;
414 
415  // fill a vector containing all the entities in a given bounding box
416  void getEntitiesInBox(std::vector<GEntity *> &entities,
417  const SBoundingBox3d &box, int dim = -1) const;
418 
419  // get tags of entities of the boundary of the given input entities
420  bool getBoundaryTags(const std::vector<std::pair<int, int> > &inDimTags,
421  std::vector<std::pair<int, int> > &outDimTags,
422  bool combined, bool oriented = true,
423  bool recursive = false);
424 
425  // return the highest number associated with an elementary entity of
426  // a given dimension (or the highest overall if dim < 0)
427  int getMaxElementaryNumber(int dim);
428 
429  // check if there are no physical entities in the model
430  bool noPhysicalGroups();
431 
432  // return all physical groups (one map per dimension: 0-D to 3-D)
433  void
434  getPhysicalGroups(std::map<int, std::vector<GEntity *> > groups[4]) const;
435  void getPhysicalGroups(int dim,
436  std::map<int, std::vector<GEntity *> > &groups) const;
437  const std::map<std::pair<int, int>, std::string> &getPhysicalNames() const
438  {
439  return _physicalNames;
440  }
441  void setPhysicalNames(const std::map<std::pair<int, int>, std::string> &names)
442  {
443  _physicalNames = names;
444  }
445 
446  // add a physical group (made of elementary entities "tags")
447  void addPhysicalGroup(int dim, int tag, const std::vector<int> &tags);
448 
449  // remove physical groups
450  void removePhysicalGroups();
451  void removePhysicalGroup(int dim, int num);
452 
453  // return the highest number associated with a physical entity of a
454  // given dimension (or highest for all dimenions if dim < 0)
455  int getMaxPhysicalNumber(int dim);
456 
457  // get an iterator on the elementary/physical names
458  piter firstPhysicalName() { return _physicalNames.begin(); }
462 
463  // get the number of physical names
464  int numPhysicalNames() const { return (int)_physicalNames.size(); }
465 
466  // get iterators to the last physical name of each dimension
467  void getInnerPhysicalNamesIterators(std::vector<piter> &iterators);
468 
469  // associate a name with a physical entity of dimension "dim" and
470  // number "num" (returns a new number id if "num"==0)
471  int setPhysicalName(const std::string &name, int dim, int num = 0);
472  piter setPhysicalName(piter pos, const std::string &name, int dim,
473  int num = 0);
474 
475  // get the name (if any) of a given physical group of dimension
476  // "dim" and id number "num"
477  std::string getPhysicalName(int dim, int num) const;
478 
479  // remove physical name(s)
480  void removePhysicalName(const std::string &name);
481 
482  // get the number of a given physical group of dimension
483  // "dim" and name "name". return -1 if not found
484  int getPhysicalNumber(const int &dim, const std::string &name);
485 
486  // get all tags of elementary entities associated with a given physical group
487  // name
488  std::vector<int> getTagsForPhysicalName(int dim, const std::string &name);
489 
490  // set physical tags to entities in a given bounding box
491  void setPhysicalNumToEntitiesInBox(int EntityDimension, int PhysicalNumber,
492  std::vector<double> p1,
493  std::vector<double> p2);
494  void setPhysicalNumToEntitiesInBox(int EntityDimension, int PhysicalNumber,
495  const SBoundingBox3d &box);
496 
497  // get the name (if any) of a given elementary entity of dimension
498  // "dim" and id number "num"
499  std::string getElementaryName(int dim, int tag);
500  void setElementaryName(int dim, int tag, const std::string &name)
501  {
502  _elementaryNames[std::make_pair(dim, tag)] = name;
503  }
504 
505  // remove elememtary name(s)
506  void removeElementaryName(const std::string &name);
507 
508  // get the highest dimension of the GModel
509  int getDim() const;
510 
511  // get the highest dimension of the mesh in the GModel
512  int getMeshDim() const;
513 
514  // set the selection flag on all entities
515  void setSelection(int val);
516 
517  // the bounding box
518  SBoundingBox3d bounds(bool aroundVisible = false);
519 
520  // return the mesh status for the entire model
521  int getMeshStatus(bool countDiscrete = true);
522 
523  // return the total number of elements in the mesh
524  std::size_t getNumMeshElements(int dim = -1) const;
525  std::size_t getNumMeshParentElements() const;
526 
527  // get the number of each type of element in the mesh at the largest
528  // dimension and return the dimension
529  std::size_t getNumMeshElements(unsigned c[6]);
530 
531  // access a mesh element by coordinates (using an octree search)
532  MElement *getMeshElementByCoord(SPoint3 &p, SPoint3 &param, int dim = -1,
533  bool strict = true);
534  std::vector<MElement *> getMeshElementsByCoord(SPoint3 &p, int dim = -1,
535  bool strict = true);
536 
537  // access a mesh element by tag, using the element cache
539  {
540  int tag;
541  return getMeshElementByTag(n, tag);
542  }
543  MElement *getMeshElementByTag(int n, int &entityTag);
544 
545  // access temporary mesh element index
547  void setMeshElementIndex(MElement *e, int index);
548 
549  // return the total number of vertices in the mesh
550  std::size_t getNumMeshVertices(int dim = -1) const;
551 
552  // recompute _vertexVectorCache if there is a dense vertex numbering or
553  // _vertexMapCache if not.
554  void rebuildMeshVertexCache(bool onlyIfNecessary = false);
555 
556  // recompute _elementVectorCache if there is a dense element numbering or
557  // _elementMapCache if not.
558  void rebuildMeshElementCache(bool onlyIfNecessary = false);
559 
560  // access a mesh vertex by tag, using the vertex cache
561  MVertex *getMeshVertexByTag(int n);
562 
563  // add a mesh vertex to the global mesh vertex cache
565 
566  // get all the mesh vertices associated with the physical group
567  // of dimension "dim" and id number "num"
568  void getMeshVerticesForPhysicalGroup(int dim, int num,
569  std::vector<MVertex *> &);
570 
571  // index all the (used) mesh vertices in a continuous sequence,
572  // starting at 1
573  std::size_t indexMeshVertices(bool all, int singlePartition = 0,
574  bool renumber = true);
575 
576  // scale the mesh by the given factor
577  void scaleMesh(double factor);
578 
579  // set/get entity that is currently being meshed (for error reporting)
580  void setCurrentMeshEntity(GEntity *e);
582 
583  // set/get entities/vertices linked meshing errors
586  std::vector<GEntity *> getLastMeshEntityError()
587  {
588  return _lastMeshEntityError;
589  }
592  std::vector<MVertex *> getLastMeshVertexError()
593  {
594  return _lastMeshVertexError;
595  }
596 
597  // delete or reverse all invisble mesh elements
598  std::size_t removeInvisibleElements();
599  std::size_t reverseInvisibleElements();
600 
601  // the list of partitions
602  std::size_t getNumPartitions() const { return _numPartitions; }
603  void setNumPartitions(std::size_t npart) { _numPartitions = npart; }
604 
605  // partition the mesh
606  int partitionMesh(int num,
607  std::vector<std::pair<MElement *, int> > elementPartition =
608  std::vector<std::pair<MElement *, int> >());
609  // unpartition the mesh
610  int unpartitionMesh();
611  // import a mesh partitionned by a tag given by element (i.e. the old way we
612  // stored partitions) and create the new topology-based partition entitiesx
614  // write the partitioned topology file
615  int writePartitionedTopology(std::string &name);
616 
617  // /!\ Use only for compatibility with mesh format msh2 and msh3
618  std::multimap<MElement *, short> &getGhostCells() { return _ghostCells; }
619  void addGhostCells(MElement *elm, short partition)
620  {
621  _ghostCells.insert(std::make_pair(elm, partition));
622  }
623 
624  // perform various coherence tests on the mesh
625  void checkMeshCoherence(double tolerance);
626 
627  // remove duplicate mesh vertices
629  const std::vector<GEntity*> &entities =
630  std::vector<GEntity*>());
631 
632  // remove duplicate mesh elements (within an entity)
633  int removeDuplicateMeshElements(const std::vector<GEntity*> &entities =
634  std::vector<GEntity*>());
635 
636  // create a geometry (i.e. a parametrization for curves and surfaces) for the
637  // given discrete entities (or all of them if dimTags is empty)
639  const std::vector<std::pair<int, int> > &dimTags =
640  std::vector<std::pair<int, int> >());
641 
642  // make discrete entities simply connected
645 
646  // create topology from mesh
647  void createTopologyFromMesh();
648 
649  // align periodic boundaries
651 
652  // a container for smooth normals
654 
655  // mesh the model
656  int mesh(int dimension);
657 
658  // adapt 3d mesh
659  int adaptMesh();
660 
661  // adapt the mesh anisotropically using metrics that are computed from a set
662  // of functions f(x,y,z). The algorithm first generate a mesh if no one is
663  // available; see the cpp for parameter documentation
664  int adaptMesh(std::vector<int> technique,
665  std::vector<simpleFunction<double> *> f,
666  std::vector<std::vector<double> > parameters, int niter,
667  bool meshAll = false);
668 
669  // ensure that the Jacobian of all volume elements is positive
670  bool setAllVolumesPositive();
672 
673  // make the mesh a high order mesh at order N (linear is 1 if the high order
674  // points are not placed on the geometry of the model; incomplete is 1 if
675  // incomplete basis are used)
676  int setOrderN(int order, int linear, int incomplete, int onlyVisible);
677 
678  // refine the mesh by splitting all elements
679  int refineMesh(int linear, bool splitIntoQuads = false,
680  bool splitIntoHexas = false, bool barycentric = false);
681 
682  // optimize the mesh
683  int optimizeMesh(const std::string &how, bool force = false, int niter = 1);
684 
685  // recombine the mesh
686  int recombineMesh();
687 
688  // fill the vertex arrays, given the current option and data
689  bool fillVertexArrays();
690 
691  // reclassify a surface mesh, using an angle threshold to tag edges and faces
692  void classifySurfaces(double angleThreshold, bool includeBoundary,
693  bool forReparametrization, double curveAngleThreshold);
694 
695  // build a new GModel by cutting the elements crossed by the levelset ls
696  // if cutElem is set to false, split the model without cutting the elements
697  GModel *buildCutGModel(gLevelset *ls, bool cutElem = true,
698  bool saveTri = false);
699 
700  // store mesh elements of a chain in a new elementary and physical entity
701  void storeChain(int dim, std::map<int, std::vector<MElement *> > &entityMap,
702  std::map<int, std::map<int, std::string> > &physicalMap);
703 
704  // request homology computation
705  void addHomologyRequest(const std::string &type,
706  const std::vector<int> &domain,
707  const std::vector<int> &subdomain,
708  const std::vector<int> &dim);
709  void clearHomologyRequests();
710  void computeHomology(std::vector<std::pair<int, int> > &newPhysicals);
711 
712  // mesh size callback
713  std::function<double(int, int, double, double, double, double)> lcCallback;
714 
715  // compute automatic sizing field from curvature
716  void computeSizeField();
717 
718  // access global cache of discrete curvatures
719  std::map<MVertex *, std::pair<SVector3, SVector3> > &getCurvatures()
720  {
721  return _curvatures;
722  }
723 
724  // reverse engineering of extruded shapes
725  bool addAutomaticExtrusionConstraints(const std::vector<int> &numElements,
726  const std::vector<double> &heights,
727  const bool recombine,
728  const std::vector<int> &regionTag);
729 
730  // get additional attributes
731  std::map<std::string, std::vector<std::string> > &getAttributes()
732  {
733  return _attributes;
734  }
735 
736  // "automatic" IO based on Gmsh global functions
737  void load(const std::string &fileName);
738  void save(const std::string &fileName);
739 
740  // GEO file interface (readGEO is static, since it can create multiple models)
741  static int readGEO(const std::string &name);
742  int writeGEO(const std::string &name, bool printLabels = true,
743  bool onlyPhysicals = false);
745 
746  // PY export (mostly a placeholder for now)
747  int writePY(const std::string &name, bool printLabels = true,
748  bool onlyPhysicals = false);
749 
750  // OCC model
751  int readOCCBREP(const std::string &name);
752  int readOCCSTEP(const std::string &name);
753  int readOCCIGES(const std::string &name);
754  int writeOCCSTEP(const std::string &name);
755  int writeOCCBREP(const std::string &name);
756  int importOCCShape(const void *shape);
757  GVertex *getVertexForOCCShape(const void *shape);
758  GEdge *getEdgeForOCCShape(const void *shape);
759  GFace *getFaceForOCCShape(const void *shape);
760  GRegion *getRegionForOCCShape(const void *shape);
761 
762  // ACIS Model
763  int readACISSAT(const std::string &name);
764 
765  // Parasolid Model
766  int readParasolidXMT(const std::string &name);
767  int writeParasolidXMT(const std::string &name);
768  int readParasolidSTEP(const std::string &name);
769  int writeParasolidSTEP(const std::string &name);
770 
771  // Gmsh mesh file format
772  int readMSH(const std::string &name);
773  int writeMSH(const std::string &name, double version = 2.2,
774  bool binary = false, bool saveAll = false,
775  bool saveParametric = false, double scalingFactor = 1.0,
776  int elementStartNum = 0, int saveSinglePartition = 0,
777  bool append = false);
778  int writePartitionedMSH(const std::string &baseName, double version = 2.2,
779  bool binary = false, bool saveAll = false,
780  bool saveParametric = false,
781  double scalingFactor = 1.0);
782 
783  // Iridium file format
784  int writeIR3(const std::string &name, int elementTagType, bool saveAll,
785  double scalingFactor);
786 
787  // mesh statistics (saved as a Gmsh post-processing view)
788  int writePOS(const std::string &name, bool printElementary,
789  bool printElementNumber, bool printSICN, bool printSIGE,
790  bool printGamma, bool printDisto, bool saveAll = false,
791  double scalingFactor = 1.0);
792 
793  // Stereo lithography format
794  int readSTL(const std::string &name, double tolerance = 1.e-3);
795  int writeSTL(const std::string &name, bool binary = false,
796  bool saveAll = false, double scalingFactor = 1.0,
797  int oneSolidPerSurface = 0);
798 
799  // X3D (only output from OCCT's triangulation)
800  int writeX3D(const std::string &name, bool saveAll = false,
801  double scalingFactor = 1.0, int x3dsurfaces = 1,
802  int x3dedges = 0, int x3dvertices = 0, int x3dvolumes = 0,
803  int x3dcolorize = 0);
804 
805  // PLY(2) format (ascii text format)
806  int readPLY(const std::string &name);
807  int readPLY2(const std::string &name);
808  int writePLY2(const std::string &name);
809 
810  // Inventor/VRML format
811  int readVRML(const std::string &name);
812  int writeVRML(const std::string &name, bool saveAll = false,
813  double scalingFactor = 1.0);
814 
815  // I-deas universal mesh format
816  int readUNV(const std::string &name, bool readGroupsOfElements = true);
817  int writeUNV(const std::string &name, bool saveAll = false,
818  int saveGroupsOfElements = 0, int saveGroupsOfNodes = 0,
819  double scalingFactor = 1.0);
820 
821  // Medit (INRIA) mesh format
822  int readMESH(const std::string &name);
823  int writeMESH(const std::string &name, int elementTagType = 1,
824  bool saveAll = false, double scalingFactor = 1.0);
825 
826  // Object file format (OFF)
827  int readOFF(const std::string &name);
828  int writeOFF(const std::string &name, bool saveAll = false,
829  double scalingFactor = 1.0);
830 
831  // Nastran Bulk Data File format
832  int readBDF(const std::string &name);
833  int writeBDF(const std::string &name, int format = 0, int elementTagType = 1,
834  bool saveAll = false, double scalingFactor = 1.0);
835 
836  // Actran mesh
837  int readACTRAN(const std::string &name);
838 
839  // Sameced mesh
840  int readSAMCEF(const std::string &name);
841 
842  // Plot3D structured mesh format
843  int readP3D(const std::string &name);
844  int writeP3D(const std::string &name, bool saveAll = false,
845  double scalingFactor = 1.0);
846 
847  // CFD General Notation System files
848  int readCGNS(const std::string &name,
849  std::vector<std::vector<MVertex *> > &vertPerZone,
850  std::vector<std::vector<MElement *> > &eltPerZone);
851  int writeCGNS(const std::string &name, bool saveAll = false,
852  double scalingFactor = 1.0, bool structured = false);
853 
854  // Med "Modele d'Echange de Donnees" file format (the static routine
855  // is allowed to load multiple models/meshes)
856  static int readMED(const std::string &name);
857  int readMED(const std::string &name, int meshIndex);
858  int writeMED(const std::string &name, bool saveAll = false,
859  double scalingFactor = 1.0);
860 
861  // VTK format
862  int readVTK(const std::string &name, bool bigEndian = false);
863  int writeVTK(const std::string &name, bool binary = false,
864  bool saveAll = false, double scalingFactor = 1.0,
865  bool bigEndian = false);
866 
867  // Matlab format
868  int writeMATLAB(const std::string &name, bool binary = false,
869  bool saveAll = false, double scalingFactor = 1.0,
870  int filetype = 1);
871 
872  // Tochnog format
873  int writeTOCHNOG(const std::string &name, bool saveAll = false,
874  int saveGroupsOfNodes = 0, double scalingFactor = 1.0);
875 
876  // DIFFPACK format
877  int readDIFF(const std::string &name);
878  int writeDIFF(const std::string &name, bool binary = false,
879  bool saveAll = false, double scalingFactor = 1.0);
880 
881  // Abaqus
882  int writeINP(const std::string &name, bool saveAll = false,
883  int saveGroupsOfElements = 0, int saveGroupsOfNodes = 0,
884  double scalingFactor = 1.0);
885 
886  // LSDYNA
887  int writeKEY(const std::string &name, int saveAll = 0,
888  int saveGroupsOfNodes = 0, double scalingFactor = 1.0);
889 
890  // RADIOSS
891  int writeRAD(const std::string &name, int saveAll = 0,
892  int saveGroupsOfNodes = 0, double scalingFactor = 1.0);
893 
894  // CELUM
895  int writeCELUM(const std::string &name, bool saveAll = false,
896  double scalingFactor = 1.0);
897 
898  // Geomview mesh
899  int readGEOM(const std::string &name);
900 
901  // CEA triangulation
902  int writeMAIL(const std::string &name, bool saveAll, double scalingFactor);
903 
904  // SU2 mesh file
905  int writeSU2(const std::string &name, bool saveAll, double scalingFactor);
906 
907  // GAMBIT neutral mesh file (.neu)
908  int writeNEU(const std::string &name, bool saveAll, double scalingFactor);
909 };
910 
911 #endif
GModel::normals
smooth_normals * normals
Definition: GModel.h:653
GModel::removeDuplicateMeshElements
int removeDuplicateMeshElements(const std::vector< GEntity * > &entities=std::vector< GEntity * >())
Definition: GModel.cpp:2792
GModel::const_fiter
std::set< GFace *, GEntityPtrLessThan >::const_iterator const_fiter
Definition: GModel.h:189
GModel::GModel
GModel(const std::string &name="")
Definition: GModel.cpp:72
GModel::setOrderN
int setOrderN(int order, int linear, int incomplete, int onlyVisible)
Definition: GModel.cpp:1454
GModel::incrementAndGetMaxVertexNumber
std::size_t incrementAndGetMaxVertexNumber()
Definition: GModel.h:236
GModel::_name
std::string _name
Definition: GModel.h:90
GModel::getGhostCells
std::multimap< MElement *, short > & getGhostCells()
Definition: GModel.h:618
GModel::setVisibility
void setVisibility(char val)
Definition: GModel.h:341
GModel::clearLastMeshEntityError
void clearLastMeshEntityError()
Definition: GModel.h:584
GModel::_attributes
std::map< std::string, std::vector< std::string > > _attributes
Definition: GModel.h:156
GModel::writeCGNS
int writeCGNS(const std::string &name, bool saveAll=false, double scalingFactor=1.0, bool structured=false)
Definition: GModelIO_CGNS.cpp:252
tags
static std::map< SPoint2, unsigned int > tags
Definition: drawGraph2d.cpp:400
GModel::hasFileName
bool hasFileName(const std::string &name) const
Definition: GModel.h:334
GModel::fiter
std::set< GFace *, GEntityPtrLessThan >::iterator fiter
Definition: GModel.h:184
GModel::_lastMeshEntityError
std::vector< GEntity * > _lastMeshEntityError
Definition: GModel.h:134
GModel::lastVertex
const_viter lastVertex() const
Definition: GModel.h:369
GModel::_fields
FieldManager * _fields
Definition: GModel.h:128
GModel::readParasolidXMT
int readParasolidXMT(const std::string &name)
Definition: GModel.cpp:3623
GModel::firstEdge
eiter firstEdge()
Definition: GModel.h:356
GModel::writeMAIL
int writeMAIL(const std::string &name, bool saveAll, double scalingFactor)
Definition: GModelIO_MAIL.cpp:10
GModel::decrementMaxVertexNumber
void decrementMaxVertexNumber()
Definition: GModel.h:258
GModel::writePartitionedTopology
int writePartitionedTopology(std::string &name)
Definition: GModelIO_MSH4.cpp:2991
MEdge
Definition: MEdge.h:14
GModel::getNumMeshParentElements
std::size_t getNumMeshParentElements() const
Definition: GModel.cpp:1551
GModel::getFileName
std::string getFileName() const
Definition: GModel.h:333
GModel::_readMSH3
int _readMSH3(const std::string &name)
Definition: GModelIO_MSH3.cpp:190
GModel::writeVRML
int writeVRML(const std::string &name, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_VRML.cpp:191
GModel::_chainEdges
std::set< GEdge *, GEntityPtrLessThan > _chainEdges
Definition: GModel.h:51
GModel::getCurvatures
std::map< MVertex *, std::pair< SVector3, SVector3 > > & getCurvatures()
Definition: GModel.h:719
GFace.h
GModel::convertOldPartitioningToNewOne
int convertOldPartitioningToNewOne()
Definition: GModel.cpp:2236
GModel::_writePartitionedMSH3
int _writePartitionedMSH3(const std::string &baseName, double version, bool binary, bool saveAll, bool saveParametric, double scalingFactor)
Definition: GModelIO_MSH3.cpp:841
GModel::getMaxElementaryNumber
int getMaxElementaryNumber(int dim)
Definition: GModel.cpp:817
GModel::createOCCInternals
void createOCCInternals()
Definition: GModelIO_OCC.cpp:5874
GModel::importOCCShape
int importOCCShape(const void *shape)
Definition: GModelIO_OCC.cpp:5942
GModel::setAllVolumesPositiveTopology
void setAllVolumesPositiveTopology()
Definition: GModel.cpp:1161
GModel::writeNEU
int writeNEU(const std::string &name, bool saveAll, double scalingFactor)
Definition: GModelIO_NEU.cpp:121
GModel::getNumMeshVertices
std::size_t getNumMeshVertices(int dim=-1) const
Definition: GModel.cpp:1529
GModel::readUNV
int readUNV(const std::string &name, bool readGroupsOfElements=true)
Definition: GModelIO_UNV.cpp:36
GModel::writeKEY
int writeKEY(const std::string &name, int saveAll=0, int saveGroupsOfNodes=0, double scalingFactor=1.0)
Definition: GModelIO_KEY.cpp:53
GModel::getAttributes
std::map< std::string, std::vector< std::string > > & getAttributes()
Definition: GModel.h:731
GModel::getFaces
std::set< GFace *, GEntityPtrLessThan > getFaces() const
Definition: GModel.h:376
GFace
Definition: GFace.h:33
GModel::writeGEO
int writeGEO(const std::string &name, bool printLabels=true, bool onlyPhysicals=false)
Definition: GModelIO_GEO.cpp:1802
GModel::recombineMesh
int recombineMesh()
Definition: GModel.cpp:1421
GModel::writeOFF
int writeOFF(const std::string &name, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_OFF.cpp:83
GModel::removeDuplicateMeshVertices
int removeDuplicateMeshVertices(double tolerance, const std::vector< GEntity * > &entities=std::vector< GEntity * >())
Definition: GModel.cpp:2684
GModel::checkPointMaxNumbers
void checkPointMaxNumbers()
Definition: GModel.h:264
GModel::getMaxElementNumber
std::size_t getMaxElementNumber() const
Definition: GModel.h:223
GModel::addAutomaticExtrusionConstraints
bool addAutomaticExtrusionConstraints(const std::vector< int > &numElements, const std::vector< double > &heights, const bool recombine, const std::vector< int > &regionTag)
Definition: GModelAutoExtrude.cpp:322
c
static double c(int i, int j, fullMatrix< double > &CA, const std::vector< SPoint3 > &P, const std::vector< SPoint3 > &Q)
Definition: discreteFrechetDistance.cpp:15
GModel::load
void load(const std::string &fileName)
Definition: GModel.cpp:3424
GModel::deleteOCCInternals
void deleteOCCInternals()
Definition: GModelIO_OCC.cpp:5880
GModel::writeP3D
int writeP3D(const std::string &name, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_P3D.cpp:123
MVertex
Definition: MVertex.h:24
GModel::lcCallback
std::function< double(int, int, double, double, double, double)> lcCallback
Definition: GModel.h:713
GModel::getName
std::string getName() const
Definition: GModel.h:329
GModel::numPhysicalNames
int numPhysicalNames() const
Definition: GModel.h:464
GModel::_fileNames
std::set< std::string > _fileNames
Definition: GModel.h:94
GModel::deleteACISInternals
void deleteACISInternals()
Definition: GModel.cpp:3606
GModel::_currentMeshEntity
GEntity * _currentMeshEntity
Definition: GModel.h:131
box
Definition: gl2gif.cpp:311
SPoint3
Definition: SPoint3.h:14
LegendrePolynomials::f
void f(int n, double u, double *val)
Definition: orthogonalBasis.cpp:77
GModel::writeRAD
int writeRAD(const std::string &name, int saveAll=0, int saveGroupsOfNodes=0, double scalingFactor=1.0)
Definition: GModelIO_RAD.cpp:54
GModel::readGEOM
int readGEOM(const std::string &name)
Definition: GModelIO_GEOM.cpp:24
GModel::getFaceByTag
GFace * getFaceByTag(int n) const
Definition: GModel.cpp:326
GModel::getRegions
std::set< GRegion *, GEntityPtrLessThan > getRegions() const
Definition: GModel.h:372
GModel::readOCCSTEP
int readOCCSTEP(const std::string &name)
Definition: GModelIO_OCC.cpp:5902
GModel::empty
bool empty() const
Definition: GModel.cpp:311
GModel::_storeElementsInEntities
void _storeElementsInEntities(std::map< int, std::vector< MElement * > > &map)
Definition: GModel.cpp:2273
GModel::_readMSH2
int _readMSH2(const std::string &name)
Definition: GModelIO_MSH2.cpp:100
GModel::getMeshVertexByTag
MVertex * getMeshVertexByTag(int n)
Definition: GModel.cpp:1953
GModel::getInnerPhysicalNamesIterators
void getInnerPhysicalNamesIterators(std::vector< piter > &iterators)
Definition: GModel.cpp:929
GModel::clearLastMeshVertexError
void clearLastMeshVertexError()
Definition: GModel.h:590
GModel::add
bool add(GEdge *e)
Definition: GModel.h:396
GModel::writeCELUM
int writeCELUM(const std::string &name, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_CELUM.cpp:17
GModel::eiter
std::set< GEdge *, GEntityPtrLessThan >::iterator eiter
Definition: GModel.h:185
GModel::getFaceForOCCShape
GFace * getFaceForOCCShape(const void *shape)
Definition: GModelIO_OCC.cpp:5976
smooth_normals
Definition: SmoothData.h:100
GModel::firstVertex
viter firstVertex()
Definition: GModel.h:357
GModel::deleteGEOInternals
void deleteGEOInternals()
Definition: GModelIO_GEO.cpp:1672
GModel::writeX3D
int writeX3D(const std::string &name, bool saveAll=false, double scalingFactor=1.0, int x3dsurfaces=1, int x3dedges=0, int x3dvertices=0, int x3dvolumes=0, int x3dcolorize=0)
Definition: GModelIO_X3D.cpp:472
GModel::getMaxVertexNumber
std::size_t getMaxVertexNumber() const
Definition: GModel.h:222
GModel::destroyMeshCaches
void destroyMeshCaches()
Definition: GModel.cpp:214
GModel::getEdgeByTag
GEdge * getEdgeByTag(int n) const
Definition: GModel.cpp:336
GModel::_writePartitionedMSH4
int _writePartitionedMSH4(const std::string &baseName, double version, bool binary, bool saveAll, bool saveParametric, double scalingFactor)
Definition: GModelIO_MSH4.cpp:2906
GModel::lastFace
const_fiter lastFace() const
Definition: GModel.h:367
GModel::createParasolidInternals
void createParasolidInternals()
Definition: GModel.cpp:3619
GModel::getMeshDim
int getMeshDim() const
Definition: GModel.cpp:998
GModel::setMaxVertexNumber
void setMaxVertexNumber(std::size_t num)
Definition: GModel.h:224
GModel::buildCutGModel
GModel * buildCutGModel(gLevelset *ls, bool cutElem=true, bool saveTri=false)
Definition: GModel.cpp:3376
dimension
int dimension
Definition: GModelIO_TOCHNOG.cpp:18
GModel::getNumMeshElements
std::size_t getNumMeshElements(int dim=-1) const
Definition: GModel.cpp:1540
GModel::writePLY2
int writePLY2(const std::string &name)
Definition: GModelIO_PLY.cpp:282
GModel::removePhysicalGroups
void removePhysicalGroups()
Definition: GModel.cpp:893
GEntity
Definition: GEntity.h:31
GModel::getVertexForOCCShape
GVertex * getVertexForOCCShape(const void *shape)
Definition: GModelIO_OCC.cpp:5956
GModel::readDIFF
int readDIFF(const std::string &name)
Definition: GModelIO_DIFF.cpp:42
GModel::~GModel
virtual ~GModel()
Definition: GModel.cpp:99
GModel::firstPhysicalName
piter firstPhysicalName()
Definition: GModel.h:458
GModel::getParasolidInternals
Parasolid_Internals * getParasolidInternals()
Definition: GModel.h:317
GModel::addMVertexToVertexCache
void addMVertexToVertexCache(MVertex *v)
Definition: GModel.cpp:1970
GModel::snapVertices
void snapVertices()
Definition: GModel.cpp:616
GModel::addGhostCells
void addGhostCells(MElement *elm, short partition)
Definition: GModel.h:619
GModel::_acis_internals
ACIS_Internals * _acis_internals
Definition: GModel.h:123
GModel::getNumPartitions
std::size_t getNumPartitions() const
Definition: GModel.h:602
GModel::setNumPartitions
void setNumPartitions(std::size_t npart)
Definition: GModel.h:603
GModel::getLastMeshEntityError
std::vector< GEntity * > getLastMeshEntityError()
Definition: GModel.h:586
GModel::getMeshElementIndex
int getMeshElementIndex(MElement *e)
Definition: GModel.cpp:2027
GModel::getEdgeForOCCShape
GEdge * getEdgeForOCCShape(const void *shape)
Definition: GModelIO_OCC.cpp:5966
GModel::rebuildMeshVertexCache
void rebuildMeshVertexCache(bool onlyIfNecessary=false)
Definition: GModel.cpp:1879
GModel::createGeometryOfDiscreteEntities
void createGeometryOfDiscreteEntities(const std::vector< std::pair< int, int > > &dimTags=std::vector< std::pair< int, int > >())
Definition: GModel.cpp:2370
GModel::_physicalNames
std::map< std::pair< int, int >, std::string > _physicalNames
Definition: GModel.h:150
GModel::lastEdge
const_eiter lastEdge() const
Definition: GModel.h:368
discreteRegion
Definition: discreteRegion.h:13
GModel::_elementIndexCache
std::map< int, int > _elementIndexCache
Definition: GModel.h:105
GModel::readMSH
int readMSH(const std::string &name)
Definition: GModelIO_MSH.cpp:12
GModel::writeDIFF
int writeDIFF(const std::string &name, bool binary=false, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_DIFF.cpp:407
GModel::makeDiscreteRegionsSimplyConnected
void makeDiscreteRegionsSimplyConnected()
Definition: GModel.cpp:3101
hashmapMEdge
#define hashmapMEdge
Definition: GModel.h:27
MEdgeHash.h
GModel::_parasolid_internals
Parasolid_Internals * _parasolid_internals
Definition: GModel.h:125
GModel::_current
static int _current
Definition: GModel.h:139
GModel::findByName
static GModel * findByName(const std::string &name, const std::string &fileName="")
Definition: GModel.cpp:158
GModel::_mapFaceNum
hashmapMFace _mapFaceNum
Definition: GModel.h:54
hashmapMFace
#define hashmapMFace
Definition: GModel.h:25
GModel::incrementAndGetMaxElementNumber
std::size_t incrementAndGetMaxElementNumber()
Definition: GModel.h:246
GModel::writePY
int writePY(const std::string &name, bool printLabels=true, bool onlyPhysicals=false)
Definition: GModelIO_GEO.cpp:1863
GModel::getEntitiesInBox
void getEntitiesInBox(std::vector< GEntity * > &entities, const SBoundingBox3d &box, int dim=-1) const
Definition: GModel.cpp:672
GModel::writeSTL
int writeSTL(const std::string &name, bool binary=false, bool saveAll=false, double scalingFactor=1.0, int oneSolidPerSurface=0)
Definition: GModelIO_STL.cpp:308
GModel::readCGNS
int readCGNS(const std::string &name, std::vector< std::vector< MVertex * > > &vertPerZone, std::vector< std::vector< MElement * > > &eltPerZone)
Definition: GModelIO_CGNS.cpp:244
GModel::getPhysicalGroups
void getPhysicalGroups(std::map< int, std::vector< GEntity * > > groups[4]) const
Definition: GModel.cpp:837
GModel::readMED
static int readMED(const std::string &name)
Definition: GModelIO_MED.cpp:879
GModel::lastFace
fiter lastFace()
Definition: GModel.h:359
GModel::addMFace
std::size_t addMFace(MFace &face, std::size_t num=0)
Definition: GModel.cpp:1583
GEdge.h
GModel::readVTK
int readVTK(const std::string &name, bool bigEndian=false)
Definition: GModelIO_VTK.cpp:131
GModel::addLastMeshVertexError
void addLastMeshVertexError(MVertex *v)
Definition: GModel.h:591
MFace
Definition: MFace.h:20
GModel::getPhysicalName
std::string getPhysicalName(int dim, int num) const
Definition: GModel.cpp:961
GModel::readSTL
int readSTL(const std::string &name, double tolerance=1.e-3)
Definition: GModelIO_STL.cpp:22
GRegion.h
GModel::getVertices
std::set< GVertex *, GEntityPtrLessThan > getVertices() const
Definition: GModel.h:378
GModel::bounds
SBoundingBox3d bounds(bool aroundVisible=false)
Definition: GModel.cpp:1043
GModel::scaleMesh
void scaleMesh(double factor)
Definition: GModel.cpp:2189
GModel::createACISInternals
void createACISInternals()
Definition: GModel.cpp:3604
GModel::renumberMeshVertices
void renumberMeshVertices()
Definition: GModel.cpp:1623
simpleFunction
Definition: GModel.h:30
GModel::_elementaryNames
std::map< std::pair< int, int >, std::string > _elementaryNames
Definition: GModel.h:150
GModel::setName
void setName(const std::string &name)
Definition: GModel.h:328
GModel::setFileName
void setFileName(const std::string &fileName)
Definition: GModel.cpp:123
GModel::changeEntityTag
bool changeEntityTag(int dim, int tag, int newTag)
Definition: GModel.cpp:367
GModel::getPhysicalNames
const std::map< std::pair< int, int >, std::string > & getPhysicalNames() const
Definition: GModel.h:437
gLevelset
Definition: gmshLevelset.h:64
GModel::setElementaryName
void setElementaryName(int dim, int tag, const std::string &name)
Definition: GModel.h:500
GModel::lastVertex
viter lastVertex()
Definition: GModel.h:361
GModel::firstMFace
hashmapMFace::const_iterator firstMFace()
Definition: GModel.h:287
GVertex
Definition: GVertex.h:23
GModel::getMaxPhysicalNumber
int getMaxPhysicalNumber(int dim)
Definition: GModel.cpp:917
GModel::readVRML
int readVRML(const std::string &name)
Definition: GModelIO_VRML.cpp:118
tolerance
#define tolerance
Definition: curvature.cpp:11
SBoundingBox3d.h
GModel::refineMesh
int refineMesh(int linear, bool splitIntoQuads=false, bool splitIntoHexas=false, bool barycentric=false)
Definition: GModel.cpp:1401
GModel::writeTOCHNOG
int writeTOCHNOG(const std::string &name, bool saveAll=false, int saveGroupsOfNodes=0, double scalingFactor=1.0)
Definition: GModelIO_TOCHNOG.cpp:54
GModel::getDim
int getDim() const
Definition: GModel.cpp:989
GModel::_fileName
std::string _fileName
Definition: GModel.h:93
GModel::_curvatures
std::map< MVertex *, std::pair< SVector3, SVector3 > > _curvatures
Definition: GModel.h:116
GModel::getNumVertices
std::size_t getNumVertices() const
Definition: GModel.h:347
GModel::setPhysicalNumToEntitiesInBox
void setPhysicalNumToEntitiesInBox(int EntityDimension, int PhysicalNumber, std::vector< double > p1, std::vector< double > p2)
Definition: GModel.cpp:3462
GModel
Definition: GModel.h:44
GModel::computeSizeField
void computeSizeField()
Definition: GModel.cpp:3590
GModel::readP3D
int readP3D(const std::string &name)
Definition: GModelIO_P3D.cpp:13
GModel::rebuildMeshElementCache
void rebuildMeshElementCache(bool onlyIfNecessary=false)
Definition: GModel.cpp:1914
GModel::const_viter
std::set< GVertex *, GEntityPtrLessThan >::const_iterator const_viter
Definition: GModel.h:191
GModel::classifySurfaces
void classifySurfaces(double angleThreshold, bool includeBoundary, bool forReparametrization, double curveAngleThreshold)
Definition: GModel.cpp:3472
GModel::vertices
std::set< GVertex *, GEntityPtrLessThan > vertices
Definition: GModel.h:146
GModel::readPLY2
int readPLY2(const std::string &name)
Definition: GModelIO_PLY.cpp:216
GModel::addHomologyRequest
void addHomologyRequest(const std::string &type, const std::vector< int > &domain, const std::vector< int > &subdomain, const std::vector< int > &dim)
Definition: GModel.cpp:3480
GModel::getMeshVerticesForPhysicalGroup
void getMeshVerticesForPhysicalGroup(int dim, int num, std::vector< MVertex * > &)
Definition: GModel.cpp:1987
GModel::createTopologyFromMesh
void createTopologyFromMesh()
Definition: GModelCreateTopologyFromMesh.cpp:663
GModel::clearHomologyRequests
void clearHomologyRequests()
Definition: GModel.cpp:3491
GModel::_ghostCells
std::multimap< MElement *, short > _ghostCells
Definition: GModel.h:110
FieldManager
Definition: Field.h:145
GModel::getBoundaryTags
bool getBoundaryTags(const std::vector< std::pair< int, int > > &inDimTags, std::vector< std::pair< int, int > > &outDimTags, bool combined, bool oriented=true, bool recursive=false)
Definition: GModel.cpp:697
GModel::firstFace
fiter firstFace()
Definition: GModel.h:355
MElementOctree
Definition: MElementOctree.h:15
GModel::removeInvisibleElements
std::size_t removeInvisibleElements()
Definition: GModel.cpp:2057
GModel::_visible
char _visible
Definition: GModel.h:97
OCC_Internals
Definition: GModelIO_OCC.h:471
GModel::_checkPointedMaxVertexNum
std::size_t _checkPointedMaxVertexNum
Definition: GModel.h:57
GModel::lastRegion
const_riter lastRegion() const
Definition: GModel.h:366
GModel::createGEOInternals
void createGEOInternals()
Definition: GModelIO_GEO.cpp:1670
GModel::add
bool add(GRegion *r)
Definition: GModel.h:394
GModel::_elementVectorCache
std::vector< std::pair< MElement *, int > > _elementVectorCache
Definition: GModel.h:103
GModel::writeOCCBREP
int writeOCCBREP(const std::string &name)
Definition: GModelIO_OCC.cpp:5920
GModel::getElementaryName
std::string getElementaryName(int dim, int tag)
Definition: GModel.cpp:1007
GModel::getNumRegions
std::size_t getNumRegions() const
Definition: GModel.h:344
GModel::_writeMSH4
int _writeMSH4(const std::string &name, double version, bool binary, bool saveAll, bool saveParametric, double scalingFactor, bool append, int partitionToSave=0, std::map< GEntity *, SBoundingBox3d > *entityBounds=nullptr)
Definition: GModelIO_MSH4.cpp:2796
GModel::lastElementaryName
piter lastElementaryName()
Definition: GModel.h:461
GModel::destroy
void destroy(bool keepName=false)
Definition: GModel.cpp:168
GModel::getFields
FieldManager * getFields()
Definition: GModel.h:325
MElement
Definition: MElement.h:30
GModel::firstMEdge
hashmapMEdge::const_iterator firstMEdge()
Definition: GModel.h:285
GModel::getMeshElementByTag
MElement * getMeshElementByTag(int n)
Definition: GModel.h:538
GModel::remove
void remove()
Definition: GModel.cpp:608
GModel::resetOCCInternals
void resetOCCInternals()
Definition: GModelIO_OCC.cpp:5886
GModel::_vertexMapCache
std::map< int, MVertex * > _vertexMapCache
Definition: GModel.h:102
GModel::writeUNV
int writeUNV(const std::string &name, bool saveAll=false, int saveGroupsOfElements=0, int saveGroupsOfNodes=0, double scalingFactor=1.0)
Definition: GModelIO_UNV.cpp:398
GModel::_checkPointedMaxElementNum
std::size_t _checkPointedMaxElementNum
Definition: GModel.h:57
GModel::getNumFaces
std::size_t getNumFaces() const
Definition: GModel.h:345
GModel::list
static std::vector< GModel * > list
Definition: GModel.h:202
GModel::_numPartitions
std::size_t _numPartitions
Definition: GModel.h:153
GModel::setPhysicalNames
void setPhysicalNames(const std::map< std::pair< int, int >, std::string > &names)
Definition: GModel.h:441
GModel::deleteMesh
void deleteMesh()
Definition: GModel.cpp:236
GModel::removePhysicalName
void removePhysicalName(const std::string &name)
Definition: GModel.cpp:968
GModel::reverseInvisibleElements
std::size_t reverseInvisibleElements()
Definition: GModel.cpp:2102
GModel::_lastMeshVertexError
std::vector< MVertex * > _lastMeshVertexError
Definition: GModel.h:135
GModel::removeElementaryName
void removeElementaryName(const std::string &name)
Definition: GModel.cpp:1014
GModel::_homologyRequests
std::multimap< std::pair< const std::vector< int >, const std::vector< int > >, std::pair< const std::string, const std::vector< int > > > _homologyRequests
Definition: GModel.h:48
GModel::save
void save(const std::string &fileName)
Definition: GModel.cpp:3432
GModel::makeDiscreteFacesSimplyConnected
void makeDiscreteFacesSimplyConnected()
Definition: GModel.cpp:3160
GModel::computeHomology
void computeHomology(std::vector< std::pair< int, int > > &newPhysicals)
Definition: GModel.cpp:3496
GModel::readPLY
int readPLY(const std::string &name)
Definition: GModelIO_PLY.cpp:49
GModel::_writePartitionedMSH2
int _writePartitionedMSH2(const std::string &baseName, bool binary, bool saveAll, bool saveParametric, double scalingFactor)
Definition: GModelIO_MSH2.cpp:1126
GModel::_vertexVectorCache
std::vector< MVertex * > _vertexVectorCache
Definition: GModel.h:101
GModel::getEntities
void getEntities(std::vector< GEntity * > &entities, int dim=-1) const
Definition: GModel.cpp:651
GModel::exportDiscreteGEOInternals
int exportDiscreteGEOInternals()
Definition: GModelIO_GEO.cpp:1910
GModel::alignPeriodicBoundaries
void alignPeriodicBoundaries()
Definition: GModel.cpp:2828
GModel::readBDF
int readBDF(const std::string &name)
Definition: GModelIO_BDF.cpp:218
GModel::fillVertexArrays
bool fillVertexArrays()
Definition: GModelVertexArrays.cpp:452
GModel::_writeMSH3
int _writeMSH3(const std::string &name, double version, bool binary, bool saveAll, bool saveParametric, double scalingFactor, int elementStartNum, int saveSinglePartition, bool append)
Definition: GModelIO_MSH3.cpp:725
GRegion
Definition: GRegion.h:28
GModel::writePOS
int writePOS(const std::string &name, bool printElementary, bool printElementNumber, bool printSICN, bool printSIGE, bool printGamma, bool printDisto, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_POS.cpp:11
GModel::getEdges
std::set< GEdge *, GEntityPtrLessThan > getEdges() const
Definition: GModel.h:377
GModel::readACTRAN
int readACTRAN(const std::string &name)
Definition: GModelIO_ACTRAN.cpp:32
GModel::getRegionForOCCShape
GRegion * getRegionForOCCShape(const void *shape)
Definition: GModelIO_OCC.cpp:5986
GModel::readOFF
int readOFF(const std::string &name)
Definition: GModelIO_OFF.cpp:14
GModel::getNumEdges
std::size_t getNumEdges() const
Definition: GModel.h:346
GModel::writeINP
int writeINP(const std::string &name, bool saveAll=false, int saveGroupsOfElements=0, int saveGroupsOfNodes=0, double scalingFactor=1.0)
Definition: GModelIO_INP.cpp:53
GModel::_writeX3dFile
int _writeX3dFile(FILE *fp, bool saveAll, double scalingFactor, int x3dsurfaces, int x3dedges, int x3dvertices, int x3dcolorize, std::vector< GFace * > &customFaces)
Definition: GModelIO_X3D.cpp:315
GModel::readGEO
static int readGEO(const std::string &name)
Definition: GModel.cpp:3440
GModel::piter
std::map< std::pair< int, int >, std::string >::iterator piter
Definition: GModel.h:194
GModel::getMeshElementsByCoord
std::vector< MElement * > getMeshElementsByCoord(SPoint3 &p, int dim=-1, bool strict=true)
Definition: GModel.cpp:1865
GModel::writeMSH
int writeMSH(const std::string &name, double version=2.2, bool binary=false, bool saveAll=false, bool saveParametric=false, double scalingFactor=1.0, int elementStartNum=0, int saveSinglePartition=0, bool append=false)
Definition: GModelIO_MSH.cpp:76
GModel::readACISSAT
int readACISSAT(const std::string &name)
Definition: GModel.cpp:3608
GModel::getVisibility
char getVisibility() const
Definition: GModel.h:340
GModel::writeParasolidXMT
int writeParasolidXMT(const std::string &name)
Definition: GModel.cpp:3630
GModel::firstRegion
riter firstRegion()
Definition: GModel.h:354
MFaceHash.h
GModel::firstElementaryName
piter firstElementaryName()
Definition: GModel.h:460
GModel::_elementOctree
MElementOctree * _elementOctree
Definition: GModel.h:113
GModel::setCurrent
static int setCurrent(GModel *m)
Definition: GModel.cpp:147
GModel::lastRegion
riter lastRegion()
Definition: GModel.h:358
GModel::writeSU2
int writeSU2(const std::string &name, bool saveAll, double scalingFactor)
Definition: GModelIO_SU2.cpp:29
GModel::adaptMesh
int adaptMesh()
Definition: GModel.cpp:1215
GModel::_storeParentsInSubElements
void _storeParentsInSubElements(std::map< int, std::vector< MElement * > > &map)
Definition: GModel.cpp:2347
GModel::readSAMCEF
int readSAMCEF(const std::string &name)
Definition: GModelIO_SAMCEF.cpp:33
GModel::getLastMeshVertexError
std::vector< MVertex * > getLastMeshVertexError()
Definition: GModel.h:592
GModel::readOCCBREP
int readOCCBREP(const std::string &name)
Definition: GModelIO_OCC.cpp:5892
GModel::_writeMSH2
int _writeMSH2(const std::string &name, double version, bool binary, bool saveAll, bool saveParametric, double scalingFactor, int elementStartNum, int saveSinglePartition, bool append, bool renumberVertices)
Definition: GModelIO_MSH2.cpp:883
GModel::unpartitionMesh
int unpartitionMesh()
Definition: GModel.cpp:2226
GVertex.h
GModel::storeChain
void storeChain(int dim, std::map< int, std::vector< MElement * > > &entityMap, std::map< int, std::map< int, std::string > > &physicalMap)
Definition: GModel.cpp:2247
GModel::lastPhysicalName
piter lastPhysicalName()
Definition: GModel.h:459
GModel::writeParasolidSTEP
int writeParasolidSTEP(const std::string &name)
Definition: GModel.cpp:3644
GModel::getCurrentMeshEntity
GEntity * getCurrentMeshEntity()
Definition: GModel.h:581
GModel::writeMESH
int writeMESH(const std::string &name, int elementTagType=1, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_MESH.cpp:249
GModel::setMeshElementIndex
void setMeshElementIndex(MElement *e, int index)
Definition: GModel.cpp:2036
GModel::faces
std::set< GFace *, GEntityPtrLessThan > faces
Definition: GModel.h:144
GModel::noPhysicalGroups
bool noPhysicalGroups()
Definition: GModel.cpp:828
GModel::removePhysicalGroup
void removePhysicalGroup(int dim, int num)
Definition: GModel.cpp:901
GModel::writeMATLAB
int writeMATLAB(const std::string &name, bool binary=false, bool saveAll=false, double scalingFactor=1.0, int filetype=1)
Definition: GModelIO_MATLAB.cpp:47
GEdge
Definition: GEdge.h:26
GModel::optimizeMesh
int optimizeMesh(const std::string &how, bool force=false, int niter=1)
Definition: GModel.cpp:1437
GModel::firstEdge
const_eiter firstEdge() const
Definition: GModel.h:364
GModel::_maxVertexNum
std::size_t _maxVertexNum
Definition: GModel.h:56
GModel::readMESH
int readMESH(const std::string &name)
Definition: GModelIO_MESH.cpp:31
GModel::pruneMeshVertexAssociations
void pruneMeshVertexAssociations()
Definition: GModel.cpp:2527
GModel::_chainVertices
std::set< GVertex *, GEntityPtrLessThan > _chainVertices
Definition: GModel.h:52
GModel::riter
std::set< GRegion *, GEntityPtrLessThan >::iterator riter
Definition: GModel.h:183
GModel::_elementMapCache
std::map< int, std::pair< MElement *, int > > _elementMapCache
Definition: GModel.h:104
GModel::_occ_internals
OCC_Internals * _occ_internals
Definition: GModel.h:121
GModel::_chainFaces
std::set< GFace *, GEntityPtrLessThan > _chainFaces
Definition: GModel.h:50
GModel::_readMSH4
int _readMSH4(const std::string &name)
Definition: GModelIO_MSH4.cpp:1255
GModel::setPhysicalName
int setPhysicalName(const std::string &name, int dim, int num=0)
Definition: GModel.cpp:937
GModel::const_eiter
std::set< GEdge *, GEntityPtrLessThan >::const_iterator const_eiter
Definition: GModel.h:190
GModel::getEntityByTag
GEntity * getEntityByTag(int dim, int n) const
Definition: GModel.cpp:356
GModel::viter
std::set< GVertex *, GEntityPtrLessThan >::iterator viter
Definition: GModel.h:186
GModel::add
bool add(GFace *f)
Definition: GModel.h:395
GModel::_mapEdgeNum
hashmapMEdge _mapEdgeNum
Definition: GModel.h:53
GModel::mesh
int mesh(int dimension)
Definition: GModel.cpp:1066
GModel::getMFace
std::size_t getMFace(MVertex *v0, MVertex *v1, MVertex *v2, MVertex *v3, MFace &face)
Definition: GModel.cpp:1591
GModel::regions
std::set< GRegion *, GEntityPtrLessThan > regions
Definition: GModel.h:143
GModel::writeVTK
int writeVTK(const std::string &name, bool binary=false, bool saveAll=false, double scalingFactor=1.0, bool bigEndian=false)
Definition: GModelIO_VTK.cpp:19
GModel::renumberMeshElements
void renumberMeshElements()
Definition: GModel.cpp:1732
GModel::lastEdge
eiter lastEdge()
Definition: GModel.h:360
GModel::lastMFace
hashmapMFace::const_iterator lastMFace()
Definition: GModel.h:288
GModel::getMEdge
std::size_t getMEdge(MVertex *v0, MVertex *v1, MEdge &edge)
Definition: GModel.cpp:1569
GModel::setAsCurrent
int setAsCurrent()
Definition: GModel.h:211
GModel::const_riter
std::set< GRegion *, GEntityPtrLessThan >::const_iterator const_riter
Definition: GModel.h:188
GModel::readOCCIGES
int readOCCIGES(const std::string &name)
Definition: GModelIO_OCC.cpp:5911
GModel::getRegionByTag
GRegion * getRegionByTag(int n) const
Definition: GModel.cpp:316
GModel::_storeVerticesInEntities
void _storeVerticesInEntities(std::map< int, MVertex * > &vertices)
Definition: GModel.cpp:2496
GModel::checkMeshCoherence
void checkMeshCoherence(double tolerance)
Definition: GModel.cpp:2595
GModel::readParasolidSTEP
int readParasolidSTEP(const std::string &name)
Definition: GModel.cpp:3637
GModel::setMaxElementNumber
void setMaxElementNumber(std::size_t num)
Definition: GModel.h:229
GModel::addLastMeshEntityError
void addLastMeshEntityError(GEntity *e)
Definition: GModel.h:585
GModel::firstRegion
const_riter firstRegion() const
Definition: GModel.h:362
GModel::firstFace
const_fiter firstFace() const
Definition: GModel.h:363
GModel::writeMED
int writeMED(const std::string &name, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_MED.cpp:893
GModel::add
bool add(GVertex *v)
Definition: GModel.h:397
GModel::writeBDF
int writeBDF(const std::string &name, int format=0, int elementTagType=1, bool saveAll=false, double scalingFactor=1.0)
Definition: GModelIO_BDF.cpp:347
GModel::addPhysicalGroup
void addPhysicalGroup(int dim, int tag, const std::vector< int > &tags)
Definition: GModel.cpp:881
GModel::getVertexByTag
GVertex * getVertexByTag(int n) const
Definition: GModel.cpp:346
GModel::_geo_internals
GEO_Internals * _geo_internals
Definition: GModel.h:119
SPoint3.h
GEO_Internals
Definition: GModelIO_GEO.h:15
GModel::setSelection
void setSelection(int val)
Definition: GModel.cpp:1026
GModel::getGEOInternals
GEO_Internals * getGEOInternals()
Definition: GModel.h:315
GModel::deleteVertexArrays
void deleteVertexArrays()
Definition: GModel.cpp:299
GModel::deleteParasolidInternals
void deleteParasolidInternals()
Definition: GModel.cpp:3621
GModel::getMeshStatus
int getMeshStatus(bool countDiscrete=true)
Definition: GModel.cpp:1474
GModel::_maxElementNum
std::size_t _maxElementNum
Definition: GModel.h:56
GModel::_associateEntityWithMeshVertices
void _associateEntityWithMeshVertices()
Definition: GModel.cpp:2470
GModel::setAllVolumesPositive
bool setAllVolumesPositive()
Definition: GModel.cpp:1085
GModel::getOCCInternals
OCC_Internals * getOCCInternals()
Definition: GModel.h:314
GModel::edges
std::set< GEdge *, GEntityPtrLessThan > edges
Definition: GModel.h:145
GModel::addMEdge
std::size_t addMEdge(MEdge &edge, std::size_t num=0)
Definition: GModel.cpp:1561
SBoundingBox3d
Definition: SBoundingBox3d.h:21
GModel::_chainRegions
std::set< GRegion *, GEntityPtrLessThan > _chainRegions
Definition: GModel.h:49
GModel::setCurrentMeshEntity
void setCurrentMeshEntity(GEntity *e)
Definition: GModel.cpp:2202
GModel::firstVertex
const_viter firstVertex() const
Definition: GModel.h:365
GModel::getTagsForPhysicalName
std::vector< int > getTagsForPhysicalName(int dim, const std::string &name)
Definition: GModel.cpp:420
GModel::indexMeshVertices
std::size_t indexMeshVertices(bool all, int singlePartition=0, bool renumber=true)
Definition: GModel.cpp:2135
GModel::getPhysicalNumber
int getPhysicalNumber(const int &dim, const std::string &name)
Definition: GModel.cpp:980
GModel::_storePhysicalTagsInEntities
void _storePhysicalTagsInEntities(int dim, std::map< int, std::map< int, std::string > > &map)
Definition: GModel.cpp:2568
GModel::current
static GModel * current(int index=-1)
Definition: GModel.cpp:136
GModel::getCheckPointedMaxNumbers
void getCheckPointedMaxNumbers(std::size_t &maxv, std::size_t &maxe) const
Definition: GModel.h:269
GModel::getACISInternals
ACIS_Internals * getACISInternals()
Definition: GModel.h:316
GModel::writeOCCSTEP
int writeOCCSTEP(const std::string &name)
Definition: GModelIO_OCC.cpp:5931
GModel::partitionMesh
int partitionMesh(int num, std::vector< std::pair< MElement *, int > > elementPartition=std::vector< std::pair< MElement *, int > >())
Definition: GModel.cpp:2208
GModel::lastMEdge
hashmapMEdge::const_iterator lastMEdge()
Definition: GModel.h:286
discreteFace
Definition: discreteFace.h:18
GModel::getMeshElementByCoord
MElement * getMeshElementByCoord(SPoint3 &p, SPoint3 &param, int dim=-1, bool strict=true)
Definition: GModel.cpp:1842
GModel::writeIR3
int writeIR3(const std::string &name, int elementTagType, bool saveAll, double scalingFactor)
Definition: GModelIO_IR3.cpp:10
GModel::writePartitionedMSH
int writePartitionedMSH(const std::string &baseName, double version=2.2, bool binary=false, bool saveAll=false, bool saveParametric=false, double scalingFactor=1.0)
Definition: GModelIO_MSH.cpp:104