Salome HOME
22244: [CEA] Method to compute the normal to a mesh face
[modules/smesh.git] / src / SMESH_I / SMESH_Mesh_i.hxx
index 0c2a3ca97c62b58a103bb9d304e007bf92f33905..f83347539ae8dc3312913dadc38a4d6d1c52fe6b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2013  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include "SMESH.hxx"
 
+#include "SMESH_Hypothesis.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_subMesh.hxx"
+
+#include <SALOME_GenericObj_i.hh>
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
 #include CORBA_CLIENT_HEADER(GEOM_Gen)
-#include CORBA_CLIENT_HEADER(MED)
 
-#include "SMESH_Hypothesis.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_subMesh.hxx"
-
-#include "SALOME_GenericObj_i.hh"
+#include <map>
 
 class SMESH_Gen_i;
 class SMESH_GroupBase_i;
 class SMESH_subMesh_i;
 class SMESH_PreMeshInfo;
-
-#include <map>
+class SMESH_MeshEditor_i;
 
 class SMESH_I_EXPORT SMESH_Mesh_i:
   public virtual POA_SMESH::SMESH_Mesh,
@@ -63,6 +62,7 @@ public:
   virtual ~SMESH_Mesh_i();
 
   // --- CORBA
+
   void SetShape( GEOM::GEOM_Object_ptr theShapeObject )
     throw (SALOME::SALOME_Exception);
 
@@ -155,38 +155,34 @@ public:
   SMESH::SMESH_Group_ptr CutListOfGroups( const SMESH::ListOfGroups& theMainGroups,
                                           const SMESH::ListOfGroups& theToolGroups,
                                           const char* theName )
-  throw (SALOME::SALOME_Exception);
+    throw (SALOME::SALOME_Exception);
 
   SMESH::SMESH_Group_ptr CreateDimGroup( const SMESH::ListOfGroups& theGroups,
                                          SMESH::ElementType theElemType,
                                          const char* theName )
-  throw (SALOME::SALOME_Exception);
-
+    throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_Group_ptr ConvertToStandalone( SMESH::SMESH_GroupBase_ptr theGroupOn );
 
-//    SMESH::string_array* GetLog(CORBA::Boolean clearAfterGet)
-//      throw (SALOME::SALOME_Exception);
+  SMESH::SMESH_Group_ptr ConvertToStandalone( SMESH::SMESH_GroupBase_ptr theGroupOn )
+    throw (SALOME::SALOME_Exception);
 
   SMESH::log_array* GetLog(CORBA::Boolean clearAfterGet)
     throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_MeshEditor_ptr GetMeshEditor();
+  SMESH::SMESH_MeshEditor_ptr GetMeshEditor() throw (SALOME::SALOME_Exception);
 
-  SMESH::SMESH_MeshEditor_ptr GetMeshEditPreviewer();
+  SMESH::SMESH_MeshEditor_ptr GetMeshEditPreviewer() throw (SALOME::SALOME_Exception);
 
   CORBA::Boolean HasModificationsToDiscard() throw (SALOME::SALOME_Exception);
 
-  void ClearLog()
-    throw (SALOME::SALOME_Exception);
+  void ClearLog() throw (SALOME::SALOME_Exception);
 
-  CORBA::Long GetId()
-    throw (SALOME::SALOME_Exception);
+  CORBA::Long GetId() throw (SALOME::SALOME_Exception);
 
-  CORBA::Long GetStudyId()
-    throw (SALOME::SALOME_Exception);
+  CORBA::Long GetStudyId() throw (SALOME::SALOME_Exception);
 
   // --- C++ interface
+
   void SetImpl(::SMESH_Mesh* impl);
   ::SMESH_Mesh& GetImpl();         // :: force no namespace here
 
@@ -198,7 +194,8 @@ public:
   int ImportSTLFile( const char* theFileName )
     throw (SALOME::SALOME_Exception);
 
