~ubuntu-branches/debian/squeeze/gmsh/squeeze

« back to all changes in this revision

Viewing changes to Geo/GModel.h

  • Committer: Bazaar Package Importer
  • Author(s): Christophe Prud'homme
  • Date: 2009-01-07 16:02:08 UTC
  • mfrom: (5.1.2 sid)
  • Revision ID: james.westby@ubuntu.com-20090107160208-vklhtj69br5yw5bh
Tags: 2.2.6.dfsg-2
* debian/control: fixed lintian warning "debhelper-but-no-misc-depends"
* debian/watch: fixed lintian warning
  "debian-watch-file-should-mangle-version"

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
class OCC_Internals;
23
23
class smooth_normals;
24
24
class FieldManager;
 
25
class CGNSOptions;
25
26
 
26
27
// A geometric model. The model is a "not yet" non-manifold B-Rep.
27
28
class GModel
61
62
  // entity
62
63
  void _associateEntityWithMeshVertices();
63
64
 
 
65
  // store the vertices in the entity they are associated with, and
 
66
  // delete those that are not associated with any geo entity
 
67
  void _storeVerticesInEntities(std::map<int, MVertex*> &vertices);
 
68
  void _storeVerticesInEntities(std::vector<MVertex*> &vertices);
 
69
 
64
70
  // entity that is currently being meshed (used for error reporting)
65
71
  GEntity *_currentMeshEntity;
66
72
 
76
82
  std::set<GVertex*, GEntityLessThan> vertices;
77
83
  std::set<int> meshPartitions;
78
84
  std::map<int, std::string> physicalNames, elementaryNames;
 
85
  int partitionSize[2];
79
86
 
80
87
 public:
81
88
  GModel(std::string name="");
84
91
  // the static list of all loaded models
85
92
  static std::vector<GModel*> list;
86
93
 
87
 
  // returns the current model, and sets the current model index if
 
94
  // return the current model, and sets the current model index if
88
95
  // index >= 0
89
96
  static GModel *current(int index=-1);
90
97
 
110
117
  void setName(std::string name){ modelName = name; }
111
118
  std::string getName(){ return modelName; }
112
119
 
113
 
  // get the number of regions in this model.
 
120
  // get the number of entities in this model
114
121
  int getNumRegions() const { return regions.size(); }
115
122
  int getNumFaces() const { return faces.size(); }
116
123
  int getNumEdges() const { return edges.size(); }
117
 
  int getNumVertices() const  { return vertices.size(); }
 
124
  int getNumVertices() const { return vertices.size(); }
 
125
 
 
126
  // quickly check if the model is empty (contains no entities)
 
127
  bool empty() const;
118
128
 
119
129
  typedef std::set<GRegion*, GEntityLessThan>::iterator riter;
120
130
  typedef std::set<GFace*, GEntityLessThan>::iterator fiter;
148
158
  void remove(GEdge *e);
149
159
  void remove(GVertex *v);
150
160
 
151
 
  // Snap vertices on model edges by using geometry tolerance
 
161
  // snap vertices on model edges by using geometry tolerance
152
162
  void snapVertices();
153
163
 
154
 
  // Get a vector containing all the entities in the model
155
 
  std::vector<GEntity*> getEntities();
 
164
  // fill a vector containing all the entities in the model
 
165
  void getEntities(std::vector<GEntity*> &entities);
156
166
 
157
 
  // Checks if there are no physical entities in the model
 
167
  // check if there are no physical entities in the model
158
168
  bool noPhysicalGroups();
159
169
 
160
 
  // Returns all physical groups (one map per dimension: 0-D to 3-D)
 
170
  // return all physical groups (one map per dimension: 0-D to 3-D)
161
171
  void getPhysicalGroups(std::map<int, std::vector<GEntity*> > groups[4]);
162
172
 
163
 
  // Deletes physical groups in the model
 
173
  // delete physical groups in the model
164
174
  void deletePhysicalGroups();
165
175
  void deletePhysicalGroup(int dim, int num);
166
176
 
167
 
  // Returns the highest number associated with a physical entity
 
177
  // return the highest number associated with a physical entity
168
178
  int getMaxPhysicalNumber();
169
179
 
170
 
  // Get an iterator on the elementary/physical names
 
180
  // get an iterator on the elementary/physical names
171
181
  piter firstPhysicalName() { return physicalNames.begin(); }
172
182
  piter lastPhysicalName() { return physicalNames.end(); }
173
183
  piter firstElementaryName() { return elementaryNames.begin(); }
174
184
  piter lastElementaryName() { return elementaryNames.end(); }
175
185
 
176
 
  // Get the number of physical names
 
186
  // get the number of physical names
177
187
  int numPhysicalNames(){ return physicalNames.size(); }
178
188
 
179
 
  // Associate a name with a physical number (returns new id if number==0)
 
189
  // associate a name with a physical number (returns new id if number==0)
180
190
  int setPhysicalName(std::string name, int number=0);
181
191
 
182
 
  // Get the name (if any) of a given physical group
 
192
  // get the name (if any) of a given physical group
183
193
  std::string getPhysicalName(int number);
