Salome HOME
022501: [CEA 1076] Impossible to mesh at its position a translated without copy shape...
[modules/smesh.git] / src / SMESHDS / SMESHDS_Mesh.hxx
index 573e06b9187797d88b8332a7d0cd71a3fe2412eb..8b8fc0a55b0ef5f9d4f93240732a14c802ed22a4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014  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
@@ -6,7 +6,7 @@
 // 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
@@ -50,18 +50,22 @@ class SMDS_MeshVolume   ;
 class SMDS_Mesh0DElement;
 class SMDS_BallElement;
 
-#include <NCollection_DataMap.hxx>
 #include <map>
+
 /*
  * Using of native hash_map isn't portable and don't work on WIN32 platform.
  * So this functionality implement on new NCollection_DataMap technology
  */
+#include <NCollection_DataMap.hxx>
 #include "SMESHDS_DataMapOfShape.hxx"
+typedef std::list<const SMESHDS_Hypothesis*>                          THypList;
+typedef NCollection_DataMap< TopoDS_Shape, THypList, SMESHDS_Hasher > ShapeToHypothesis;
 
 class SMESHDS_GroupBase;
 class DownIdType;
 
-class SMESHDS_EXPORT SMESHDS_Mesh:public SMDS_Mesh{
+class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
+{
 public:
   SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode);
   bool IsEmbeddedMode();
@@ -138,6 +142,25 @@ public:
                                  const SMDS_MeshNode * n23,
                                  const SMDS_MeshNode * n31);
 
+  // biquadratic triangle of 7 nodes
+  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3,
+                                       int n12,int n23,int n31, int nCenter, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
+                                       const SMDS_MeshNode * n2,
+                                       const SMDS_MeshNode * n3, 
+                                       const SMDS_MeshNode * n12,
+                                       const SMDS_MeshNode * n23,
+                                       const SMDS_MeshNode * n31,
+                                       const SMDS_MeshNode * nCenter, 
+                                       int ID);
+  virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
+                                 const SMDS_MeshNode * n2,
+                                 const SMDS_MeshNode * n3,
+                                 const SMDS_MeshNode * n12,
+                                 const SMDS_MeshNode * n23,
+                                 const SMDS_MeshNode * n31,
+                                 const SMDS_MeshNode * nCenter);
+
   // 2d order quadrangle
   virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4,
                                        int n12,int n23,int n34,int n41, int ID);
@@ -159,7 +182,7 @@ public:
                                  const SMDS_MeshNode * n34,
                                  const SMDS_MeshNode * n41);
 
-  // bi-quadratic quadrangle of 9 nodes
+  // biquadratic quadrangle of 9 nodes
   virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4,
                                        int n12,int n23,int n34,int n41, int nCenter, int ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
@@ -502,7 +525,7 @@ public:
                            (const std::vector<const SMDS_MeshNode*>& nodes,
                             const std::vector<int>&                  quantities);
 
-  void MoveNode(const SMDS_MeshNode *, double x, double y, double z);
+  virtual void MoveNode(const SMDS_MeshNode *, double x, double y, double z);
   virtual void RemoveNode(const SMDS_MeshNode *);
   void RemoveElement(const SMDS_MeshElement *);
 
@@ -526,28 +549,35 @@ public:
   bool ModifyCellNodes(int smdsVolId, std::map<int,int> localClonedNodeIds);
   void Renumber (const bool isNodes, const int startID=1, const int deltaID=1);
 
-  void SetNodeInVolume(SMDS_MeshNode * aNode, const TopoDS_Shell & S);
-  void SetNodeInVolume(SMDS_MeshNode * aNode, const TopoDS_Solid & S);
-  void SetNodeOnFace(SMDS_MeshNode * aNode, const TopoDS_Face & S, double u=0., double v=0.);
-  void SetNodeOnEdge(SMDS_MeshNode * aNode, const TopoDS_Edge & S, double u=0.);
-  void SetNodeOnVertex(SMDS_MeshNode * aNode, const TopoDS_Vertex & S);
+  void SetNodeInVolume(const SMDS_MeshNode * aNode, const TopoDS_Shell & S);
+  void SetNodeInVolume(const SMDS_MeshNode * aNode, const TopoDS_Solid & S);
+  void SetNodeOnFace  (const SMDS_MeshNode * aNode, const TopoDS_Face& S, double u=0.,double v=0.);
+  void SetNodeOnEdge  (const SMDS_MeshNode * aNode, const TopoDS_Edge& S, double u=0.);
+  void SetNodeOnVertex(const SMDS_MeshNode * aNode, const TopoDS_Vertex & S);
   void UnSetNodeOnShape(const SMDS_MeshNode * aNode);
