Salome HOME
Copyright update 2021
[plugins/ghs3dplugin.git] / src / GHS3DPlugin / GHS3DPlugin_Hypothesis.hxx
index c75610460b6732c2c8e57cc23b4ede0c1d656b23..c023b51726a8295601f55c65a749e3bdf4d96440 100644 (file)
@@ -1,9 +1,9 @@
-// Copyright (C) 2004-2013  CEA/DEN, EDF R&D
+// Copyright (C) 2004-2021  CEA/DEN, EDF R&D
 //
 // 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
@@ -44,7 +44,7 @@ class GHS3DPLUGIN_EXPORT GHS3DPlugin_Hypothesis: public SMESH_Hypothesis
 {
 public:
 
-  GHS3DPlugin_Hypothesis(int hypId, int studyId, SMESH_Gen * gen);
+  GHS3DPlugin_Hypothesis(int hypId, SMESH_Gen * gen);
 
   typedef std::map<std::vector<double>,double> TGHS3DEnforcedVertexCoordsValues;
   typedef std::map<std::string,double> TGHS3DEnforcedVertexEntryValues;
@@ -111,30 +111,50 @@ public:
 
   struct TIDMeshIDCompare {
     bool operator () (const SMDS_MeshElement* e1, const SMDS_MeshElement* e2) const
-    { return e1->getMeshId() == e2->getMeshId() ? e1->GetID() < e2->GetID() : e1->getMeshId() < e2->getMeshId() ; }
+    { return e1->GetMesh() == e2->GetMesh() ? e1->GetID() < e2->GetID() : e1->GetMesh() < e2->GetMesh(); }
   };
   
   typedef std::map<const SMDS_MeshElement*, std::string, TIDMeshIDCompare > TIDSortedElemGroupMap;
   typedef std::map<const SMDS_MeshNode*, std::string, TIDMeshIDCompare > TIDSortedNodeGroupMap;
   typedef std::set<std::string> TSetStrings;
 
-  static const char* GetHypType() { return "GHS3D_Parameters"; }
+  static const char* GetHypType() { return "MG-Tetra Parameters"; }
+
+  void SetMinSize(double theMinSize);
+  double GetMinSize() const { return myMinSize; }
+
+  void SetMaxSize(double theMaxSize);
+  double GetMaxSize() const { return myMaxSize; }
+
+  void SetUseVolumeProximity( bool toUse );
+  bool GetUseVolumeProximity() const { return myUseVolumeProximity; }
+
+  void SetNbVolumeProximityLayers( int nbLayers );
+  int GetNbVolumeProximityLayers() const { return myNbVolumeProximityLayers; }
+
   /*!
    * To mesh "holes" in a solid or not. Default is to mesh.
    */
   void SetToMeshHoles(bool toMesh);
   bool GetToMeshHoles(bool checkFreeOption = false) const;
+  /*!
+   * To make groups of volumes of different domains when mesh is generated from skin.
+   * Default is to make groups.
+   * This option works only (1) for the mesh w/o shape and (2) if GetToMeshHoles() == true
+   */
+  void SetToMakeGroupsOfDomains(bool toMakeGroups);
+  bool GetToMakeGroupsOfDomains() const;
   /*!
    * Maximal size of memory to be used by the algorithm (in Megabytes)
    */
-  void SetMaximumMemory(short MB);
-  short GetMaximumMemory() const;
+  void SetMaximumMemory(float MB);
+  float GetMaximumMemory() const;
   /*!
    * Initial size of memory to be used by the algorithm (in Megabytes) in
    * automatic memory adjustment mode. Default is zero
    */
-  void SetInitialMemory(short MB);
-  short GetInitialMemory() const;
+  void SetInitialMemory(float MB);
+  float GetInitialMemory() const;
   /*!
    * Optimization level: 0-none, 1-light, 2-medium, 3-standard+, 4-strong. Default is medium
    */
@@ -190,14 +210,37 @@ public:
   /*!
    * To set hiden/undocumented/advanced options
    */
-  void SetTextOption(const std::string& option);
-  std::string GetTextOption() const;
+  void SetAdvancedOption(const std::string& option);
+  std::string GetAdvancedOption() const;
   /*!
   * To define the volumic gradation
   */
   void SetGradation(double gradation);
-  double GetGradation() const ;
+  double GetGradation() const;
+  /*!
+  * Print log in standard output
+  */
+  void SetStandardOutputLog(bool logInStandardOutput);
+  bool GetStandardOutputLog() const;
+  /*!
+  * Remove log file on success
+  */
+  void SetRemoveLogOnSuccess(bool removeLogOnSuccess);
+  bool GetRemoveLogOnSuccess() const;
     
+
+  typedef std::map< std::string, std::string > TOptionValues;
+  typedef std::set< std::string >              TOptionNames;
+
+  void SetOptionValue(const std::string& optionName,
+                      const std::string& optionValue);
+  std::string GetOptionValue(const std::string& optionName,
+                             bool*              isDefault=0) const;
+  bool HasOptionDefined( const std::string& optionName ) const;
+  void ClearOption(const std::string& optionName);
+  TOptionValues        GetOptionValues()       const;
+  const TOptionValues& GetCustomOptionValues() const { return _customOption2value; }
+  //static inline const char* NoValue() { return "_"; }
   
 //   struct TEnforcedEdge {
 //     long ID;
@@ -208,28 +251,33 @@ public:
   
 
   /*!
-   * \brief Return command to run ghs3d mesher excluding file prefix (-f)
+   * \brief Return command to run MG-Tetra mesher excluding file prefix (-f)
    */
   static std::string CommandToRun(const GHS3DPlugin_Hypothesis* hyp,
-                                  const bool                    hasShapeToMesh=true);
+                                  const bool                    hasShapeToMesh,
+                                  const bool                    forExucutable);
   /*!
    * \brief Return a unique file name
    */
   static std::string GetFileName(const GHS3DPlugin_Hypothesis* hyp);
