Salome HOME
[bos #40653][CEA] New mesh import export formats with meshio.
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i.hxx
index f94e5395e9126670fcae2b0c0932457045222541..1b3af8ad506a974b952fb06192d4bb42e1a33e9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -35,6 +35,7 @@
 #include CORBA_CLIENT_HEADER(GEOM_Gen)
 #include CORBA_CLIENT_HEADER(SALOMEDS)
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh_i.hxx"
@@ -45,6 +46,7 @@
 #include <Utils_CorbaException.hxx>
 
 #include <GEOM_Client.hxx>
+#include <smIdType.hxx>
 
 #include <TCollection_AsciiString.hxx>
 #include <Resource_DataMapOfAsciiStringAsciiString.hxx>
@@ -93,9 +95,7 @@ private:
 // ===========================================================
 // SMESH module's engine
 // ==========================================================
-class SMESH_I_EXPORT SMESH_Gen_i:
-  public virtual POA_SMESH::SMESH_Gen,
-  public virtual Engines_Component_i
+class SMESH_I_EXPORT SMESH_Gen_i : public POA_SMESH::SMESH_Gen, public Engines_Component_i
 {
 public:
   // Get last created instance of the class
@@ -104,24 +104,36 @@ public:
   static CORBA::ORB_var GetORB() { return myOrb;}
   // Get SMESH module's POA object
   static PortableServer::POA_var GetPOA() { return myPoa;}
+  // Set Naming Service object
+  static void SetNS(SALOME_NamingService_Abstract *ns);
   // Get Naming Service object
-  static SALOME_NamingService* GetNS();
+  static SALOME_NamingService_Abstract* GetNS();
   // Get SALOME_LifeCycleCORBA object
   static SALOME_LifeCycleCORBA* GetLCC();
   // Retrieve and get GEOM engine reference
-  static GEOM::GEOM_Gen_var GetGeomEngine();
+  static GEOM::GEOM_Gen_var GetGeomEngine( GEOM::GEOM_Object_ptr );
+  // Retrieve Study depending on Session / Standalone mode
+  virtual GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper ) = 0;
+  SALOMEDS::Study_var getStudyServant() const { return this->getStudyServantVirtual(); }
+  virtual SALOMEDS::Study_var getStudyServantVirtual() const = 0 ;
+  virtual SALOME_ModuleCatalog::ModuleCatalog_var getModuleCatalog() const = 0;
+  SALOMEDS::SObject_ptr publish(CORBA::Object_ptr     theIOR,
+                                SALOMEDS::SObject_ptr theFatherObject,
+                                const int             theTag = 0,
+                                const char*           thePixMap = 0,
+                                const bool            theSelectable = true);
   // Get object of the CORBA reference
   static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject );
   // Get CORBA object corresponding to the SALOMEDS::SObject
   static CORBA::Object_var SObjectToObject( SALOMEDS::SObject_ptr theSObject );
   // Get the SALOMEDS::SObject corresponding to a CORBA object
-  static SALOMEDS::SObject_ptr ObjectToSObject(CORBA::Object_ptr theObject);
-  // Get the SALOMEDS::Study from naming service
-  static SALOMEDS::Study_var getStudyServant();
+  SALOMEDS::SObject_ptr ObjectToSObject( CORBA::Object_ptr theObject );
   // Get GEOM Object corresponding to TopoDS_Shape
-  GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape );
+  static GEOM::GEOM_Object_ptr ShapeToGeomObject( const TopoDS_Shape& theShape );
   // Get TopoDS_Shape corresponding to GEOM_Object
-  TopoDS_Shape GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject);
+  static TopoDS_Shape GeomObjectToShape( GEOM::GEOM_Object_ptr theGeomObject );
+  // Get GEOM Object by its study entry
+  static GEOM::GEOM_Object_ptr GetGeomObjectByEntry( const std::string& entry );
 
   // Default constructor
   SMESH_Gen_i();
@@ -130,7 +142,8 @@ public:
                PortableServer::POA_ptr   poa,
                PortableServer::ObjectId* contId,
                const char*               instanceName,
-               const char*               interfaceName );
+               const char*               interfaceName,
+               bool                      checkNS = true);
   // Destructor
   virtual ~SMESH_Gen_i();
 
@@ -158,18 +171,28 @@ public:
   // Update study
   void UpdateStudy();
 
-  // Create hypothesis/algorothm of given type
+  // Do provide info on objects
+  bool hasObjectInfo();
+
+  // Return an information for a given object
+  char* getObjectInfo(const char* entry);
+
+  // Create hypothesis/algorithm of given type
   SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType,