-  void SetMeshElementOnShape(const SMDS_MeshElement * anElt,
-                             const TopoDS_Shape & S);
-  void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt,
-                               const TopoDS_Shape & S);
+  void SetMeshElementOnShape  (const SMDS_MeshElement * anElt, const TopoDS_Shape & S);
+  void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt, const TopoDS_Shape & S);
+  void SetNodeInVolume(const SMDS_MeshNode * aNode, int Index);
+  void SetNodeOnFace  (const SMDS_MeshNode * aNode, int Index, double u=0., double v=0.);
+  void SetNodeOnEdge  (const SMDS_MeshNode * aNode, int Index, double u=0.);
+  void SetNodeOnVertex(const SMDS_MeshNode * aNode, int Index);
+  void SetMeshElementOnShape(const SMDS_MeshElement * anElt, int Index);
   bool HasMeshElements(const TopoDS_Shape & S) const;
   SMESHDS_SubMesh * MeshElements(const TopoDS_Shape & S) const;
   SMESHDS_SubMesh * MeshElements(const int Index) const;
   std::list<int> SubMeshIndices() const;
   const std::map<int,SMESHDS_SubMesh*>& SubMeshes() const
   { return myShapeIndexToSubMesh; }
+  const TopoDS_Shape& GetCurrentSubShape() const { return myCurSubShape; }
 
   bool HasHypothesis(const TopoDS_Shape & S);
   const std::list<const SMESHDS_Hypothesis*>& GetHypothesis(const TopoDS_Shape & S) const;
   bool IsUsedHypothesis(const SMESHDS_Hypothesis * H) const;
+  const ShapeToHypothesis & GetHypotheses() const { return myShapeToHypothesis; }
+
   SMESHDS_Script * GetScript();
   void ClearScript();
+
   int ShapeToIndex(const TopoDS_Shape & aShape) const;
   const TopoDS_Shape& IndexToShape(int ShapeIndex) const;
   int MaxShapeIndex() const { return myIndexToShape.Extent(); }
@@ -555,11 +585,6 @@ public:
 
   SMESHDS_SubMesh * NewSubMesh(int Index);
   int AddCompoundSubmesh(const TopoDS_Shape& S, TopAbs_ShapeEnum type = TopAbs_SHAPE);
-  void SetNodeInVolume(const SMDS_MeshNode * aNode, int Index);
-  void SetNodeOnFace(SMDS_MeshNode * aNode, int Index , double u=0., double v=0.);
-  void SetNodeOnEdge(SMDS_MeshNode * aNode, int Index , double u=0.);
-  void SetNodeOnVertex(SMDS_MeshNode * aNode, int Index);
-  void SetMeshElementOnShape(const SMDS_MeshElement * anElt, int Index);
 
   // Groups. SMESHDS_Mesh is not an owner of groups
   void AddGroup (SMESHDS_GroupBase* theGroup)      { myGroups.insert(theGroup); }
@@ -585,15 +610,6 @@ private:
     it->second->AddNode( aNode ); // add aNode to submesh
   }
   
-  /*int HashCode( const TopoDS_Shape& S, const Standard_Integer theUpper ) const
-  {
-      return S.HashCode(2147483647);
-  }*/ 
-
-  typedef std::list<const SMESHDS_Hypothesis*> THypList;
-
-  typedef NCollection_DataMap< TopoDS_Shape, THypList > ShapeToHypothesis;
-
   ShapeToHypothesis          myShapeToHypothesis;
 
   int                        myMeshID, myPersistentID;