+  /*!
+   * \brief Return the name of executable
+   */
+  static std::string GetExeName();
 
   /*!
    * To set an enforced vertex
    */
   bool SetEnforcedVertex(std::string aName, std::string anEntry, std::string aGroupName,
                          double size, double x=0.0, double y=0.0, double z=0.0, bool isCompound = false);
-  TGHS3DEnforcedVertex* GetEnforcedVertex(double x, double y, double z) throw (std::invalid_argument);
-  TGHS3DEnforcedVertex* GetEnforcedVertex(const std::string anEntry) throw (std::invalid_argument);
-  bool RemoveEnforcedVertex(double x=0.0, double y=0.0, double z=0.0, const std::string anEntry="" ) throw (std::invalid_argument);
-  const TGHS3DEnforcedVertexCoordsValues _GetEnforcedVerticesCoordsSize() const {return _enfVertexCoordsSizeList; }
-  const TGHS3DEnforcedVertexEntryValues  _GetEnforcedVerticesEntrySize() const {return _enfVertexEntrySizeList; }
-  const TGHS3DEnforcedVertexList         _GetEnforcedVertices() const { return _enfVertexList; }
-  const TCoordsGHS3DEnforcedVertexMap    _GetEnforcedVerticesByCoords() const { return _coordsEnfVertexMap; }
-  const TGeomEntryGHS3DEnforcedVertexMap _GetEnforcedVerticesByEntry() const { return _geomEntryEnfVertexMap; }
+  TGHS3DEnforcedVertex* GetEnforcedVertex(double x, double y, double z);
+  TGHS3DEnforcedVertex* GetEnforcedVertex(const std::string anEntry);
+  bool RemoveEnforcedVertex(double x=0.0, double y=0.0, double z=0.0, const std::string anEntry="" );
+  const TGHS3DEnforcedVertexCoordsValues& _GetEnforcedVerticesCoordsSize() const {return _enfVertexCoordsSizeList; }
+  const TGHS3DEnforcedVertexEntryValues & _GetEnforcedVerticesEntrySize() const {return _enfVertexEntrySizeList; }
+  const TGHS3DEnforcedVertexList        & _GetEnforcedVertices() const { return _enfVertexList; }
+  const TCoordsGHS3DEnforcedVertexMap   & _GetEnforcedVerticesByCoords() const { return _coordsEnfVertexMap; }
+  const TGeomEntryGHS3DEnforcedVertexMap& _GetEnforcedVerticesByEntry() const { return _geomEntryEnfVertexMap; }
   void ClearEnforcedVertices();
 
   /*!
@@ -263,11 +311,13 @@ public:
   static TIDSortedElemGroupMap GetEnforcedTriangles(const GHS3DPlugin_Hypothesis* hyp);
   static TID2SizeMap GetNodeIDToSizeMap(const GHS3DPlugin_Hypothesis* hyp);
   static TSetStrings GetGroupsToRemove(const GHS3DPlugin_Hypothesis* hyp);
+  static bool GetToMakeGroupsOfDomains(const GHS3DPlugin_Hypothesis* hyp);
   void ClearGroupsToRemove();
   
   static bool   DefaultMeshHoles();
-  static short  DefaultMaximumMemory();
-  static short  DefaultInitialMemory();
+  static bool   DefaultToMakeGroupsOfDomains();
+  static float  DefaultMaximumMemory();
+  static float  DefaultInitialMemory();
   static short  DefaultOptimizationLevel();
   static std::string DefaultWorkingDirectory();
   static bool   DefaultKeepFiles();
@@ -276,29 +326,20 @@ public:
   static bool   DefaultToUseBoundaryRecoveryVersion();
   static bool   DefaultToUseFEMCorrection();
   static bool   DefaultToRemoveCentralPoint();
-  static double DefaultGradation();
-  
-  static TGHS3DEnforcedVertex DefaultGHS3DEnforcedVertex() {return TGHS3DEnforcedVertex();}
-  static TGHS3DEnforcedVertexList DefaultGHS3DEnforcedVertexList() {return TGHS3DEnforcedVertexList();}
-  static TGHS3DEnforcedVertexCoordsValues DefaultGHS3DEnforcedVertexCoordsValues() {return TGHS3DEnforcedVertexCoordsValues();}
-  static TGHS3DEnforcedVertexEntryValues DefaultGHS3DEnforcedVertexEntryValues() {return TGHS3DEnforcedVertexEntryValues();}
-  static TCoordsGHS3DEnforcedVertexMap DefaultCoordsGHS3DEnforcedVertexMap() {return TCoordsGHS3DEnforcedVertexMap();}
-  static TGeomEntryGHS3DEnforcedVertexMap DefaultGeomEntryGHS3DEnforcedVertexMap() {return TGeomEntryGHS3DEnforcedVertexMap();}
-  static TGroupNameGHS3DEnforcedVertexMap DefaultGroupNameGHS3DEnforcedVertexMap() {return TGroupNameGHS3DEnforcedVertexMap();}
-  
-  static TGHS3DEnforcedMesh         DefaultGHS3DEnforcedMesh() {return TGHS3DEnforcedMesh();}
-  static TGHS3DEnforcedMeshList     DefaultGHS3DEnforcedMeshList() {return TGHS3DEnforcedMeshList();}
-  static TEntryGHS3DEnforcedMeshListMap DefaultEntryGHS3DEnforcedMeshListMap() {return TEntryGHS3DEnforcedMeshListMap();}
-  static TIDSortedNodeGroupMap      DefaultIDSortedNodeGroupMap() {return TIDSortedNodeGroupMap();}
-  static TIDSortedElemGroupMap      DefaultIDSortedElemGroupMap() {return TIDSortedElemGroupMap();}
-  static TID2SizeMap                DefaultID2SizeMap() {return TID2SizeMap();}
-  static TSetStrings                DefaultGroupsToRemove() {return TSetStrings();}
-  
+  static bool   DefaultStandardOutputLog();
+  static bool   DefaultRemoveLogOnSuccess();
+  static inline double DefaultGradation() { return 1.05; }
+  static bool   DefaultUseVolumeProximity() { return false; }
+  static int    DefaultNbVolumeProximityLayers() { return 2; }
+   
+  void SetMinMaxSizeDefault( double theMinSize, double theMaxSize )
+  { myMinSizeDefault = theMinSize; myMaxSizeDefault = theMaxSize; }
+  double GetMinSizeDefault() const { return myMinSizeDefault; }
+  double GetMaxSizeDefault() const { return myMaxSizeDefault; }
+
   // Persistence
   virtual std::ostream & SaveTo(std::ostream & save);
   virtual std::istream & LoadFrom(std::istream & load);
-  friend GHS3DPLUGIN_EXPORT std::ostream & operator <<(std::ostream & save, GHS3DPlugin_Hypothesis & hyp);
-  friend GHS3DPLUGIN_EXPORT std::istream & operator >>(std::istream & load, GHS3DPlugin_Hypothesis & hyp);
 
   /*!
    * \brief Does nothing
@@ -306,43 +347,57 @@ public:
   virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
 
   /*!
-   * \brief Does nothing
+   * \brief Sets myToMakeGroupsOfDomains depending on whether theMesh is on shape or not
    */
   virtual bool SetParametersByDefaults(const TDefaults& dflts, const SMESH_Mesh* theMesh=0);
 