-                                                const char* theLibName)
-    throw ( SALOME::SALOME_Exception );
+                                                const char* theLibName);
+
+  SMESH::SMESH_Hypothesis_ptr CreateHypothesisByAverageLength( const char*    theHypType,
+                                                               const char*    theLibName,
+                                                               CORBA::Double  theAverageLength,
+                                                               CORBA::Boolean theQuadDominated);
 
   // Return hypothesis of given type holding parameter values of the existing mesh
-  SMESH::SMESH_Hypothesis_ptr GetHypothesisParameterValues (const char*           theHypType,
-                                                            const char*           theLibName,
-                                                            SMESH::SMESH_Mesh_ptr theMesh,
-                                                            GEOM::GEOM_Object_ptr theGeom,
-                                                            CORBA::Boolean        byMesh)
-    throw ( SALOME::SALOME_Exception );
+  SMESH::SMESH_Hypothesis_ptr
+    GetHypothesisParameterValues (const char*                 theHypType,
+                                  const char*                 theLibName,
+                                  SMESH::SMESH_Mesh_ptr       theMesh,
+                                  GEOM::GEOM_Object_ptr       theGeom,
+                                  const SMESH::HypInitParams& theWay);
 
   /*
    * Returns True if a hypothesis is assigned to a sole sub-mesh in a current Study
@@ -184,11 +207,11 @@ public:
    * Sets number of segments per diagonal of boundary box of geometry by which
    * default segment length of appropriate 1D hypotheses is defined
    */
-  void SetBoundaryBoxSegmentation( CORBA::Long theNbSegments ) throw ( SALOME::SALOME_Exception );
+  void SetBoundaryBoxSegmentation( CORBA::Long theNbSegments );
   /*!
    * \brief Sets default number of segments per edge
    */
-  void SetDefaultNbSegments(CORBA::Long theNbSegments) throw ( SALOME::SALOME_Exception );
+  void SetDefaultNbSegments(CORBA::Long theNbSegments);
 
   /*!
     Set an option value
@@ -206,48 +229,47 @@ public:
 
 
   // Create empty mesh on a shape
-  SMESH::SMESH_Mesh_ptr CreateMesh( GEOM::GEOM_Object_ptr theShapeObject )
-    throw ( SALOME::SALOME_Exception );
+  SMESH::SMESH_Mesh_ptr CreateMesh( GEOM::GEOM_Object_ptr theShapeObject );
+
+  // Create empty parallel mesh on a shape
+  SMESH::SMESH_ParallelMesh_ptr CreateParallelMesh( GEOM::GEOM_Object_ptr theShapeObject );
 
   // Create empty mesh
-  SMESH::SMESH_Mesh_ptr CreateEmptyMesh()
-    throw ( SALOME::SALOME_Exception );
+  SMESH::SMESH_Mesh_ptr CreateEmptyMesh();
 
   //  Create a mesh and import data from an UNV file
-  SMESH::SMESH_Mesh_ptr CreateMeshesFromUNV( const char* theFileName )
-    throw ( SALOME::SALOME_Exception );
+  SMESH::SMESH_Mesh_ptr CreateMeshesFromUNV( const char* theFileName );
 
   //  Create mesh(es) and import data from MED file
   SMESH::mesh_array* CreateMeshesFromMED( const char* theFileName,
-                                          SMESH::DriverMED_ReadStatus& theStatus )
-    throw ( SALOME::SALOME_Exception );
-
-  //  Create mesh(es) and import data from MED file
-  SMESH::mesh_array* CreateMeshesFromSAUV( const char* theFileName,
-                                           SMESH::DriverMED_ReadStatus& theStatus )
-    throw ( SALOME::SALOME_Exception );
+                                          SMESH::DriverMED_ReadStatus& theStatus );
 
   //  Create a mesh and import data from a STL file
-  SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName )
-    throw ( SALOME::SALOME_Exception );
+  SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName );
 
   //  Create mesh(es) and import data from CGNS file
   SMESH::mesh_array* CreateMeshesFromCGNS( const char* theFileName,
-                                           SMESH::DriverMED_ReadStatus& theStatus )
-    throw ( SALOME::SALOME_Exception );
+                                           SMESH::DriverMED_ReadStatus& theStatus );
 
   //  Create a mesh and import data from a GMF file
   SMESH::SMESH_Mesh_ptr CreateMeshesFromGMF( const char*             theFileName,
                                              CORBA::Boolean          theMakeRequiredGroups,
-                                             SMESH::ComputeError_out theError)
-    throw ( SALOME::SALOME_Exception );
+                                             SMESH::ComputeError_out theError);
+
+  //  Create a mesh and import data from any file supported by meshio library
+  SMESH::mesh_array* CreateMeshesFromMESHIO(const char*             theFileName,
+                                            SMESH::DriverMED_ReadStatus& theStatus);
+
+  // Create dual mesh of a tetrahedron mesh
+  SMESH::SMESH_Mesh_ptr CreateDualMesh(SMESH::SMESH_IDSource_ptr meshPart,
+                                       const char*               meshName,
+                                       CORBA::Boolean            adapt_to_shape);
 
   // Copy a part of mesh
   SMESH::SMESH_Mesh_ptr CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
                                  const char*               meshName,
                                  CORBA::Boolean            toCopyGroups,
-                                 CORBA::Boolean            toKeepIDs)
-    throw ( SALOME::SALOME_Exception );
+                                 CORBA::Boolean            toKeepIDs);
 
   // Create a mesh by copying definitions of another mesh to a given geometry
   CORBA::Boolean CopyMeshWithGeom( SMESH::SMESH_Mesh_ptr       sourceMesh,
@@ -260,13 +282,11 @@ public:
                                    SMESH::ListOfGroups_out     newGroups,
                                    SMESH::submesh_array_out    newSubmeshes,
                                    SMESH::ListOfHypothesis_out newHypotheses,
-                                   SMESH::string_array_out     invalidEntries)
-    throw ( SALOME::SALOME_Exception );
+                                   SMESH::string_array_out     invalidEntries);
 
     // Compute mesh on a shape
   CORBA::Boolean Compute( SMESH::SMESH_Mesh_ptr theMesh,
-                          GEOM::GEOM_Object_ptr theShapeObject )
-    throw ( SALOME::SALOME_Exception );
+                          GEOM::GEOM_Object_ptr theShapeObject );
 
   // Cancel Compute mesh on a shape
   void CancelCompute( SMESH::SMESH_Mesh_ptr theMesh,
@@ -276,22 +296,19 @@ public:
    * \brief Return errors of mesh computation
    */
   SMESH::compute_error_array* GetComputeErrors(SMESH::SMESH_Mesh_ptr theMesh,
-                                               GEOM::GEOM_Object_ptr  theShapeObject )
-    throw ( SALOME::SALOME_Exception );
+                                               GEOM::GEOM_Object_ptr  theShapeObject );
 
   /*!
    * Evaluate mesh on a shape and
    *  returns statistic of mesh elements
    * Result array of number enityties
    */