184
194
 
185
 
  // The bounding box
 
195
  // the bounding box
186
196
  SBoundingBox3d bounds();
187
197
 
188
 
  // Returns the mesh status for the entire model
 
198
  // return the mesh status for the entire model
189
199
  int getMeshStatus(bool countDiscrete=true);
190
200
 
191
 
  // Returns the total number of elements in the mesh
 
201
  // return the total number of elements in the mesh
192
202
  int getNumMeshElements();
193
203
 
194
 
  // Access a mesh element by coordinates
 
204
  // get the number of each type of element in the mesh at the largest
 
205
  // dimension and return the dimension
 
206
  int getNumMeshElements(unsigned c[4]);
 
207
 
 
208
  // access a mesh element by coordinates
195
209
  MElement *getMeshElementByCoord(SPoint3 &p);
196
210
 
197
 
  // Returns the total number of vertices in the mesh
 
211
  // return the total number of vertices in the mesh
198
212
  int getNumMeshVertices();
199
213
 
200
 
  // Access a mesh vertex by tag, using the vertex cache
 
214
  // access a mesh vertex by tag, using the vertex cache
201
215
  MVertex *getMeshVertexByTag(int n);
202
216
 
203
217
  // get all the mesh vertices associated with the physical group
215
229
  void setCurrentMeshEntity(GEntity *e){ _currentMeshEntity = e; }
216
230
  GEntity *getCurrentMeshEntity(){ return _currentMeshEntity; }
217
231
 
218
 
  // Deletes all invisble mesh elements
 
232
  // delete all invisble mesh elements
219
233
  void removeInvisibleElements();
220
234
 
221
 
  // The list of partitions
 
235
  // the list of partitions
222
236
  std::set<int> &getMeshPartitions() { return meshPartitions; }
223
 
  std::set<int> &recomputeMeshPartitions();
 
237
  void recomputeMeshPartitions();
224
238
 
225
 
  // Deletes all the partitions
 
239
  // delete all the partitions
226
240
  void deleteMeshPartitions();
227
241
 
228
 
  // Performs various coherence tests on the mesh
229
 
  void checkMeshCoherence();
230
 
 
231
 
  // A container for smooth normals
 
242
  // store/recall min and max partitions size
 
243
  void setMinPartitionSize(const int pSize) { partitionSize[0] = pSize; }
 
244
  void setMaxPartitionSize(const int pSize) { partitionSize[1] = pSize; }
 
245
  int getMinPartitionSize() const { return partitionSize[0]; }
 
246
  int getMaxPartitionSize() const { return partitionSize[1]; }
 
247
 
 
248
  // perform various coherence tests on the mesh
 
249
  void checkMeshCoherence(double tolerance);
 
250
 
 
251
  // remove duplicate mesh vertices
 
252
  int removeDuplicateMeshVertices(double tolerance);
 
253
 
 
254
  // a container for smooth normals
232
255
  smooth_normals *normals;
233
256
 
234
 
  // Mesh the model
 
257
  // mesh the model
235
258
  int mesh(int dimension);
236
259
 
237
260
  // Gmsh native CAD format
253
276
  // Gmsh mesh file format
254
277
  int readMSH(const std::string &name);
255
278
  int writeMSH(const std::string &name, double version=1.0, bool binary=false,
256
 
               bool saveAll=false, double scalingFactor=1.0);
 
279
               bool saveAll=false, bool saveParametric=false, double scalingFactor=1.0);
257
280
 
258
281
  // Mesh statistics (as Gmsh post-processing views)
259
282
  int writePOS(const std::string &name, bool printElementary,
260
283
               bool printElementNumber, bool printGamma, bool printEta, bool printRho,
261
 
               bool saveAll=false, double scalingFactor=1.0);
 
284
               bool printDisto,bool saveAll=false, double scalingFactor=1.0);
262
285
 
263
286
  // Stereo lithography format
264
287
  int readSTL(const std::string &name, double tolerance=1.e-3);
292
315
 
293
316
  // CFD General Notation System files
294
317
  int readCGNS(const std::string &name);
295
 
  int writeCGNS(const std::string &name, double scalingFactor=1.0);
 
318
  int writeCGNS(const std::string &name, int zoneDefinition,
 
319
                const CGNSOptions &options, double scalingFactor=1.0);
296
320
 
297
321
  // Med "Modele d'Echange de Donnees" file format (the static routine
298
322
  // is allowed to load multiple models/meshes)
302
326
               bool saveAll=false, double scalingFactor=1.0);
303
327
 
304
328
  // VTK format
305
 
  int readVTK(const std::string &name);
 
329
  int readVTK(const std::string &name, bool bigEndian=false);
306
330
  int writeVTK(const std::string &name, bool binary=false,
 
331
               bool saveAll=false, double scalingFactor=1.0,
 
332
               bool bigEndian=false);
 
333
 
 
334
  // DIFFPACK format
 
335
  int readDIFF(const std::string &name);
 
336
  int writeDIFF(const std::string &name, bool binary=false,
307
337
               bool saveAll=false, double scalingFactor=1.0);
308
338
};
309
339