Salome HOME
Porting documentation on the Doxygen-1.8.0
[modules/smesh.git] / src / Controls / SMESH_ControlsDef.hxx
index d5dae39ec5f34e51dbe9d88af67270925abd4e4a..80d573d04b59f10d0daa671884806da6fef09440 100644 (file)
@@ -43,6 +43,7 @@
 
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMESH_TypeDefs.hxx"
 
 #include "SMESH_Controls.hxx"
 
@@ -95,6 +96,21 @@ namespace SMESH{
       std::vector<gp_XYZ> myArray;
     };
 
+    /*!
+     * \brief Class used to detect mesh modification: IsMeshModified() returns
+     * true if a mesh has changed since last calling IsMeshModified()
+     */
+    class SMESHCONTROLS_EXPORT TMeshModifTracer
+    {
+      unsigned long    myMeshModifTime;
+      const SMDS_Mesh* myMesh;
+    public:
+      TMeshModifTracer();
+      void SetMesh( const SMDS_Mesh* theMesh );
+      const SMDS_Mesh* GetMesh() const { return myMesh; }
+      bool IsMeshModified();
+    };
+
     /*
       Class       : NumericalFunctor
       Description : Root of all Functors returning numeric value
@@ -116,10 +132,8 @@ namespace SMESH{
       void  SetPrecision( const long thePrecision );
       double Round( const double & value );
       
-      bool GetPoints(const int theId,
-                     TSequenceOfXYZ& theRes) const;
-      static bool GetPoints(const SMDS_MeshElement* theElem,
-                            TSequenceOfXYZ& theRes);
+      bool GetPoints(const int theId, TSequenceOfXYZ& theRes) const;
+      static bool GetPoints(const SMDS_MeshElement* theElem, TSequenceOfXYZ& theRes);
     protected:
       const SMDS_Mesh*        myMesh;
       const SMDS_MeshElement* myCurrElement;
@@ -319,6 +333,55 @@ namespace SMESH{
     /*
       PREDICATES
     */
+    /*
+      Class       : CoincidentNodes
+      Description : Predicate of Coincident Nodes
+      Note        : This class is suitable only for visualization of Coincident Nodes
+    */
+    class SMESHCONTROLS_EXPORT CoincidentNodes: public Predicate {
+    public:
+      CoincidentNodes();
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool IsSatisfy( long theElementId );
+      virtual SMDSAbs_ElementType GetType() const;
+
+      void SetTolerance (const double theToler)  { myToler = theToler; }
+      double GetTolerance () const { return myToler; }
+
+    private:
+      double               myToler;
+      TColStd_MapOfInteger myCoincidentIDs;
+      TMeshModifTracer     myMeshModifTracer;
+    };
+    typedef boost::shared_ptr<CoincidentNodes> CoincidentNodesPtr;
+   
+    /*
+      Class       : CoincidentElements
+      Description : Predicate of Coincident Elements
+      Note        : This class is suitable only for visualization of Coincident Elements
+    */
+    class SMESHCONTROLS_EXPORT CoincidentElements: public Predicate {
+    public:
+      CoincidentElements();
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool IsSatisfy( long theElementId );
+
+    private:
+      const SMDS_Mesh* myMesh;
+    };
+    class SMESHCONTROLS_EXPORT CoincidentElements1D: public CoincidentElements {
+    public:
+      virtual SMDSAbs_ElementType GetType() const;
+    };
+    class SMESHCONTROLS_EXPORT CoincidentElements2D: public CoincidentElements {
+    public:
+      virtual SMDSAbs_ElementType GetType() const;
+    };
+    class SMESHCONTROLS_EXPORT CoincidentElements3D: public CoincidentElements {
+    public:
+      virtual SMDSAbs_ElementType GetType() const;
+    };
+
     /*
       Class       : FreeBorders
       Description : Predicate for free borders
@@ -408,7 +471,6 @@ namespace SMESH{
       virtual bool IsSatisfy( long theElementId );
     protected:
       const SMDS_Mesh* myMesh;
-      std::vector< const SMDS_MeshNode* > myLinkNodes;
     };
     typedef boost::shared_ptr<OverConstrainedFace> OverConstrainedFacePtr;
 
@@ -748,7 +810,7 @@ namespace SMESH{
       void    process (const SMDS_MeshElement* theElem);
 
     private:
-      const SMDS_Mesh*      myMesh;
+      TMeshModifTracer      myMeshModifTracer;
       TColStd_MapOfInteger  myIds;
       SMDSAbs_ElementType   myType;
       TopoDS_Shape          myShape;
@@ -856,13 +918,13 @@ namespace SMESH{
       long                 GetFace() const                         { return myFaceID; }
       void                 SetTolerance (const double theToler)    { myToler = theToler; }
       double               GetTolerance () const                   { return myToler; }
-      virtual void         SetMesh( const SMDS_Mesh* theMesh )     { myMesh = theMesh; }
       virtual              SMDSAbs_ElementType GetType() const     { return SMDSAbs_Face; }
 
+      virtual void         SetMesh( const SMDS_Mesh* theMesh );
       virtual bool         IsSatisfy( long theElementId );
 
     private:
-      const SMDS_Mesh*     myMesh;
+      TMeshModifTracer     myMeshModifTracer;
       long                 myFaceID;
       double               myToler;
       std::set< long >     myCoplanarIDs;