Salome HOME
Updated copyright comment
[plugins/blsurfplugin.git] / idl / BLSURFPlugin_Algorithm.idl
index d26ce5606cc4a856f5361dba9fc7e1f3d10de719..5b889d7f1ef29c0226c7bdaed566925862595fd4 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2024  CEA, EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
-// version 2.1 of the License.
+// version 2.1 of the License, or (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 #ifndef _SMESH_BLSURFALGORITHM_IDL_
 #define _SMESH_BLSURFALGORITHM_IDL_
 
-#include "SMESH_Hypothesis.idl"
 #include "GEOM_Gen.idl"
 #include "SALOME_Exception.idl"
+#include "SMESH_Hypothesis.idl"
+#include "SMESH_Mesh.idl"
 
 /*!
  * BLSURFPlugin: interfaces to BLSURF related hypotheses and algorithms
@@ -37,6 +38,14 @@ module BLSURFPlugin
 {
   typedef sequence<string> string_array;
 
+  // Enforced 1D Mesh
+  struct MG_EnforcedMesh1D
+  {
+    SMESH::SMESH_IDSource mesh;      // mesh, group or sub-mesh
+    string                groupName; // optional name of a group to add mesh edges to
+  };
+  typedef sequence< MG_EnforcedMesh1D > EnforcedMeshesList;
+
   // Enforced vertex name
   typedef string TEnfName;
   // Entry
@@ -44,12 +53,12 @@ module BLSURFPlugin
   typedef sequence<TEntry> TEntryList;
   // Group name
   typedef string TEnfGroupName;
-  
+
   // Coordinates of enforced vertex
   typedef sequence<double,3> TEnfVertexCoords;
   // List of coords
   typedef sequence<TEnfVertexCoords> TEnfVertexCoordsList;
-  
+
   // Enforced vertex
   struct TEnfVertex {
     TEnfName name;
@@ -110,6 +119,23 @@ module BLSURFPlugin
   };
   typedef sequence<TAttractorParams> TAttParamsMap;
   
+  // Periodicity
+  struct TPreCadPeriodicity {
+    TEntry shape1Entry;
+    TEntry shape2Entry;
+    TEntryList theSourceVerticesEntries;
+    TEntryList theTargetVerticesEntries;
+  };
+  
+  typedef sequence<TPreCadPeriodicity> TPeriodicityList;
+
+  // Hyper-patches
+  typedef sequence< long               > THyperPatch;
+  typedef sequence< THyperPatch        > THyperPatchList;
+  typedef sequence< string             > THyperPatchEntries;
+  typedef sequence< THyperPatchEntries > THyperPatchEntriesList;
+  typedef sequence< GEOM::ListOfGO     > THyperPatchShapesList;
+  
   /*!
    * BLSURFPlugin_BLSURF: interface of BLSURF algorithm
    */