-  SMESH::long_array* Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
-                              GEOM::GEOM_Object_ptr theShapeObject)
-    throw ( SALOME::SALOME_Exception );
+  SMESH::smIdType_array* Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
+                              GEOM::GEOM_Object_ptr theShapeObject);
 
   // Returns true if mesh contains enough data to be computed
   CORBA::Boolean IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh,
-                                   GEOM::GEOM_Object_ptr theShapeObject )
-    throw ( SALOME::SALOME_Exception );
+                                   GEOM::GEOM_Object_ptr theShapeObject );
 
   /*!
    * Calculate Mesh as preview till indicated dimension on shape
@@ -301,40 +318,33 @@ public:
   SMESH::MeshPreviewStruct* Precompute( SMESH::SMESH_Mesh_ptr theMesh,
                                         GEOM::GEOM_Object_ptr theSubObject,
                                         SMESH::Dimension      theDimension,
-                                        SMESH::long_array&    theShapesId )
-    throw ( SALOME::SALOME_Exception );
+                                        SMESH::long_array&    theShapesId );
 
   // Returns errors of hypotheses definition
   SMESH::algo_error_array* GetAlgoState( SMESH::SMESH_Mesh_ptr theMesh,
-                                         GEOM::GEOM_Object_ptr theSubObject )
-    throw ( SALOME::SALOME_Exception );
+                                         GEOM::GEOM_Object_ptr theSubObject );
 
   // Return mesh elements preventing computation of a subshape
   SMESH::MeshPreviewStruct* GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
-                                                 CORBA::Short          theSubShapeID )
-    throw ( SALOME::SALOME_Exception );
+                                                 CORBA::Short          theSubShapeID );
 
   // Create groups of elements preventing computation of a sub-shape
   SMESH::ListOfGroups* MakeGroupsOfBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
                                                      CORBA::Short          theSubShapeID,
-                                                     const char*           theGroupName)
-    throw ( SALOME::SALOME_Exception );
+                                                     const char*           theGroupName);
 
   // Get sub-shapes unique ID's list
   SMESH::long_array* GetSubShapesId( GEOM::GEOM_Object_ptr      theMainShapeObject,
-                                     const SMESH::object_array& theListOfSubShape )
-    throw ( SALOME::SALOME_Exception );
+                                     const SMESH::object_array& theListOfSubShape );
 
   // Return geometrical object the given element is built on. Publish it in study.
   GEOM::GEOM_Object_ptr GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
-                                                  CORBA::Long            theElementID,
-                                                  const char*            theGeomName)
-    throw ( SALOME::SALOME_Exception );
+                                                  SMESH::smIdType        theElementID,
+                                                  const char*            theGeomName);
 
   // Return geometrical object the given element is built on. Don't publish it in study.
   GEOM::GEOM_Object_ptr FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
-                                                   CORBA::Long            theElementID)
-    throw ( SALOME::SALOME_Exception );
+                                                   SMESH::smIdType        theElementID);
 
   // Concatenate the given meshes into one mesh
   SMESH::SMESH_Mesh_ptr ConcatenateCommon(const SMESH::ListOfIDSources& meshesArray,
@@ -342,16 +352,14 @@ public:
                                           CORBA::Boolean                mergeNodesAndElements,
                                           CORBA::Double                 mergeTolerance,
                                           CORBA::Boolean                commonGroups,
-                                          SMESH::SMESH_Mesh_ptr         meshToAppendTo)
-    throw ( SALOME::SALOME_Exception );
+                                          SMESH::SMESH_Mesh_ptr         meshToAppendTo);
 
   // Concatenate the given meshes into one mesh
   SMESH::SMESH_Mesh_ptr Concatenate(const SMESH::ListOfIDSources& meshesArray,
                                     CORBA::Boolean                uniteIdenticalGroups,
                                     CORBA::Boolean                mergeNodesAndElements,
                                     CORBA::Double                 mergeTolerance,
-                                    SMESH::SMESH_Mesh_ptr         meshToAppendTo)
-    throw ( SALOME::SALOME_Exception );
+                                    SMESH::SMESH_Mesh_ptr         meshToAppendTo);
 
   // Concatenate the given meshes into one mesh
   // Create the groups of all elements from initial meshes
@@ -359,8 +367,7 @@ public:
                                               CORBA::Boolean                uniteIdenticalGroups,
                                               CORBA::Boolean                mergeNodesAndElements,
                                               CORBA::Double                 mergeTolerance,
-                                              SMESH::SMESH_Mesh_ptr         meshToAppendTo)
-    throw ( SALOME::SALOME_Exception );
+                                              SMESH::SMESH_Mesh_ptr         meshToAppendTo);
 
   // Get version of MED format being used.
   char* GetMEDFileVersion();
@@ -431,19 +438,18 @@ public:
   // Publish object in the study
   SALOMEDS::SObject_ptr PublishInStudy( SALOMEDS::SObject_ptr theSObject,
                                         CORBA::Object_ptr     theObject,
-                                        const char*           theName )
-    throw ( SALOME::SALOME_Exception );
+                                        const char*           theName );
 
   // Copy-paste methods - returns true if object can be copied to the clipboard
-  CORBA::Boolean CanCopy( SALOMEDS::SObject_ptr theObject ) { return false; }
+  CORBA::Boolean CanCopy( SALOMEDS::SObject_ptr /*theObject*/ ) { return false; }
   // Copy-paste methods - copy object to the clipboard