-  SMESH::ComputeError* ImportGMFFile( const char* theFileName )
+  SMESH::ComputeError* ImportGMFFile( const char* theFileName,
+                                      bool        theMakeRequiredGroups)
     throw (SALOME::SALOME_Exception);
 
   /*!
@@ -233,7 +230,8 @@ public:
   void ExportToMEDX( const char*        file,
                      CORBA::Boolean     auto_groups,
                      SMESH::MED_VERSION version,
-                     CORBA::Boolean     overwrite ) throw (SALOME::SALOME_Exception);
+                     CORBA::Boolean     overwrite,
+                     CORBA::Boolean     autoDimension=true) throw (SALOME::SALOME_Exception);
   void ExportToMED ( const char*        file,
                      CORBA::Boolean     auto_groups,
                      SMESH::MED_VERSION version ) throw (SALOME::SALOME_Exception);
@@ -249,13 +247,15 @@ public:
                   const char*               file,
                   CORBA::Boolean            overwrite) throw (SALOME::SALOME_Exception);
   void ExportGMF(SMESH::SMESH_IDSource_ptr meshPart,
-                 const char*               file) throw (SALOME::SALOME_Exception);
+                 const char*               file,
+                 CORBA::Boolean            withRequiredGroups) throw (SALOME::SALOME_Exception);
 
   void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            auto_groups,
                        SMESH::MED_VERSION        version,
-                       CORBA::Boolean            overwrite) throw (SALOME::SALOME_Exception);
+                       CORBA::Boolean            overwrite,
+                       CORBA::Boolean            autoDim=true) throw (SALOME::SALOME_Exception);
   void ExportPartToDAT(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file) throw (SALOME::SALOME_Exception);
   void ExportPartToUNV(SMESH::SMESH_IDSource_ptr meshPart,
@@ -264,8 +264,7 @@ public:
                        const char*               file,
                        CORBA::Boolean            isascii) throw (SALOME::SALOME_Exception);
 
-  SALOME_MED::MESH_ptr GetMEDMesh()
-    throw (SALOME::SALOME_Exception);
+  CORBA::Double GetComputeProgress();
 
   CORBA::Long NbNodes()
     throw (SALOME::SALOME_Exception);
@@ -297,6 +296,9 @@ public:
   CORBA::Long NbTrianglesOfOrder(SMESH::ElementOrder order)
     throw (SALOME::SALOME_Exception);
 
+  CORBA::Long NbBiQuadTriangles()
+    throw (SALOME::SALOME_Exception);
+
   CORBA::Long NbQuadrangles()
     throw (SALOME::SALOME_Exception);
 
@@ -366,6 +368,9 @@ public:
   SMESH::EntityType GetElementGeomType( CORBA::Long id )
     throw (SALOME::SALOME_Exception);
 
+  SMESH::GeometryType GetElementShape( CORBA::Long id )
+    throw (SALOME::SALOME_Exception);
+
   /*!
    * Returns ID of elements for given submesh
    */
@@ -388,6 +393,11 @@ public:
 
   char* Dump();
 
+  // Create groups of elements preventing computation of a sub-shape
+  SMESH::ListOfGroups* MakeGroupsOfBadInputElements( int         theSubShapeID,
+                                                     const char* theGroupName)
+    throw (SALOME::SALOME_Exception);
+
   // Internal methods not available through CORBA
   // They are called by corresponding interface methods
   SMESH_Hypothesis::Hypothesis_Status addHypothesis(GEOM::GEOM_Object_ptr aSubShapeObject,
@@ -419,7 +429,7 @@ public:
   // return an existing subMesh object for the shapeID. shapeID == submeshID.
 
   const std::map<int, SMESH::SMESH_GroupBase_ptr>& getGroups() { return _mapGroups; }
-  // return an existing group object.
+  // return existing group objects
 
   void onHypothesisModified();
   // callback from _impl to forget not loaded mesh data (issue 0021208)
@@ -462,6 +472,11 @@ public:
    */
   SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID);
 
+  /*!
+   * \brief Return position of an element on shape
+   */
+  SMESH::ElementPosition GetElementPosition(CORBA::Long ElemID);
+
   /*!
    * If given element is node returns IDs of shape from position
    * If there is not node for given ID - returns -1
@@ -520,6 +535,11 @@ public:
    */
   SMESH::long_array* GetElemFaceNodes(CORBA::Long elemId, CORBA::Short faceIndex);
 
