1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 // File : BLSURFPlugin_Algorithm.idl
22 // Authors : Francis KLOSS (OCC) & Patrick LAUG (INRIA) & Lioka RAZAFINDRAZAKA (CEA)
23 // Size maps developement: Nicolas GEIMER (OCC) & Gilles DAVID (EURIWARE)
26 #ifndef _SMESH_BLSURFALGORITHM_IDL_
27 #define _SMESH_BLSURFALGORITHM_IDL_
29 #include "SMESH_Hypothesis.idl"
30 #include "GEOM_Gen.idl"
31 #include "SALOME_Exception.idl"
34 * BLSURFPlugin: interfaces to BLSURF related hypotheses and algorithms
38 typedef sequence<string> string_array;
40 // Enforced vertex name
41 typedef string TEnfName;
43 typedef string TEntry;
44 typedef sequence<TEntry> TEntryList;
46 typedef string TEnfGroupName;
48 // Coordinates of enforced vertex
49 typedef sequence<double,3> TEnfVertexCoords;
51 typedef sequence<TEnfVertexCoords> TEnfVertexCoordsList;
57 TEnfVertexCoords coords;
58 TEnfGroupName grpName;
59 TEntryList faceEntries;
61 // List of enforced vertices
62 typedef sequence<TEnfVertex> TEnfVertexList;
64 // Map Face Entry / List of enforced vertices
65 struct TFaceEntryEnfVertexListMapElement {
67 TEnfVertexList enfVertexList;
69 typedef sequence<TFaceEntryEnfVertexListMapElement> TFaceEntryEnfVertexListMap;
71 // Map Face Entry / List of coords
72 struct TFaceEntryCoordsListMapElement {
74 TEnfVertexCoordsList coordsList;
76 typedef sequence<TFaceEntryCoordsListMapElement> TFaceEntryCoordsListMap;
78 // Map Face Entry / List of enf vertex entries
79 struct TFaceEntryEnfVertexEntryListMapElement {
81 TEntryList enfVertexEntryList;
83 typedef sequence<TFaceEntryEnfVertexEntryListMapElement> TFaceEntryEnfVertexEntryListMap;
85 // Map Coords / Enforced vertex
86 struct TCoordsEnfVertexElement {
87 TEnfVertexCoords coords;
90 typedef sequence<TCoordsEnfVertexElement> TCoordsEnfVertexMap;
92 // Map Enf Vertex Entry / Enforced vertex
93 struct TEnfVertexEntryEnfVertexElement {
94 TEntry enfVertexEntry;
97 typedef sequence<TEnfVertexEntryEnfVertexElement> TEnfVertexEntryEnfVertexMap;
99 // List of Face Entry with internal enforced vertices activated
100 typedef sequence<TEntry> TFaceEntryInternalVerticesList;
103 struct TAttractorParams {
111 typedef sequence<TAttractorParams> TAttParamsMap;
114 struct TPreCadPeriodicity {
117 TEntryList theSourceVerticesEntries;
118 TEntryList theTargetVerticesEntries;
121 typedef sequence<TPreCadPeriodicity> TPeriodicityList;
124 * BLSURFPlugin_BLSURF: interface of BLSURF algorithm
126 interface BLSURFPlugin_BLSURF : SMESH::SMESH_2D_Algo
131 * BLSURFPlugin_Hypothesis: interface of "BLSURF parameters" hypothesis
133 interface BLSURFPlugin_Hypothesis : SMESH::SMESH_Hypothesis
137 * Sets a way to define size of mesh elements to generate
138 * 0 - size is defined automatically
139 * 1 - size is set by SetPhySize() method
140 * 2 - size is set by SetPhySize() method. A sizemap is defined.
142 void SetPhysicalMesh(in long isCustom);
143 long GetPhysicalMesh();
146 * Sets a way to define maximum angular deflection of mesh from CAD model
147 * 0 - deflection is defined automatically
148 * 1 - deflection is set by SetAngleMesh() method
149 * 2 - deflection is set by SetAngleMesh() method. A sizemap is defined (TODO).
151 void SetGeometricMesh(in long isCustom);
152 long GetGeometricMesh();
155 * Sets size of mesh elements to generate
157 void SetPhySize(in double size);
158 void SetPhySizeRel(in double size);
160 boolean IsPhySizeRel();
163 * Sets lower boundary of mesh element size
165 void SetMinSize(in double theMinSize);
166 void SetMinSizeRel(in double theMinSize);
168 boolean IsMinSizeRel();
171 * Sets upper boundary of mesh element size
173 void SetMaxSize(in double theMaxSize);
174 void SetMaxSizeRel(in double theMaxSize);
176 boolean IsMaxSizeRel();
179 * Sets maximal allowed ratio between the lengths of two adjacent edges
181 void SetGradation(in double ratio);
182 double GetGradation();
185 * Sets to create quadrilateral elements or not
187 void SetQuadAllowed(in boolean allowed);
188 boolean GetQuadAllowed();
191 * Sets angular deflection (in degrees) of a mesh face and edge from CAD surface
193 void SetAngleMesh(in double angle);
194 double GetAngleMesh();
197 * Sets the maximum desired distance between a triangle and its supporting CAD surface
199 void SetChordalError(in double distance);
200 double GetChordalError();
203 * Determines whether the generated mesh will be isotropic or anisotropic
205 void SetAnisotropic(in boolean anisotropic);
206 boolean GetAnisotropic();
209 * Defines the maximum anisotropic ratio of the metric governing the anisotropic process.
210 * The default value of 0 means that the metric (and thus the generated elements)
211 * can be arbitrarily stretched.
213 void SetAnisotropicRatio(in double ratio);
214 double GetAnisotropicRatio();
217 * This patch-independent correction option can be activated to remove the tiny
218 * (nano) edges from the generated mesh, without taking into account the tags
219 * (attributes) specifications.
221 void SetRemoveTinyEdges(in boolean remove);
222 boolean GetRemoveTinyEdges();
225 * Defines the minimal length under which an edge is considered to be a tiny one
227 void SetTinyEdgeLength(in double length);
228 double GetTinyEdgeLength();
231 * This patch independent correction option can be activated to remove the bad
232 * elements (often called slivers) from the generated mesh, without taking into account
233 * the tags (attributes) specification.
235 void SetBadElementRemoval(in boolean remove);
236 boolean GetBadElementRemoval();
239 * This parameter defines the aspect ratio triggering the "bad element"
240 * classification for the force bad surface element removal option.
242 void SetBadElementAspectRatio(in double ratio);
243 double GetBadElementAspectRatio();
246 * If this option is activated, MeshGems-CADSurf will optimize the mesh in order to
247 * get better shaped elements, during a process which respects the patch independent options.
248 * This optimisation cannot be fully performed when correct_surface_intersections = 1.
250 void SetOptimizeMesh(in boolean optimize);
251 boolean GetOptimizeMesh();
254 * Determines the order of mesh elements to be generated (linear or quadratic)
256 void SetQuadraticMesh(in boolean quadratic);
257 boolean GetQuadraticMesh();
260 * Sets topology usage way defining how mesh conformity is assured
261 * value=0 - mesh conformity is assured by conformity of a shape
262 * value=1,2 - mesh conformity is assured by pre-processing a CAD model (OBSOLETE)
263 * value=3 - mesh conformity is assured by pre-processing a CAD model with Pre-CAD
265 void SetTopology(in long way);
269 * Sets verbosity level in the range 0 to 100.
271 void SetVerbosity(in short theVal) raises (SALOME::SALOME_Exception);
272 short GetVerbosity();
277 void SetPreCADMergeEdges(in boolean toMergeEdges);
278 boolean GetPreCADMergeEdges();
281 * To process 3D topology.
283 void SetPreCADProcess3DTopology(in boolean toProcess);
284 boolean GetPreCADProcess3DTopology();
288 * To compute topology from scratch
290 void SetPreCADDiscardInput(in boolean toDiscardInput);
291 boolean GetPreCADDiscardInput();
294 * Sets advanced option value
296 void SetOptionValue(in string optionName,
297 in string optionValue) raises (SALOME::SALOME_Exception);
298 void SetPreCADOptionValue(in string optionName,
299 in string optionValue) raises (SALOME::SALOME_Exception);
300 string GetOptionValue(in string optionName) raises (SALOME::SALOME_Exception);
301 string GetPreCADOptionValue(in string optionName) raises (SALOME::SALOME_Exception);
303 * Unsets advanced option
305 void UnsetOption(in string optionName);
306 void UnsetPreCADOption(in string optionName);
309 * Adds custom advanced option and its value
311 void AddOption(in string optionName, in string optionValue);
312 void AddPreCADOption(in string optionName, in string optionValue);
313 string GetOption(in string optionName);
314 string GetPreCADOption(in string optionName);
317 * Return array of strings each of which is option name concatenated
318 * with option value devided by semicolon - "option_name:option_value:option_type".
319 * Option value is empty if an option is not set.
320 * Note: the method is mostly for interaction with GUI.
322 string_array GetOptionValues();
323 string_array GetPreCADOptionValues();
326 * Set option values each in the form "option_name[:option_value][:option_type]".
327 * Note: the method is mostly for interaction with GUI.
329 void SetOptionValues(in string_array options) raises (SALOME::SALOME_Exception);
330 void SetPreCADOptionValues(in string_array options) raises (SALOME::SALOME_Exception);
335 void SetSizeMapEntries(in string_array sizeMaps) raises (SALOME::SALOME_Exception);
336 void ClearSizeMaps();
338 void UnsetEntry(in string entry);
341 * Set/unset a SizeMap on geom object
343 void SetSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap) raises (SALOME::SALOME_Exception);
344 void SetConstantSizeMap(in GEOM::GEOM_Object GeomObj, in double sizeMap);
345 void UnsetSizeMap(in GEOM::GEOM_Object GeomObj);
348 * Set a SizeMap on geom object given by entry
350 void SetSizeMapEntry(in string entry, in string sizeMap) raises (SALOME::SALOME_Exception);
351 void SetConstantSizeMapEntry(in string entry, in GEOM::shape_type shapeType, in double sizeMap) raises (SALOME::SALOME_Exception);
352 string GetSizeMapEntry(in string entry) raises (SALOME::SALOME_Exception);
353 string_array GetSizeMapEntries();
356 * Set/unset an attractor on geom object
358 void SetAttractor(in GEOM::GEOM_Object GeomObj, in string attractor);
359 void UnsetAttractor(in GEOM::GEOM_Object GeomObj);
362 * Set an attractor on geom object given by entry
364 void SetAttractorEntry(in string entry, in string attractor) raises (SALOME::SALOME_Exception);
365 string GetAttractorEntry(in string entry) raises (SALOME::SALOME_Exception);
366 string_array GetAttractorEntries();
369 * Set/unset an attractor given as geom object on another geom object
371 void SetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius);
372 void UnsetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape);
373 void UnsetAttractorEntry(in string entry, in string attractor);
376 * Set an attractor given by entry on a geom object given by entry
378 void SetClassAttractorEntry(in string entry, in string att_entry, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius ) raises (SALOME::SALOME_Exception);
379 BLSURFPlugin::TAttParamsMap GetAttractorParams();
382 void SetCustomSizeMapEntry(in string entry, in string sizeMap);
383 string GetCustomSizeMapEntry(in string entry);
384 void SetCustomSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap);
385 void UnsetCustomSizeMap(in GEOM::GEOM_Object GeomObj);
386 string_array GetCustomSizeMapEntries();
388 ///////////////////////
389 // ENFORCED VERTEXES //
390 ///////////////////////
392 TFaceEntryEnfVertexListMap GetAllEnforcedVerticesByFace();
393 TEnfVertexList GetAllEnforcedVertices();
395 TFaceEntryCoordsListMap GetAllCoordsByFace();
396 TCoordsEnfVertexMap GetAllEnforcedVerticesByCoords();
398 TFaceEntryEnfVertexEntryListMap GetAllEnfVertexEntriesByFace();
399 TEnfVertexEntryEnfVertexMap GetAllEnforcedVerticesByEnfVertexEntry();
401 void ClearAllEnforcedVertices();
404 * Set/get/unset an enforced vertex on geom face
406 boolean SetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
407 boolean SetEnforcedVertexNamed(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
408 boolean SetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
409 boolean SetEnforcedVertexWithGroup(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
410 boolean SetEnforcedVertexNamedWithGroup(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfName theVertexName, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
411 boolean SetEnforcedVertexGeomWithGroup(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
414 TEnfVertexList GetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
416 boolean UnsetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
417 boolean UnsetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
418 boolean UnsetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
421 * Set/get/unset an enforced vertex on geom face given by entry
423 boolean SetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z,
424 in TEnfName theVertexName, in TEntry theVertexEntry, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
426 TEnfVertexList GetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
427 boolean UnsetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z, in TEntry theVertexEntry) raises (SALOME::SALOME_Exception);
428 // boolean UnsetEnforcedVertexEntryGeom(in TEntry theFaceEntry, in TEntry theVertexEntry) raises (SALOME::SALOME_Exception);
429 boolean UnsetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
432 * To get/set internal vertices as enforced vertices
434 void SetInternalEnforcedVertexAllFaces(in boolean toEnforceInternalVertices);
435 boolean GetInternalEnforcedVertexAllFaces();
436 void SetInternalEnforcedVertexAllFacesGroup(in TEnfGroupName groupName);
437 TEnfGroupName GetInternalEnforcedVertexAllFacesGroup();
439 // Enable internal enforced vertices on specific face if requested by user
440 // void SetInternalEnforcedVertex(in GEOM::GEOM_Object theFace,in boolean toEnforceInternalVertices) raises (SALOME::SALOME_Exception);
441 // void SetInternalEnforcedVertexWithGroup(in GEOM::GEOM_Object theFace, in boolean toEnforceInternalVertices, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
442 // void SetInternalEnforcedVertexEntry(in TEntry theFaceEntry, in boolean toEnforceInternalVertices, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
443 // boolean GetInternalEnforcedVertex(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
444 // boolean GetInternalEnforcedVertexEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
445 // TFaceEntryInternalVerticesList GetAllInternalEnforcedVerticesFaces();
446 ///////////////////////
449 ///////////////////////
451 ///////////////////////
453 void ClearPreCadPeriodicityVectors();
454 void AddPreCadFacesPeriodicity(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2) raises (SALOME::SALOME_Exception);
455 void AddPreCadFacesPeriodicityWithVertices(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2, in GEOM::ListOfGO theSourceVertices, in GEOM::ListOfGO theTargetVertices) raises (SALOME::SALOME_Exception);
456 void AddPreCadFacesPeriodicityEntry(in TEntry theFace1, in TEntry theFace2, in TEntryList theSourceVertices, in TEntryList theTargetVertices) raises (SALOME::SALOME_Exception);
457 void AddPreCadEdgesPeriodicity(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2) raises (SALOME::SALOME_Exception);
458 void AddPreCadEdgesPeriodicityWithVertices(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2, in GEOM::ListOfGO theSourceVertices, in GEOM::ListOfGO theTargetVertices) raises (SALOME::SALOME_Exception);
459 void AddPreCadEdgesPeriodicityEntry(in TEntry theEdge1, in TEntry theEdge2, in TEntryList theSourceVertices, in TEntryList theTargetVertices) raises (SALOME::SALOME_Exception);
460 void AddFacePeriodicity(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2) raises (SALOME::SALOME_Exception);
461 void AddEdgePeriodicity(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theFace2, in GEOM::GEOM_Object theEdge2, in long edge_orientation) raises (SALOME::SALOME_Exception);
462 void AddEdgePeriodicityWithoutFaces(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2, in long edge_orientation) raises (SALOME::SALOME_Exception);
463 void AddVertexPeriodicity(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theVertex1, in GEOM::GEOM_Object theEdge2, in GEOM::GEOM_Object theVertex2) raises (SALOME::SALOME_Exception);
464 TPeriodicityList GetPreCadFacesPeriodicityVector();
465 TPeriodicityList GetPreCadEdgesPeriodicityVector();
466 ///////////////////////
469 * Sets the file for export resulting mesh in GMF format
471 // void SetGMFFile(in string theFileName, in boolean isBinary);
472 void SetGMFFile(in string theFileName);
474 // boolean GetGMFFileMode();
477 // Obsolete methods - To be removed in V7
479 void SetPhyMin(in double theMinSize);
481 void SetPhyMax(in double theMaxSize);
483 void SetGeoMin(in double theMinSize);
485 void SetGeoMax(in double theMaxSize);
487 void SetAngleMeshS(in double angle);
488 double GetAngleMeshS();
489 void SetAngleMeshC(in double angle);
490 double GetAngleMeshC();
491 void SetDecimesh(in boolean toIgnoreEdges);
492 boolean GetDecimesh();
493 void SetPreCADRemoveNanoEdges(in boolean toRemoveNanoEdges);
494 boolean GetPreCADRemoveNanoEdges();
495 void SetPreCADEpsNano(in double epsNano);
496 double GetPreCADEpsNano();