-  SALOMEDS::TMPFile* CopyFrom( SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID ) { return NULL; }
+  SALOMEDS::TMPFile* CopyFrom( SALOMEDS::SObject_ptr /*theObject*/, CORBA::Long& /*theObjectID*/ ) { return NULL; }
   // Copy-paste methods - returns true if object can be pasted from the clipboard
-  CORBA::Boolean CanPaste( const char* theComponentName, CORBA::Long theObjectID ) { return false; }
+  CORBA::Boolean CanPaste( const char* /*theComponentName*/, CORBA::Long /*theObjectID*/ ) { return false; }
   // Copy-paste methods - paste object from the clipboard
-  SALOMEDS::SObject_ptr PasteInto( const SALOMEDS::TMPFile& theStream,
-                                   CORBA::Long              theObjectID,
-                                   SALOMEDS::SObject_ptr    theObject ) {
+  SALOMEDS::SObject_ptr PasteInto( const SALOMEDS::TMPFile& /*theStream*/,
+                                   CORBA::Long              /*theObjectID*/,
+                                   SALOMEDS::SObject_ptr    /*theObject*/ ) {
     SALOMEDS::SObject_var aResultSO;
     return aResultSO._retn();
   }
@@ -480,6 +486,14 @@ public:
 
   void CleanPythonTrace();
 
+  int CountInPyDump(const TCollection_AsciiString& text);
+
+  SMESH::MG_ADAPT_ptr CreateMG_ADAPT();
+  SMESHHOMARD::HOMARD_Gen_ptr CreateHOMARD_ADAPT();
+  SMESH::MG_ADAPT_ptr CreateAdaptationHypothesis();
+  //SMESH::MG_ADAPT_OBJECT_ptr Adaptation( const char* adaptationType);
+  SALOME::GenericObj_ptr Adaptation( const char* adaptationType);
+
   // *****************************************
   // Internal methods
   // *****************************************
@@ -523,6 +537,7 @@ public:
                                       const char*            theName = 0);
   void UpdateIcons(SMESH::SMESH_Mesh_ptr theMesh);
   void HighLightInvalid(CORBA::Object_ptr theObject, bool isInvalid);
