Salome HOME
2e4b0014a16a9a1fc18ee5992c3907a5a2317ec6
[plugins/blsurfplugin.git] / idl / BLSURFPlugin_Algorithm.idl
1 // Copyright (C) 2007-2020  CEA/DEN, EDF R&D
2 //
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.
7 //
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.
12 //
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
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 // ---
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)
24 // ---
25 //
26 #ifndef _SMESH_BLSURFALGORITHM_IDL_
27 #define _SMESH_BLSURFALGORITHM_IDL_
28
29 #include "SMESH_Hypothesis.idl"
30 #include "GEOM_Gen.idl"
31 #include "SALOME_Exception.idl"
32
33 /*!
34  * BLSURFPlugin: interfaces to BLSURF related hypotheses and algorithms
35  */
36 module BLSURFPlugin
37 {
38   typedef sequence<string> string_array;
39
40   // Enforced vertex name
41   typedef string TEnfName;
42   // Entry
43   typedef string TEntry;
44   typedef sequence<TEntry> TEntryList;
45   // Group name
46   typedef string TEnfGroupName;
47   
48   // Coordinates of enforced vertex
49   typedef sequence<double,3> TEnfVertexCoords;
50   // List of coords
51   typedef sequence<TEnfVertexCoords> TEnfVertexCoordsList;
52   
53   // Enforced vertex
54   struct TEnfVertex {
55     TEnfName name;
56     TEntry geomEntry;
57     TEnfVertexCoords coords;
58     TEnfGroupName grpName;
59     TEntryList faceEntries;
60   };
61   // List of enforced vertices
62   typedef sequence<TEnfVertex> TEnfVertexList;
63
64   // Map Face Entry / List of enforced vertices
65   struct TFaceEntryEnfVertexListMapElement {
66     TEntry faceEntry;
67     TEnfVertexList enfVertexList;
68   };
69   typedef sequence<TFaceEntryEnfVertexListMapElement> TFaceEntryEnfVertexListMap;
70   
71   // Map Face Entry / List of coords
72   struct TFaceEntryCoordsListMapElement {
73     TEntry faceEntry;
74     TEnfVertexCoordsList coordsList;
75   };
76   typedef sequence<TFaceEntryCoordsListMapElement> TFaceEntryCoordsListMap;
77   
78   // Map Face Entry / List of enf vertex entries
79   struct TFaceEntryEnfVertexEntryListMapElement {
80     TEntry faceEntry;
81     TEntryList enfVertexEntryList;
82   };
83   typedef sequence<TFaceEntryEnfVertexEntryListMapElement> TFaceEntryEnfVertexEntryListMap;
84   
85   // Map Coords / Enforced vertex
86   struct TCoordsEnfVertexElement {
87     TEnfVertexCoords coords;
88     TEnfVertex enfVertex;
89   };
90   typedef sequence<TCoordsEnfVertexElement> TCoordsEnfVertexMap;
91   
92   // Map Enf Vertex Entry / Enforced vertex
93   struct TEnfVertexEntryEnfVertexElement {
94     TEntry enfVertexEntry;
95     TEnfVertex enfVertex;
96   };
97   typedef sequence<TEnfVertexEntryEnfVertexElement> TEnfVertexEntryEnfVertexMap;
98
99   // List of Face Entry with internal enforced vertices activated
100   typedef sequence<TEntry> TFaceEntryInternalVerticesList;
101
102   // Attractors
103   struct TAttractorParams {
104     string faceEntry;
105     string attEntry;
106     double startSize;
107     double endSize;
108     double infDist;
109     double constDist;
110   };
111   typedef sequence<TAttractorParams> TAttParamsMap;
112   
113   // Periodicity
114   struct TPreCadPeriodicity {
115     TEntry shape1Entry;
116     TEntry shape2Entry;
117     TEntryList theSourceVerticesEntries;
118     TEntryList theTargetVerticesEntries;
119   };
120   
121   typedef sequence<TPreCadPeriodicity> TPeriodicityList;
122
123   // Hyper-patches
124   typedef sequence<long> THyperPatch;
125   typedef sequence<THyperPatch> THyperPatchList;
126   
127   /*!
128    * BLSURFPlugin_BLSURF: interface of BLSURF algorithm
129    */
130   interface BLSURFPlugin_BLSURF : SMESH::SMESH_2D_Algo
131   {
132   };
133
134   /*!
135    * BLSURFPlugin_Hypothesis: interface of "BLSURF parameters" hypothesis
136    */
137   interface BLSURFPlugin_Hypothesis : SMESH::SMESH_Hypothesis
138   {
139
140     /*!
141      * Get version of MeshGems suite.
142      * The version is a string in form <major>.<minor>-<patch>. Example: "2.9-6".
143      */
144     string GetMeshGemsVersion();
145
146     /*!
147      *Set a way to define size of mesh elements to generate
148      * 0 - size is defined automatically
149      * 1 - size is set by SetPhySize() method
150      * 2 - size is set by SetPhySize() method. A sizemap is defined.
151      */
152     void SetPhysicalMesh(in long isCustom);
153     long GetPhysicalMesh();
154
155     /*!
156      *Set a way to define maximum angular deflection of mesh from CAD model
157      * 0 - deflection is defined automatically
158      * 1 - deflection is set by SetAngleMesh() method
159      * 2 - deflection is set by SetAngleMesh() method. A sizemap is defined (TODO).
160      */
161     void SetGeometricMesh(in long isCustom);
162     long GetGeometricMesh();
163
164     /*!
165      *Set size of mesh elements to generate
166      */
167     void SetPhySize(in double size);
168     void SetPhySizeRel(in double size);
169     double GetPhySize();
170     boolean IsPhySizeRel();
171
172     /*!
173      *Set lower boundary of mesh element size
174      */
175     void SetMinSize(in double theMinSize);
176     void SetMinSizeRel(in double theMinSize);
177     double GetMinSize();
178     boolean IsMinSizeRel();
179
180     /*!
181      *Set upper boundary of mesh element size
182      */
183     void SetMaxSize(in double theMaxSize);
184     void SetMaxSizeRel(in double theMaxSize);
185     double GetMaxSize();
186     boolean IsMaxSizeRel();
187
188     /*!
189      *Set maximal allowed ratio between the lengths of two adjacent edges
190      */
191     void SetUseGradation(in boolean toUse);
192     boolean GetUseGradation();
193     void SetGradation(in double ratio);
194     double GetGradation();
195
196     /*!
197      *Set maximal allowed ratio between the lengths of two adjacent edges in 3D mesh
198      */
199     void SetUseVolumeGradation(in boolean toUse);
200     boolean GetUseVolumeGradation();
201     void SetVolumeGradation(in double ratio);
202     double GetVolumeGradation();
203
204     /*!
205      *Set to create quadrilateral elements or not
206      */
207     void SetQuadAllowed(in boolean allowed);
208     void SetElementType(in long elementType);
209     long GetElementType();
210
211     /*!
212      *Set angular deflection (in degrees) of a mesh face and edge from CAD surface
213      */
214     void SetAngleMesh(in double angle);
215     double GetAngleMesh();
216
217     /*!
218      *Set the maximum desired distance between a triangle and its supporting CAD surface
219      */
220     void SetChordalError(in double distance);
221     double GetChordalError();
222
223     /*!
224      * Determines whether the generated mesh will be isotropic or anisotropic
225      */
226     void SetAnisotropic(in boolean anisotropic);
227     boolean GetAnisotropic();
228
229     /*!
230      * Defines the maximum anisotropic ratio of the metric governing the anisotropic process.
231      * The default value of 0 means that the metric (and thus the generated elements) 
232      * can be arbitrarily stretched.
233      */
234     void SetAnisotropicRatio(in double ratio);
235     double GetAnisotropicRatio();
236
237     /*!
238      * This patch-independent correction option can be activated to remove the tiny
239      * (nano) edges from the generated mesh, without taking into account the tags 
240      * (attributes) specifications.
241      */
242     void SetRemoveTinyEdges(in boolean remove);
243     boolean GetRemoveTinyEdges();
244
245     /*!
246      * Defines the minimal length under which an edge is considered to be a tiny one
247      */
248     void SetTinyEdgeLength(in double length);
249     double GetTinyEdgeLength();
250
251     /*!
252      *  This patch-independent correction option can be activated to remove the tiny
253      * edges (defined by the option tiny edge optimisation length) from the generated
254      * mesh when it improves the local mesh quality, without taking into account the
255      * tags (attributes) specifications.
256      */
257     void SetOptimiseTinyEdges(in boolean toOptimise);
258     boolean GetOptimiseTinyEdges();
259
260     /*!
261      * Defines the minimal length under which an edge is considered to be a tiny one
262      * to be optimised out by the optimise tiny edges option
263      */
264     void SetTinyEdgeOptimisationLength(in double length);
265     double GetTinyEdgeOptimisationLength();
266
267     /*!
268      * Activate correction of all surface intersections
269      */
270     void SetCorrectSurfaceIntersection(in boolean toCorrect);
271     boolean GetCorrectSurfaceIntersection();
272
273     /*!
274      * Defines the time the user is ready to spend in the intersection prevention process.
275      * For example, maxCost = 3 means that MeshGems-CADSurf will not spend more time
276      * in the intersection removal process than 3 times the time required to mesh
277      * without processing the intersections.
278      */
279     void SetCorrectSurfaceIntersectionMaxCost(in double maxCost);
280     double GetCorrectSurfaceIntersectionMaxCost();
281
282     /*!
283      * This patch independent correction option can be activated to remove the bad
284      * elements (often called slivers) from the generated mesh, without taking into account
285      * the tags (attributes) specification.
286      */
287     void SetBadElementRemoval(in boolean remove);
288     boolean GetBadElementRemoval();
289
290     /*!
291      * This parameter defines the aspect ratio triggering the "bad element"
292      * classification for the force bad surface element removal option.
293      */
294     void SetBadElementAspectRatio(in double ratio);
295     double GetBadElementAspectRatio();
296
297     /*!
298      * If this option is activated, MeshGems-CADSurf will optimize the mesh in order to
299      * get better shaped elements, during a process which respects the patch independent options.
300      * This optimisation cannot be fully performed when correct_surface_intersections = 1.
301      */
302     void SetOptimizeMesh(in boolean optimize);
303     boolean GetOptimizeMesh();
304
305     /*!
306      * Determines the order of mesh elements to be generated (linear or quadratic)
307      */
308     void SetQuadraticMesh(in boolean quadratic);
309     boolean GetQuadraticMesh();
310
311     /*!
312      *Set topology usage way defining how mesh conformity is assured
313      * value=0 - mesh conformity is assured by conformity of a shape
314      * value=1,2 - mesh conformity is assured by pre-processing a CAD model (OBSOLETE)
315      * value=3 - mesh conformity is assured by pre-processing a CAD model with Pre-CAD
316      */
317     void SetTopology(in long way);
318     long GetTopology();
319
320     
321     /*!
322      *  Activate/deactivate surface proximity computation
323      */
324     void SetSurfaceProximity( in boolean toUse );
325     boolean GetSurfaceProximity();
326
327     /*!
328      * Set number of surface element layers to be generated due to surface proximity
329      */
330     void SetNbSurfaceProximityLayers( in short nbLayers );
331     short GetNbSurfaceProximityLayers();
332
333     /*!
334      * Set coefficient by which size of element refined due to surface proximity is increased
335      */
336     void SetSurfaceProximityRatio( in double ratio );
337     double GetSurfaceProximityRatio();
338
339     /*!
340      *  Activate/deactivate volume proximity computation
341      */
342     void SetVolumeProximity( in boolean toUse );
343     boolean GetVolumeProximity();
344
345     /*!
346      * Set number of surface element layers to be generated due to volume proximity
347      */
348     void SetNbVolumeProximityLayers( in short nbLayers );
349     short GetNbVolumeProximityLayers();
350
351     /*!
352      * Set coefficient by which size of element refined due to volume proximity is increased
353      */
354     void SetVolumeProximityRatio( in double ratio );
355     double GetVolumeProximityRatio();
356
357     /*!
358      *Set verbosity level in the range 0 to 100.
359      */
360     void SetVerbosity(in short theVal) raises (SALOME::SALOME_Exception);
361     short GetVerbosity();
362
363     /*!
364      * Set enforce_cad_edge_sizes parameter
365      *
366      * Relaxes the given sizemap constraint around CAD edges to allow a better
367      * element quality and a better geometric approximation. It is only useful in 
368      * combination with the gradation option.
369      */
370     void SetEnforceCadEdgesSize( in boolean toEnforce );
371     boolean GetEnforceCadEdgesSize();
372
373     /*!
374      * Set jacobian_rectification_respect_geometry parameter
375      *
376      * While making the mesh quadratic, allows to lose the CAD-mesh associativity in order
377      * to correct elements with nagative Jacobian
378      */
379     void SetJacobianRectificationRespectGeometry( in boolean allowRectification );
380     boolean GetJacobianRectificationRespectGeometry();
381     
382     /*!
383      * Set rectify_jacobian parameter
384      *
385      * While making the mesh quadratic, allow to fix nagative Jacobian surface elements
386      */
387     void SetJacobianRectification( in boolean allowRectification );
388     boolean GetJacobianRectification();
389
390     /*!
391      * Set use_deprecated_patch_mesher parameter (compatibility with older versions of Meshgems)
392      *
393      * the use_deprecated_patch_mesher parameter allows to keep the same behaviour than
394      * in salome < 8.3 (meshgems 2.1.11 instead of meshgems >= 2.4.5)
395      */
396     void SetUseDeprecatedPatchMesher( in boolean useDeprecatedPatchMesher );
397     boolean GetUseDeprecatedPatchMesher();
398
399     /*!
400      * Set max_number_of_points_per_patch parameter
401      * 
402      * This parameter controls the maximum amount of points MeshGems-CADSurf is allowed
403      * to generate on a single CAD patch. For an automatic gestion of the memory, one
404      * can set this parameter to 0
405      */
406     void SetMaxNumberOfPointsPerPatch( in long nb ) raises (SALOME::SALOME_Exception);
407     long GetMaxNumberOfPointsPerPatch();
408
409
410     /*!
411      * Set max_number_of_threads parameter
412      *
413      * Set the maximum of threads to use for multithreading mesh computation.
414      */
415     void SetMaxNumberOfThreads( in long nb ) raises (SALOME::SALOME_Exception);
416     long GetMaxNumberOfThreads();
417
418     /*!
419      * Set respect_geometry parameter
420      *
421      *  This patch independent option can be deactivated to allow MeshGems-CADSurf
422      * to lower the geometry accuracy in its patch independent process.
423      */
424     void SetRespectGeometry( in boolean toRespect );
425     boolean GetRespectGeometry();
426
427     /*!
428      * Set tiny_edges_avoid_surface_intersections parameter
429      *
430      * This option defines the priority between the tiny feature
431      * suppression and the surface intersection prevention. 
432      */
433     void SetTinyEdgesAvoidSurfaceIntersections( in boolean toAvoidIntersection );
434     boolean GetTinyEdgesAvoidSurfaceIntersections();
435
436     /*!
437      * Set closed_geometry parameter parameter
438      *
439      *  Describes whether the geometry is expected to be closed or not. 
440      * When activated, this option helps MeshGems-PreCAD to treat the dirtiest geometries.
441      */
442     void SetClosedGeometry( in boolean isClosed );
443     boolean GetClosedGeometry();
444
445     /*!
446      * Set debug parameter
447      *
448      * Make MeshGems-CADSurf will be very verbose and will output some intermediate
449      * files in the working directory. This option is mainly meant for Distene support issues.
450      */
451     void SetDebug( in boolean isDebug );
452     boolean GetDebug();
453
454     /*!
455      * Set periodic_tolerance parameter
456      * 
457      *  This parameter defines the maximum size difference between two periodic edges
458      * and also the maximum distance error between two periodic entities.
459      */
460     void SetPeriodicTolerance( in double tol ) raises (SALOME::SALOME_Exception);
461     double GetPeriodicTolerance() raises (SALOME::SALOME_Exception);
462
463     /*!
464      * Set required_entities parameter
465      *
466      * The required entities control the correction operations. 
467      * Accepted values for this parameter are :
468      * - "respect" : MeshGems-CADSurf is not allowed to alter any required entity, 
469      *             even for correction purposes,
470      * - "ignore" : MeshGems-CADSurf will ignore the required entities in its processing,
471      * - "clear" : MeshGems-CADSurf will clear any required status for the entities. 
472      *           There will not be any entity marked as required in the generated mesh.
473      */
474     void SetRequiredEntities( in string howToTreat ) raises (SALOME::SALOME_Exception);
475     string GetRequiredEntities();
476
477     /*!
478      * Set sewing_tolerance parameter
479      *
480      * This parameter is the tolerance of the assembly.
481      */
482     void SetSewingTolerance( in double tol ) raises (SALOME::SALOME_Exception);
483     double GetSewingTolerance() raises (SALOME::SALOME_Exception);
484
485     /*!
486      * Set tags parameter
487      *
488      *  The tag (attribute) system controls the optimisation process. 
489      *  Accepted values for this parameter are :
490      * - "respect"  : the CAD tags will be preserved and unaltered by the optimisation operations,
491      * - "ignore" : the CAD tags will be ignored by the optimisation operations 
492      *              but they will still be present in the output mesh,
493      * - "clear" : MeshGems-CADSurf will clear any tag on any entity and optimise accordingly. 
494      *             There will not be any tag in the generated mesh.
495      */
496     void SetTags( in string howToTreat ) raises (SALOME::SALOME_Exception);
497     string GetTags();
498
499     /*!
500      * Set hyper-patches
501      */
502     void SetHyperPatches(in THyperPatchList hpl);
503     THyperPatchList GetHyperPatches();
504
505     /*!
506      * To merges edges.
507      */
508     void SetPreCADMergeEdges(in boolean toMergeEdges);
509     boolean GetPreCADMergeEdges();
510
511     /*!
512      * To remove duplicate CAD faces.
513      */
514     void SetPreCADRemoveDuplicateCADFaces(in boolean toRemoveDuplicateCADFaces);
515     boolean GetPreCADRemoveDuplicateCADFaces();
516
517     /*!
518      * To process 3D topology.
519      */
520     void SetPreCADProcess3DTopology(in boolean toProcess);
521     boolean GetPreCADProcess3DTopology();
522
523
524     /*!
525      * To compute topology from scratch
526      */
527     void SetPreCADDiscardInput(in boolean toDiscardInput);
528     boolean GetPreCADDiscardInput();
529
530     /*!
531      *Set advanced option value
532      */
533     void SetOptionValue(in string optionName,
534                         in string optionValue) raises (SALOME::SALOME_Exception);
535     void SetPreCADOptionValue(in string optionName,
536                         in string optionValue) raises (SALOME::SALOME_Exception);
537     string GetOptionValue(in string optionName) raises (SALOME::SALOME_Exception);
538     string GetPreCADOptionValue(in string optionName) raises (SALOME::SALOME_Exception);
539     /*!
540      * Unsets advanced option
541      */
542     void UnsetOption(in string optionName);
543     void UnsetPreCADOption(in string optionName);
544
545     /*!
546      * Adds custom advanced option and its value
547      */
548     void SetAdvancedOption(in string optionsAndValues) // in a form "option_1 v1 option_2 v2'"
549       raises (SALOME::SALOME_Exception);
550     void AddOption(in string optionName, in string optionValue);
551     void AddPreCADOption(in string optionName, in string optionValue);
552     string GetOption(in string optionName);
553     string GetPreCADOption(in string optionName);
554
555     /*!
556      * Return array of strings each of which is option name concatenated
557      * with option value devided by semicolon - "option_name:option_value:option_type".
558      * Option value is empty if an option is not set.
559      * option_type: 1 if user-define, 0 if default
560      * Note: the method is mostly for interaction with GUI.
561      */
562     string_array GetOptionValues();
563     string_array GetPreCADOptionValues();
564     string_array GetAdvancedOptionValues();
565
566     /*!
567      * Set option values each in the form "option_name[:option_value][:option_type]".
568      * Note: the method is mostly for interaction with GUI.
569      */
570     void SetOptionValues(in string_array options) raises (SALOME::SALOME_Exception);
571     void SetPreCADOptionValues(in string_array options) raises (SALOME::SALOME_Exception);
572     void SetAdvancedOptionValues(in string_array options);
573
574     /*!
575      * SizeMap
576      */
577     void SetSizeMapEntries(in string_array sizeMaps) raises (SALOME::SALOME_Exception);
578     void ClearSizeMaps();
579
580     void UnsetEntry(in string entry);
581
582     /*!
583      * Set/unset a SizeMap on geom object
584      */
585     void         SetSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap) raises (SALOME::SALOME_Exception);
586     void         SetConstantSizeMap(in GEOM::GEOM_Object GeomObj, in double sizeMap);
587     void         UnsetSizeMap(in GEOM::GEOM_Object GeomObj);
588     
589     /*!
590      * Set a SizeMap on geom object given by entry
591      */
592     void         SetSizeMapEntry(in string entry, in string sizeMap) raises (SALOME::SALOME_Exception);
593     void         SetConstantSizeMapEntry(in string entry, in GEOM::shape_type shapeType, in double sizeMap) raises (SALOME::SALOME_Exception);
594     string       GetSizeMapEntry(in string entry) raises (SALOME::SALOME_Exception);
595     string_array GetSizeMapEntries();
596
597     /*!
598      * Set/unset an attractor on geom object
599      */
600     void         SetAttractor(in GEOM::GEOM_Object GeomObj, in string attractor);
601     void         UnsetAttractor(in GEOM::GEOM_Object GeomObj);
602     
603     /*!
604      * Set an attractor on geom object given by entry
605      */
606     void         SetAttractorEntry(in string entry, in string attractor) raises (SALOME::SALOME_Exception);
607     string       GetAttractorEntry(in string entry) raises (SALOME::SALOME_Exception);
608     string_array GetAttractorEntries();
609
610     /*!
611      * Set/unset an attractor given as geom object on another geom object
612      */
613     void         SetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius);
614     void         UnsetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape);
615     void         UnsetAttractorEntry(in string entry, in string attractor);
616
617     /*!
618      * Set an attractor given by entry on a geom object given by entry
619      */
620     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);
621     BLSURFPlugin::TAttParamsMap GetAttractorParams();
622
623 /*
624     void         SetCustomSizeMapEntry(in string entry, in string sizeMap);
625     string       GetCustomSizeMapEntry(in string entry);
626     void         SetCustomSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap);
627     void         UnsetCustomSizeMap(in GEOM::GEOM_Object GeomObj);
628     string_array GetCustomSizeMapEntries();
629 */
630     ///////////////////////
631     // ENFORCED VERTEXES //
632     ///////////////////////
633     
634     TFaceEntryEnfVertexListMap      GetAllEnforcedVerticesByFace();
635     TEnfVertexList                  GetAllEnforcedVertices();
636     
637     TFaceEntryCoordsListMap         GetAllCoordsByFace();
638     TCoordsEnfVertexMap             GetAllEnforcedVerticesByCoords();
639     
640     TFaceEntryEnfVertexEntryListMap GetAllEnfVertexEntriesByFace();
641     TEnfVertexEntryEnfVertexMap     GetAllEnforcedVerticesByEnfVertexEntry();
642     
643     void                            ClearAllEnforcedVertices();
644     
645    /*!
646     * Set/get/unset an enforced vertex on geom face
647     */
648     // OBSOLETE
649     boolean SetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
650     boolean SetEnforcedVertexNamed(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
651     boolean SetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
652     boolean SetEnforcedVertexWithGroup(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
653     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);
654     boolean SetEnforcedVertexGeomWithGroup(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
655
656     TEnfVertexList GetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
657     boolean UnsetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
658     boolean UnsetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
659     boolean UnsetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
660     
661     // NEW - no face
662     boolean AddEnforcedVertex(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
663     boolean AddEnforcedVertexNamed(in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
664     boolean AddEnforcedVertexGeom(in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
665     boolean AddEnforcedVertexWithGroup(in double x, in double y, in double z, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
666     boolean AddEnforcedVertexNamedWithGroup(in double x, in double y, in double z, in TEnfName theVertexName, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
667     boolean AddEnforcedVertexGeomWithGroup(in GEOM::GEOM_Object theVertex, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
668
669     boolean RemoveEnforcedVertex(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
670     boolean RemoveEnforcedVertexGeom(in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
671     boolean RemoveEnforcedVertices() raises (SALOME::SALOME_Exception);
672
673     /*!
674      * Set/get/unset an enforced vertex on geom face given by entry
675      */
676     boolean SetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z,
677                                    in TEnfName theVertexName, in TEntry theVertexEntry, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
678
679     TEnfVertexList GetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
680     boolean UnsetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z, in TEntry theVertexEntry) raises (SALOME::SALOME_Exception);
681 //    boolean UnsetEnforcedVertexEntryGeom(in TEntry theFaceEntry, in TEntry theVertexEntry) raises (SALOME::SALOME_Exception);
682     boolean UnsetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
683
684     /*!
685      * To get/set internal vertices as enforced vertices
686      */
687     void          SetInternalEnforcedVertexAllFaces(in boolean toEnforceInternalVertices);
688     boolean       GetInternalEnforcedVertexAllFaces();
689     void          SetInternalEnforcedVertexAllFacesGroup(in TEnfGroupName groupName);
690     TEnfGroupName GetInternalEnforcedVertexAllFacesGroup();
691
692 //  Enable internal enforced vertices on specific face if requested by user
693 //    void          SetInternalEnforcedVertex(in GEOM::GEOM_Object theFace,in boolean toEnforceInternalVertices) raises (SALOME::SALOME_Exception);
694 //    void          SetInternalEnforcedVertexWithGroup(in GEOM::GEOM_Object theFace, in boolean toEnforceInternalVertices, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
695 //    void          SetInternalEnforcedVertexEntry(in TEntry theFaceEntry, in boolean toEnforceInternalVertices, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
696 //    boolean       GetInternalEnforcedVertex(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
697 //    boolean       GetInternalEnforcedVertexEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
698 //    TFaceEntryInternalVerticesList GetAllInternalEnforcedVerticesFaces();
699     ///////////////////////
700     
701
702     ///////////////////////
703     // PERIODICITY       //
704     ///////////////////////
705
706     void ClearPreCadPeriodicityVectors();
707     void AddPreCadFacesPeriodicity(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2) raises (SALOME::SALOME_Exception);
708     void AddPreCadFacesPeriodicityWithVertices(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2, in GEOM::ListOfGO theSourceVertices, in GEOM::ListOfGO theTargetVertices) raises (SALOME::SALOME_Exception);
709     void AddPreCadFacesPeriodicityEntry(in TEntry theFace1, in TEntry theFace2, in TEntryList theSourceVertices, in TEntryList theTargetVertices)  raises (SALOME::SALOME_Exception);
710     void AddPreCadEdgesPeriodicity(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2) raises (SALOME::SALOME_Exception);
711     void AddPreCadEdgesPeriodicityWithVertices(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2, in GEOM::ListOfGO theSourceVertices, in GEOM::ListOfGO theTargetVertices) raises (SALOME::SALOME_Exception);
712     void AddPreCadEdgesPeriodicityEntry(in TEntry theEdge1, in TEntry theEdge2, in TEntryList theSourceVertices, in TEntryList theTargetVertices)  raises (SALOME::SALOME_Exception);
713     TPeriodicityList GetPreCadFacesPeriodicityVector();
714     TPeriodicityList GetPreCadEdgesPeriodicityVector();
715     ///////////////////////
716
717     /*!
718      *Set the file for export resulting mesh in GMF format
719      */
720     void SetGMFFile(in string theFileName);
721     string GetGMFFile();
722   };
723 };
724
725 #endif