-private:
+  static bool  ToBool(const std::string& str, bool* isOk=0);
+  static double ToDbl(const std::string& str, bool* isOk=0);
+  static int    ToInt(const std::string& str, bool* isOk=0);
 
-  bool   myToMeshHoles;
-  short  myMaximumMemory;
-  short  myInitialMemory;
-  short  myOptimizationLevel;
-  bool   myKeepFiles;
+protected:
+
+  bool        myToMeshHoles;
+  bool        myToMakeGroupsOfDomains;
+  float       myMaximumMemory;
+  float       myInitialMemory;
+  short       myOptimizationLevel;
+  bool        myKeepFiles;
   std::string myWorkingDirectory;
-  short  myVerboseLevel;
-  bool   myToCreateNewNodes;
-  bool   myToUseBoundaryRecoveryVersion;
-  bool   myToUseFemCorrection;
-  bool   myToRemoveCentralPoint;
-  std::string myTextOption;
-  double myGradation;
+  short       myVerboseLevel;
+  bool        myToCreateNewNodes;
+  bool        myToUseBoundaryRecoveryVersion;
+  bool        myToUseFemCorrection;
+  bool        myToRemoveCentralPoint;
+  bool        myLogInStandardOutput;
+  bool        myRemoveLogOnSuccess;
+  double      myGradation;
+  bool        myUseVolumeProximity;
+  int         myNbVolumeProximityLayers;
+  double      myMinSize, myMinSizeDefault;
+  double      myMaxSize, myMaxSizeDefault;
+  //std::string myTextOption;
   
