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