+  /*!
+   * Returns three components of normal of given mesh face (or an empty array in KO case)
+   */
+  SMESH::double_array* GetFaceNormal(CORBA::Long faceId, CORBA::Boolean normalized);
+
   /*!
    * Returns an element based on all given nodes.
    */
@@ -548,7 +568,7 @@ public:
   /*!
    * Returns information about imported MED file
    */
-  virtual SALOME_MED::MedFileInfo* GetMEDFileInfo();
+  virtual SMESH::MedFileInfo* GetMEDFileInfo();
 
   /*!
    * Sets list of notebook variables used for Mesh operations separated by ":" symbol
@@ -565,12 +585,6 @@ public:
    */
   SMESH::string_array* GetLastParameters();
 
-  /*!
-   * Collect statistic of mesh elements given by iterator
-   */
-  static void CollectMeshInfo(const SMDS_ElemIteratorPtr theItr,
-                              SMESH::long_array&         theInfo);
-
   /*!
    * \brief Return submesh objects list in meshing order
    */
@@ -581,17 +595,32 @@ public:
   virtual ::CORBA::Boolean SetMeshOrder(const SMESH::submesh_array_array& theSubMeshArray);
 
 
+  /*!
+   * Collect statistic of mesh elements given by iterator
+   */
+  static void CollectMeshInfo(const SMDS_ElemIteratorPtr theItr,
+                              SMESH::long_array&         theInfo);
+  /*!
+   * \brief Return iterator on elements of given type in given object
+   */
+  static SMDS_ElemIteratorPtr GetElements(SMESH::SMESH_IDSource_ptr obj,
+                                          SMESH::ElementType        type);
+
   // =========================
   // SMESH_IDSource interface
   // =========================
 
   virtual SMESH::long_array* GetIDs();
   /*!
-   * Returns statistic of mesh elements
-   * Result array of number enityties
+   * Returns number of mesh elements of each \a EntityType
+   * Result array of number of elements per \a EntityType
    * Inherited from SMESH_IDSource
    */
   virtual SMESH::long_array* GetMeshInfo();
+  /*!
+   * Returns number of mesh elements of each \a ElementType
+   */
+  virtual SMESH::long_array* GetNbElementsByType();
   /*!
    * Returns types of elements it contains
    */
@@ -634,8 +663,10 @@ private:
   std::map<int, SMESH::SMESH_subMesh_ptr>    _mapSubMeshIor;
   std::map<int, SMESH::SMESH_GroupBase_ptr>  _mapGroups;
   std::map<int, SMESH::SMESH_Hypothesis_ptr> _mapHypo;
-  SALOME_MED::MedFileInfo_var _medFileInfo;
-  SMESH_PreMeshInfo*          _preMeshInfo; // mesh info before full loading from study file
+  SMESH_MeshEditor_i*    _editor;
+  SMESH_MeshEditor_i*    _previewEditor;
+  SMESH::MedFileInfo_var _medFileInfo;
+  SMESH_PreMeshInfo*     _preMeshInfo; // mesh info before full loading from study file
 
   SMESH_PreMeshInfo* & changePreMeshInfo() { return _preMeshInfo; }
   friend class SMESH_PreMeshInfo;
@@ -648,7 +679,7 @@ private:
     // number of items in a group varies (1) <-> (>1)
     std::string       _groupEntry;
     std::set<int>     _indices; // indices of group items within group's main shape
-    CORBA::Object_ptr _smeshObject; // SMESH object depending on GEOM group
+    CORBA::Object_var _smeshObject; // SMESH object depending on GEOM group
   };
   std::list<TGeomGroupData> _geomGroupData;
 
@@ -662,7 +693,7 @@ private:
    */
   void removeGeomGroupData(CORBA::Object_ptr theSmeshObj);
   /*!
-   * \brief Return new group contents if it has been changed and update group data
+   * Return new group contents if it has been changed and update group data
    */
   TopoDS_Shape newGroupShape( TGeomGroupData & groupData);