Salome HOME
0021559: EDF 2175 SMESH: Hexa/Tetra mixed meshes
[modules/smesh.git] / src / SMESH / SMESH_Mesh.hxx
index 2546d7fbff1730c79673c506febb6e57b24f53fc..272bcea7d6f454b0f322d6061d52a74bd6223cd2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  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
@@ -20,7 +20,6 @@
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
-//  SMESH SMESH : implementaion of SMESH idl descriptions
 //  File   : SMESH_Mesh.hxx
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
@@ -98,11 +97,14 @@ public:
    */
   static const TopoDS_Solid& PseudoShape();
 
+  /*!
+   * \brief Load mesh from study file
+   */
+  void Load();
   /*!
    * \brief Remove all nodes and elements
    */
   void Clear();
-
   /*!
    * \brief Remove all nodes and elements of indicated shape
    */
@@ -274,6 +276,8 @@ public:
   
   int NbPolyhedrons() const throw(SALOME_Exception);
   
+  int NbBalls() const throw(SALOME_Exception);
+  
   int NbSubMesh() const throw(SALOME_Exception);
   
   int NbGroup() const { return _mapGroup.size(); }
@@ -283,7 +287,9 @@ public:
                          int&                      theId,
                          const TopoDS_Shape&       theShape=TopoDS_Shape(),
                          const SMESH_PredicatePtr& thePredicate=SMESH_PredicatePtr());
-  
+
+  SMESH_Group* AddGroup (SMESHDS_GroupBase* groupDS) throw(SALOME_Exception);
+
   typedef boost::shared_ptr< SMDS_Iterator<SMESH_Group*> > GroupIteratorPtr;
   GroupIteratorPtr GetGroups() const;
   
@@ -295,12 +301,14 @@ public:
 
   SMESH_Group* ConvertToStandalone ( int theGroupID );
 
-  struct TRmGroupCallUp
+  struct TCallUp // callback from SMESH to SMESH_I level
   {
     virtual void RemoveGroup (const int theGroupID)=0;
-    virtual ~TRmGroupCallUp() {}
+    virtual void HypothesisModified ()=0;
+    virtual void Load ()=0;
+    virtual ~TCallUp() {}
   };
-  void SetRemoveGroupCallUp( TRmGroupCallUp * upCaller );
+  void SetCallUp( TCallUp * upCaller );
 
   bool SynchronizeGroups();
 
@@ -311,15 +319,13 @@ public:
   void SetMeshOrder(const TListOfListOfInt& theOrder );
   const TListOfListOfInt& GetMeshOrder() const;
 
-  /*!
-   * \brief sort submeshes according to stored mesh order
-   * \param theListToSort in out list to be sorted
-   * \return FALSE if nothing sorted
-   */
+  // sort submeshes according to stored mesh order
   bool SortByMeshOrder(std::list<SMESH_subMesh*>& theListToSort) const;
 
-  //
-  
+  // return true if given order of sub-meshes is OK
+  bool IsOrderOK( const SMESH_subMesh* smBefore,
+                  const SMESH_subMesh* smAfter ) const;
+
   ostream& Dump(ostream & save);
   
 private:
@@ -351,10 +357,11 @@ protected:
 
   TListOfListOfInt           _mySubMeshOrder;
 
-  // Struct calling RemoveGroup at CORBA API implementation level, used
-  // to make an upper level be consistent with a lower one when group removal
-  // is invoked by hyp modification 
-  TRmGroupCallUp*            _rmGroupCallUp;
+  // Struct calling methods at CORBA API implementation level, used to
+  // 1) make an upper level be consistent with a lower one when group removal
+  // is invoked by hyp modification (issue 0020918)
+  // 2) to forget not loaded mesh data at hyp modification
+  TCallUp*                    _callUp;
 
 protected:
   SMESH_Mesh();