+  bool IsInvalid(SALOMEDS::SObject_ptr theObject);
   bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr       theMesh,
                             GEOM::GEOM_Object_ptr       theShapeObject,
                             SMESH::SMESH_Hypothesis_ptr theHyp);
@@ -531,12 +546,12 @@ public:
                                  SMESH::SMESH_Hypothesis_ptr theHyp);
   SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh,
                                                  GEOM::GEOM_Object_ptr theShape);
-  static void SetName(SALOMEDS::SObject_ptr theSObject,
-                      const char*           theName,
-                      const char*           theDefaultName = 0);
+  void SetName(SALOMEDS::SObject_ptr theSObject,
+              const char*           theName,
+              const char*           theDefaultName = 0);
 
-  static void SetPixMap(SALOMEDS::SObject_ptr theSObject,
-                        const char*           thePixMap);
+  void SetPixMap(SALOMEDS::SObject_ptr theSObject, const char *thePixMap);
+  void addReference (SALOMEDS::SObject_ptr theSObject, CORBA::Object_ptr theToObject, int theTag = 0);
 
   //  Get study context
   StudyContext* GetStudyContext();
@@ -618,14 +633,16 @@ private:
   // Get hypothesis creator
   GenericHypothesisCreator_i* getHypothesisCreator( const char*  theHypName,
                                                     const char*  theLibName,
-                                                    std::string& thePlatformLibName)
-  throw ( SALOME::SALOME_Exception );
+                                                    std::string& thePlatformLibName);
   // Create hypothesis of given type
   SMESH::SMESH_Hypothesis_ptr createHypothesis( const char* theHypName,
                                                 const char* theLibName);
   // Create empty mesh on shape
-  SMESH::SMESH_Mesh_ptr createMesh()
-    throw ( SALOME::SALOME_Exception );
+  SMESH::SMESH_Mesh_ptr createMesh();
+  SMESH::SMESH_ParallelMesh_ptr createParallelMesh();
+
+  // Check mesh icon
+  bool isGeomModifIcon( SMESH::SMESH_Mesh_ptr mesh );
 
   // Create a sub-mesh on a geometry that is not a sub-shape of the main shape
   // for the case where a valid sub-shape not found by CopyMeshWithGeom()
@@ -635,23 +652,17 @@ private:
 
   void highLightInvalid( SALOMEDS::SObject_ptr theSObject, bool isInvalid );
 
-  static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot );
-
-  SMESH::mesh_array* CreateMeshesFromMEDorSAUV( const char* theFileName,
-                                                SMESH::DriverMED_ReadStatus& theStatus,
-                                                const char* theCommandNameForPython,
-                                                const char* theFileNameForPython);
-
   std::vector<long> _GetInside(SMESH::SMESH_IDSource_ptr meshPart,
-                               SMESH::ElementType     theElemType,
-                               TopoDS_Shape& aShape,
-                               double* theTolerance = NULL);
+                               SMESH::ElementType        ElemType,
+                               const TopoDS_Shape&       Shape,
+                               double*                   Tolerance = NULL);
 
-private:
+protected:
   static GEOM::GEOM_Gen_var      myGeomGen;
+  static SALOME_NamingService_Abstract*   myNS;          // Naming Service
+private:
   static CORBA::ORB_var          myOrb;         // ORB reference
   static PortableServer::POA_var myPoa;         // POA reference
-  static SALOME_NamingService*   myNS;          // Naming Service
   static SALOME_LifeCycleCORBA*  myLCC;         // Life Cycle CORBA
   static SMESH_Gen_i*            mySMESHGen;    // Point to last created instance of the class
   ::SMESH_Gen                    myGen;         // SMESH_Gen local implementation