@@ -122,17 +148,15 @@ module BLSURFPlugin
    */
   interface BLSURFPlugin_Hypothesis : SMESH::SMESH_Hypothesis
   {
+
     /*!
-     * Sets topology usage way defining how mesh conformity is assured
-     * value=0 - mesh conformity is assured by conformity of a shape
-     * value=1,2 - mesh conformity is assured by pre-processing a CAD model
-     * value=3 - mesh conformity is assured by pre-processing a CAD model with Pre-CAD
+     * Get version of MeshGems suite.
+     * The version is a string in form <major>.<minor>-<patch>. Example: "2.9-6".
      */
-    void SetTopology(in long way);
-    long GetTopology();
+    string GetMeshGemsVersion();
 
     /*!
-     * Sets a way to define size of mesh elements to generate
+     *Set a way to define size of mesh elements to generate
      * 0 - size is defined automatically
      * 1 - size is set by SetPhySize() method
      * 2 - size is set by SetPhySize() method. A sizemap is defined.
@@ -141,79 +165,364 @@ module BLSURFPlugin
     long GetPhysicalMesh();
 
     /*!
-     * Sets size of mesh elements to generate
+     *Set a way to define maximum angular deflection of mesh from CAD model
+     * 0 - deflection is defined automatically
+     * 1 - deflection is set by SetAngleMesh() method
+     * 2 - deflection is set by SetAngleMesh() method. A sizemap is defined (TODO).
+     */
+    void SetGeometricMesh(in long isCustom);
+    long GetGeometricMesh();
+
+    /*!
+     *Set size of mesh elements to generate
      */
     void SetPhySize(in double size);
+    void SetPhySizeRel(in double size);
     double GetPhySize();
+    boolean IsPhySizeRel();
 
     /*!
-     * Sets lower boundary of mesh element size (PhySize)
+     *Set lower boundary of mesh element size
      */
-    void SetPhyMin(in double theMinSize);
-    double GetPhyMin();
+    void SetMinSize(in double theMinSize);
+    void SetMinSizeRel(in double theMinSize);
+    double GetMinSize();
+    boolean IsMinSizeRel();
 
     /*!
-     * Sets upper boundary of mesh element size (PhySize)
+     *Set upper boundary of mesh element size
      */
-    void SetPhyMax(in double theMaxSize);
-    double GetPhyMax();
+    void SetMaxSize(in double theMaxSize);
+    void SetMaxSizeRel(in double theMaxSize);
+    double GetMaxSize();
+    boolean IsMaxSizeRel();
 
     /*!
-     * Sets a way to define maximum angular deflection of mesh from CAD model
-     * 0 - deflection is defined automatically
-     * 1 - deflection is set by SetAngleMeshS() and SetAngleMeshC() methods
+     *Set maximal allowed ratio between the lengths of two adjacent edges
      */
-    void SetGeometricMesh(in long isCustom);
-    long GetGeometricMesh();
+    void SetUseGradation(in boolean toUse);
+    boolean GetUseGradation();
+    void SetGradation(in double ratio);
+    double GetGradation();
 
     /*!
-     * Sets angular deflection (in degrees) of a mesh face from CAD surface
+     *Set maximal allowed ratio between the lengths of two adjacent edges in 3D mesh
      */
-    void SetAngleMeshS(in double angle);
-    double GetAngleMeshS();
+    void SetUseVolumeGradation(in boolean toUse);
+    boolean GetUseVolumeGradation();
+    void SetVolumeGradation(in double ratio);
+    double GetVolumeGradation();
 
     /*!
-     * Sets angular deflection (in degrees) of a mesh edge from CAD curve
+     *Set to create quadrilateral elements or not
      */
-    void SetAngleMeshC(in double angle);
-    double GetAngleMeshC();
+    void SetQuadAllowed(in boolean allowed);
+    void SetElementType(in long elementType);
+    long GetElementType();
 
     /*!
-     * Sets lower boundary of mesh element size computed to respect angular deflection
+     *Set angular deflection (in degrees) of a mesh face and edge from CAD surface
      */
-    void SetGeoMin(in double theMinSize);
-    double GetGeoMin();
+    void SetAngleMesh(in double angle);
+    double GetAngleMesh();
 
     /*!
-     * Sets upper boundary of mesh element size computed to respect angular deflection
+     *Set the maximum desired distance between a triangle and its supporting CAD surface
      */
-    void SetGeoMax(in double theMaxSize);
-    double GetGeoMax();
+    void SetChordalError(in double distance);
+    double GetChordalError();
 
     /*!
-     * Sets maximal allowed ratio between the lengths of two adjacent edges
+     * Determines whether the generated mesh will be isotropic or anisotropic
      */
-    void SetGradation(in double ratio);
-    double GetGradation();
+    void SetAnisotropic(in boolean anisotropic);
+    boolean GetAnisotropic();
 
     /*!
-     * Sets to create quadrilateral elements or not
+     * Defines the maximum anisotropic ratio of the metric governing the anisotropic process.
+     * The default value of 0 means that the metric (and thus the generated elements) 
+     * can be arbitrarily stretched.
      */
-    void SetQuadAllowed(in boolean allowed);
-    boolean GetQuadAllowed();
+    void SetAnisotropicRatio(in double ratio);
+    double GetAnisotropicRatio();
+
+    /*!
+     * This patch-independent correction option can be activated to remove the tiny
+     * (nano) edges from the generated mesh, without taking into account the tags 
+     * (attributes) specifications.
+     */
+    void SetRemoveTinyEdges(in boolean remove);
+    boolean GetRemoveTinyEdges();
+
+    /*!
+     * Defines the minimal length under which an edge is considered to be a tiny one
+     */
+    void SetTinyEdgeLength(in double length);
+    double GetTinyEdgeLength();
+
+    /*!
+     *  This patch-independent correction option can be activated to remove the tiny
+     * edges (defined by the option tiny edge optimisation length) from the generated
+     * mesh when it improves the local mesh quality, without taking into account the
+     * tags (attributes) specifications.
+     */
+    void SetOptimiseTinyEdges(in boolean toOptimise);
+    boolean GetOptimiseTinyEdges();
+
+    /*!
+     * Defines the minimal length under which an edge is considered to be a tiny one
+     * to be optimised out by the optimise tiny edges option
+     */
+    void SetTinyEdgeOptimisationLength(in double length);
+    double GetTinyEdgeOptimisationLength();
+
+    /*!
+     * Activate correction of all surface intersections
+     */
+    void SetCorrectSurfaceIntersection(in boolean toCorrect);
+    boolean GetCorrectSurfaceIntersection();
+
+    /*!
+     * Defines the time the user is ready to spend in the intersection prevention process.
+     * For example, maxCost = 3 means that MeshGems-CADSurf will not spend more time
+     * in the intersection removal process than 3 times the time required to mesh
+     * without processing the intersections.
+     */
+    void SetCorrectSurfaceIntersectionMaxCost(in double maxCost);
+    double GetCorrectSurfaceIntersectionMaxCost();
+
+    /*!
+     * This patch independent correction option can be activated to remove the bad
+     * elements (often called slivers) from the generated mesh, without taking into account
+     * the tags (attributes) specification.
+     */
+    void SetBadElementRemoval(in boolean remove);
+    boolean GetBadElementRemoval();
+
+    /*!
+     * This parameter defines the aspect ratio triggering the "bad element"
+     * classification for the force bad surface element removal option.
+     */
+    void SetBadElementAspectRatio(in double ratio);
+    double GetBadElementAspectRatio();
+
+    /*!
+     * If this option is activated, MeshGems-CADSurf will optimize the mesh in order to
+     * get better shaped elements, during a process which respects the patch independent options.
+     * This optimisation cannot be fully performed when correct_surface_intersections = 1.
+     */
+    void SetOptimizeMesh(in boolean optimize);
+    boolean GetOptimizeMesh();
+
+    /*!
+     * Determines the order of mesh elements to be generated (linear or quadratic)
+     */
+    void SetQuadraticMesh(in boolean quadratic);
+    boolean GetQuadraticMesh();
+
+    /*!
+     *Set topology usage way defining how mesh conformity is assured
+     * value=0 - mesh conformity is assured by conformity of a shape
+     * value=1,2 - mesh conformity is assured by pre-processing a CAD model (OBSOLETE)
+     * value=3 - mesh conformity is assured by pre-processing a CAD model with Pre-CAD
+     */
+    void SetTopology(in long way);
+    long GetTopology();
+
+    
+    /*!
+     *  Activate/deactivate surface proximity computation
+     */
+    void SetSurfaceProximity( in boolean toUse );
+    boolean GetSurfaceProximity();
+
+    /*!
+     * Set number of surface element layers to be generated due to surface proximity
+     */
+    void SetNbSurfaceProximityLayers( in short nbLayers );
+    short GetNbSurfaceProximityLayers();
+
+    /*!
+     * Set coefficient by which size of element refined due to surface proximity is increased
+     */
+    void SetSurfaceProximityRatio( in double ratio );
+    double GetSurfaceProximityRatio();
 
     /*!
-     * To respect geometrical edges or not
+     *  Activate/deactivate volume proximity computation
      */
-    void SetDecimesh(in boolean toIgnoreEdges);
-    boolean GetDecimesh();
+    void SetVolumeProximity( in boolean toUse );
+    boolean GetVolumeProximity();
 
     /*!
-     * Sets verbosity level in the range 0 to 100.
+     * Set number of surface element layers to be generated due to volume proximity
+     */
+    void SetNbVolumeProximityLayers( in short nbLayers );
+    short GetNbVolumeProximityLayers();
+
+    /*!
+     * Set coefficient by which size of element refined due to volume proximity is increased
+     */
+    void SetVolumeProximityRatio( in double ratio );
+    double GetVolumeProximityRatio();
+
+    /*!
+     * Set verbosity level in the range 0 to 10.
      */
     void SetVerbosity(in short theVal) raises (SALOME::SALOME_Exception);
     short GetVerbosity();
 
+    /*!
+     * Set/Get enforced 1D meshes
+     */
+    void SetEnforcedMeshes( in EnforcedMeshesList enforcedMeshes );
+    EnforcedMeshesList GetEnforcedMeshes();
+
+    /*!
+     * Set enforce_cad_edge_sizes parameter
+     *
+     * Relaxes the given sizemap constraint around CAD edges to allow a better
+     * element quality and a better geometric approximation. It is only useful in 
+     * combination with the gradation option.
+     */
+    void SetEnforceCadEdgesSize( in boolean toEnforce );
+    boolean GetEnforceCadEdgesSize();
+
+    /*!
+     * Set jacobian_rectification_respect_geometry parameter
+     *
+     * While making the mesh quadratic, allows to lose the CAD-mesh associativity in order
+     * to correct elements with nagative Jacobian
+     */
+    void SetJacobianRectificationRespectGeometry( in boolean allowRectification );
+    boolean GetJacobianRectificationRespectGeometry();
+    
+    /*!
+     * Set rectify_jacobian parameter
+     *
+     * While making the mesh quadratic, allow to fix nagative Jacobian surface elements
+     */
+    void SetJacobianRectification( in boolean allowRectification );
+    boolean GetJacobianRectification();
+
+    /*!
+     * Set use_deprecated_patch_mesher parameter (compatibility with older versions of Meshgems)
+     *
+     * the use_deprecated_patch_mesher parameter allows to keep the same behaviour than
+     * in salome < 8.3 (meshgems 2.1.11 instead of meshgems >= 2.4.5)
+     */
+    void SetUseDeprecatedPatchMesher( in boolean useDeprecatedPatchMesher );
+    boolean GetUseDeprecatedPatchMesher();
+
+    /*!
+     * Set max_number_of_points_per_patch parameter
+     * 
+     * This parameter controls the maximum amount of points MeshGems-CADSurf is allowed
+     * to generate on a single CAD patch. For an automatic gestion of the memory, one
+     * can set this parameter to 0
+     */
+    void SetMaxNumberOfPointsPerPatch( in long nb ) raises (SALOME::SALOME_Exception);
+    long GetMaxNumberOfPointsPerPatch();
+
+
+    /*!
+     * Set max_number_of_threads parameter
+     *
+     * Set the maximum of threads to use for multithreading mesh computation.
+     */
+    void SetMaxNumberOfThreads( in long nb ) raises (SALOME::SALOME_Exception);
+    long GetMaxNumberOfThreads();
+
+    /*!
+     * Set respect_geometry parameter
+     *
+     *  This patch independent option can be deactivated to allow MeshGems-CADSurf
+     * to lower the geometry accuracy in its patch independent process.
+     */
+    void SetRespectGeometry( in boolean toRespect );
+    boolean GetRespectGeometry();
+
+    /*!
+     * Set tiny_edges_avoid_surface_intersections parameter
+     *
+     * This option defines the priority between the tiny feature
+     * suppression and the surface intersection prevention. 
+     */
+    void SetTinyEdgesAvoidSurfaceIntersections( in boolean toAvoidIntersection );
+    boolean GetTinyEdgesAvoidSurfaceIntersections();
+
+    /*!
+     * Set closed_geometry parameter parameter
+     *
+     *  Describes whether the geometry is expected to be closed or not. 
+     * When activated, this option helps MeshGems-PreCAD to treat the dirtiest geometries.
+     */
+    void SetClosedGeometry( in boolean isClosed );
+    boolean GetClosedGeometry();
+
+    /*!
+     * Set debug parameter
+     *
+     * Make MeshGems-CADSurf will be very verbose and will output some intermediate
+     * files in the working directory. This option is mainly meant for Distene support issues.
+     */
+    void SetDebug( in boolean isDebug );
+    boolean GetDebug();
+
+    /*!
+     * Set periodic_tolerance parameter
+     * 
+     *  This parameter defines the maximum size difference between two periodic edges
+     * and also the maximum distance error between two periodic entities.
+     */
+    void SetPeriodicTolerance( in double tol ) raises (SALOME::SALOME_Exception);
+    double GetPeriodicTolerance() raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Set required_entities parameter
+     *
+     * The required entities control the correction operations. 
+     * Accepted values for this parameter are :
+     * - "respect" : MeshGems-CADSurf is not allowed to alter any required entity, 
+     *             even for correction purposes,
+     * - "ignore" : MeshGems-CADSurf will ignore the required entities in its processing,
+     * - "clear" : MeshGems-CADSurf will clear any required status for the entities. 
+     *           There will not be any entity marked as required in the generated mesh.
+     */
+    void SetRequiredEntities( in string howToTreat ) raises (SALOME::SALOME_Exception);
+    string GetRequiredEntities();
+
+    /*!
+     * Set sewing_tolerance parameter
+     *
+     * This parameter is the tolerance of the assembly.
+     */
+    void SetSewingTolerance( in double tol ) raises (SALOME::SALOME_Exception);
+    double GetSewingTolerance() raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Set tags parameter
+     *
+     *  The tag (attribute) system controls the optimisation process. 
+     *  Accepted values for this parameter are :
+     * - "respect"  : the CAD tags will be preserved and unaltered by the optimisation operations,
+     * - "ignore" : the CAD tags will be ignored by the optimisation operations 
+     *              but they will still be present in the output mesh,
+     * - "clear" : MeshGems-CADSurf will clear any tag on any entity and optimise accordingly. 
+     *             There will not be any tag in the generated mesh.
+     */
+    void SetTags( in string howToTreat ) raises (SALOME::SALOME_Exception);
+    string GetTags();
+
+    /*!
+     * Set hyper-patches
+     */
+    void SetHyperPatches(in THyperPatchList hpl);
+    THyperPatchList GetHyperPatches( in GEOM::GEOM_Object mainShape );
+    void SetHyperPatchShapes(in THyperPatchShapesList hpsl);
+    THyperPatchEntriesList GetHyperPatchShapes();
+    void SetHyperPatchEntries(in THyperPatchEntriesList hpel);
+
     /*!
      * To merges edges.
      */
@@ -221,26 +530,26 @@ module BLSURFPlugin
     boolean GetPreCADMergeEdges();
 
     /*!
-     * To remove nano edges.
+     * To remove duplicate CAD faces.
      */
-    void SetPreCADRemoveNanoEdges(in boolean toRemoveNanoEdges);
-    boolean GetPreCADRemoveNanoEdges();
+    void SetPreCADRemoveDuplicateCADFaces(in boolean toRemoveDuplicateCADFaces);
+    boolean GetPreCADRemoveDuplicateCADFaces();
 
     /*!
-     * To compute topology from scratch
+     * To process 3D topology.
      */
-    void SetPreCADDiscardInput(in boolean toDiscardInput);
-    boolean GetPreCADDiscardInput();
+    void SetPreCADProcess3DTopology(in boolean toProcess);
+    boolean GetPreCADProcess3DTopology();
+
 
     /*!
-     * Sets the length below which an edge is considered as nano 
-     * for the topology processing.
+     * To compute topology from scratch
      */
-    void SetPreCADEpsNano(in double epsNano);
-    double GetPreCADEpsNano();
+    void SetPreCADDiscardInput(in boolean toDiscardInput);
+    boolean GetPreCADDiscardInput();
 
     /*!
-     * Sets advanced option value
+     *Set advanced option value
      */
     void SetOptionValue(in string optionName,
                         in string optionValue) raises (SALOME::SALOME_Exception);
@@ -254,26 +563,39 @@ module BLSURFPlugin
     void UnsetOption(in string optionName);
     void UnsetPreCADOption(in string optionName);
 
+    /*!
+     * Adds custom advanced option and its value
+     */
+    void SetAdvancedOption(in string optionsAndValues) // in a form "option_1 v1 option_2 v2'"
+      raises (SALOME::SALOME_Exception);
+    void AddOption(in string optionName, in string optionValue);
+    void AddPreCADOption(in string optionName, in string optionValue);
+    string GetOption(in string optionName);
+    string GetPreCADOption(in string optionName);
+
     /*!
      * Return array of strings each of which is option name concatenated
-     * with option value devided by semicolon - "option_name:option_value".
+     * with option value devided by semicolon - "option_name:option_value:option_type".
      * Option value is empty if an option is not set.
+     * option_type: 1 if user-define, 0 if default
      * Note: the method is mostly for interaction with GUI.
      */
     string_array GetOptionValues();
     string_array GetPreCADOptionValues();
+    string_array GetAdvancedOptionValues();
 
     /*!
-     * Set option values each in the form "option_name[:option_value]".
+     * Set option values each in the form "option_name[:option_value][:option_type]".
      * Note: the method is mostly for interaction with GUI.
      */
-    void SetOptionValues(in string_array options);
-    void SetPreCADOptionValues(in string_array options);
+    void SetOptionValues(in string_array options) raises (SALOME::SALOME_Exception);
+    void SetPreCADOptionValues(in string_array options) raises (SALOME::SALOME_Exception);
+    void SetAdvancedOptionValues(in string_array options);
 
     /*!
      * SizeMap
      */
-    void SetSizeMapEntries(in string_array sizeMaps);
+    void SetSizeMapEntries(in string_array sizeMaps) raises (SALOME::SALOME_Exception);
     void ClearSizeMaps();
 
     void UnsetEntry(in string entry);
@@ -281,14 +603,16 @@ module BLSURFPlugin
     /*!
      * Set/unset a SizeMap on geom object
      */
-    void         SetSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap);
+    void         SetSizeMap(in GEOM::GEOM_Object GeomObj, in string sizeMap) raises (SALOME::SALOME_Exception);
+    void         SetConstantSizeMap(in GEOM::GEOM_Object GeomObj, in double sizeMap);
     void         UnsetSizeMap(in GEOM::GEOM_Object GeomObj);
     
     /*!
      * Set a SizeMap on geom object given by entry
      */