-  TGHS3DEnforcedVertexList _enfVertexList;
+  TOptionValues _option2value, _customOption2value;         // user defined values
+  TOptionValues _defaultOptionValues;                       // default values
+  TOptionNames  _doubleOptions, _charOptions, _boolOptions; // to find a type of option
+
+  TGHS3DEnforcedVertexList         _enfVertexList;
   TGHS3DEnforcedVertexCoordsValues _enfVertexCoordsSizeList;
-  TGHS3DEnforcedVertexEntryValues _enfVertexEntrySizeList;
+  TGHS3DEnforcedVertexEntryValues  _enfVertexEntrySizeList;
   // map to get "manual" enf vertex (through the coordinates)
-  TCoordsGHS3DEnforcedVertexMap _coordsEnfVertexMap;
+  TCoordsGHS3DEnforcedVertexMap    _coordsEnfVertexMap;
   // map to get "geom" enf vertex (through the geom entries)
   TGeomEntryGHS3DEnforcedVertexMap _geomEntryEnfVertexMap;
   
   
-  TGHS3DEnforcedMeshList _enfMeshList;
+  TGHS3DEnforcedMeshList                   _enfMeshList;
   // map to get enf meshes through the entries
-  TEntryGHS3DEnforcedMeshListMap _entryEnfMeshMap;
-  TIDSortedNodeGroupMap _enfNodes;
-  TIDSortedElemGroupMap _enfEdges;
-  TIDSortedElemGroupMap _enfTriangles;
-  TID2SizeMap _nodeIDToSizeMap;
-  std::map<std::string, TIDSortedElemSet > _entryToElemsMap;
+  TEntryGHS3DEnforcedMeshListMap           _entryEnfMeshMap;
+  TIDSortedNodeGroupMap                    _enfNodes;
+  TIDSortedElemGroupMap                    _enfEdges;
+  TIDSortedElemGroupMap                    _enfTriangles;
+  TID2SizeMap                              _nodeIDToSizeMap;
   
   TSetStrings _groupsToRemove;
 };