-    void         SetSizeMapEntry(in string entry, in string sizeMap);
-    string       GetSizeMapEntry(in string entry);
+    void         SetSizeMapEntry(in string entry, in string sizeMap) raises (SALOME::SALOME_Exception);
+    void         SetConstantSizeMapEntry(in string entry, in GEOM::shape_type shapeType, in double sizeMap) raises (SALOME::SALOME_Exception);
+    string       GetSizeMapEntry(in string entry) raises (SALOME::SALOME_Exception);
     string_array GetSizeMapEntries();
 
     /*!
@@ -300,20 +624,21 @@ module BLSURFPlugin
     /*!
      * Set an attractor on geom object given by entry
      */
-    void         SetAttractorEntry(in string entry, in string attractor);
-    string       GetAttractorEntry(in string entry);
+    void         SetAttractorEntry(in string entry, in string attractor) raises (SALOME::SALOME_Exception);
+    string       GetAttractorEntry(in string entry) raises (SALOME::SALOME_Exception);
     string_array GetAttractorEntries();
 
     /*!
      * Set/unset an attractor given as geom object on another geom object
      */
     void         SetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius);
-    void         UnsetAttractorGeom(in GEOM::GEOM_Object GeomObj);
+    void         UnsetAttractorGeom(in GEOM::GEOM_Object GeomObj, in GEOM::GEOM_Object AttractorShape);
+    void         UnsetAttractorEntry(in string entry, in string attractor);
 
     /*!
      * Set an attractor given by entry on a geom object given by entry
      */
-    void         SetClassAttractorEntry(in string entry, in string att_entry, in double StartSize, in double EndSize, in double ActionRadius, in double ConstantRadius );
+    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);
     BLSURFPlugin::TAttParamsMap GetAttractorParams();
 
 /*
@@ -341,6 +666,7 @@ module BLSURFPlugin
    /*!
     * Set/get/unset an enforced vertex on geom face
     */
+    // OBSOLETE
     boolean SetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
     boolean SetEnforcedVertexNamed(in GEOM::GEOM_Object theFace, in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
     boolean SetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
@@ -348,17 +674,27 @@ module BLSURFPlugin
     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);
     boolean SetEnforcedVertexGeomWithGroup(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
 
-    
     TEnfVertexList GetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
-    
     boolean UnsetEnforcedVertex(in GEOM::GEOM_Object theFace, in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
     boolean UnsetEnforcedVertexGeom(in GEOM::GEOM_Object theFace, in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
     boolean UnsetEnforcedVertices(in GEOM::GEOM_Object theFace) raises (SALOME::SALOME_Exception);
     
-   /*!
-    * Set/get/unset an enforced vertex on geom face given by entry
-    */
-    boolean SetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z, 
+    // NEW - no face
+    boolean AddEnforcedVertex(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
+    boolean AddEnforcedVertexNamed(in double x, in double y, in double z, in TEnfName theVertexName) raises (SALOME::SALOME_Exception);
+    boolean AddEnforcedVertexGeom(in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
+    boolean AddEnforcedVertexWithGroup(in double x, in double y, in double z, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
+    boolean AddEnforcedVertexNamedWithGroup(in double x, in double y, in double z, in TEnfName theVertexName, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
+    boolean AddEnforcedVertexGeomWithGroup(in GEOM::GEOM_Object theVertex, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
+
+    boolean RemoveEnforcedVertex(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
+    boolean RemoveEnforcedVertexGeom(in GEOM::GEOM_Object theVertex) raises (SALOME::SALOME_Exception);
+    boolean RemoveEnforcedVertices() raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Set/get/unset an enforced vertex on geom face given by entry
+     */
+    boolean SetEnforcedVertexEntry(in TEntry theFaceEntry, in double x, in double y, in double z,
                                    in TEnfName theVertexName, in TEntry theVertexEntry, in TEnfGroupName groupName) raises (SALOME::SALOME_Exception);
 
     TEnfVertexList GetEnforcedVerticesEntry(in TEntry theFaceEntry) raises (SALOME::SALOME_Exception);
@@ -383,13 +719,27 @@ module BLSURFPlugin
 //    TFaceEntryInternalVerticesList GetAllInternalEnforcedVerticesFaces();
     ///////////////////////
     
+
+    ///////////////////////
+    // PERIODICITY       //
+    ///////////////////////
+
+    void ClearPreCadPeriodicityVectors();
+    void AddPreCadFacesPeriodicity(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2) raises (SALOME::SALOME_Exception);
+    void AddPreCadFacesPeriodicityWithVertices(in GEOM::GEOM_Object theFace1, in GEOM::GEOM_Object theFace2, in GEOM::ListOfGO theSourceVertices, in GEOM::ListOfGO theTargetVertices) raises (SALOME::SALOME_Exception);
+    void AddPreCadFacesPeriodicityEntry(in TEntry theFace1, in TEntry theFace2, in TEntryList theSourceVertices, in TEntryList theTargetVertices)  raises (SALOME::SALOME_Exception);
+    void AddPreCadEdgesPeriodicity(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2) raises (SALOME::SALOME_Exception);
+    void AddPreCadEdgesPeriodicityWithVertices(in GEOM::GEOM_Object theEdge1, in GEOM::GEOM_Object theEdge2, in GEOM::ListOfGO theSourceVertices, in GEOM::ListOfGO theTargetVertices) raises (SALOME::SALOME_Exception);
+    void AddPreCadEdgesPeriodicityEntry(in TEntry theEdge1, in TEntry theEdge2, in TEntryList theSourceVertices, in TEntryList theTargetVertices)  raises (SALOME::SALOME_Exception);
+    TPeriodicityList GetPreCadFacesPeriodicityVector();
+    TPeriodicityList GetPreCadEdgesPeriodicityVector();
+    ///////////////////////
+
     /*!
-     * Sets the file for export resulting mesh in GMF format
+     *Set the file for export resulting mesh in GMF format
      */
-//     void SetGMFFile(in string theFileName, in boolean isBinary);
     void SetGMFFile(in string theFileName);
     string GetGMFFile();
-//     boolean GetGMFFileMode();
   };
 };