Salome HOME
Porting documentation on the Doxygen-1.8.0
[modules/smesh.git] / src / Controls / SMESH_ControlsDef.hxx
index afe0770e04fab92c6618cb26326e57bdbaec6445..80d573d04b59f10d0daa671884806da6fef09440 100644 (file)
 
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshNode.hxx"
+#include "SMESH_TypeDefs.hxx"
 
 #include "SMESH_Controls.hxx"
 
-#ifdef WNT
- #if defined SMESHCONTROLS_EXPORTS || defined SMESHControls_EXPORTS
-  #define SMESHCONTROLS_EXPORT __declspec( dllexport )
- #else
-  #define SMESHCONTROLS_EXPORT __declspec( dllimport )
- #endif
-#else
- #define SMESHCONTROLS_EXPORT
-#endif
-
 class SMDS_MeshElement;
 class SMDS_MeshFace;
 class SMDS_MeshNode;
@@ -105,16 +96,19 @@ namespace SMESH{
       std::vector<gp_XYZ> myArray;
     };
 
-    /*
-      Class       : Functor
-      Description : Root of all Functors
-    */
-    class SMESHCONTROLS_EXPORT Functor
+    /*!
+     * \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:
-      ~Functor(){}
-      virtual void SetMesh( const SMDS_Mesh* theMesh ) = 0;
-      virtual SMDSAbs_ElementType GetType() const = 0;
+      TMeshModifTracer();
+      void SetMesh( const SMDS_Mesh* theMesh );
+      const SMDS_Mesh* GetMesh() const { return myMesh; }
+      bool IsMeshModified();
     };
 
     /*
@@ -138,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;
@@ -342,16 +334,54 @@ namespace SMESH{
       PREDICATES
     */
     /*
-      Class       : Predicate
-      Description : Base class for all predicates
+      Class       : CoincidentNodes
+      Description : Predicate of Coincident Nodes
+      Note        : This class is suitable only for visualization of Coincident Nodes
     */
-    class SMESHCONTROLS_EXPORT Predicate: public virtual Functor{
+    class SMESHCONTROLS_EXPORT CoincidentNodes: public Predicate {
     public:
-      virtual bool IsSatisfy( long theElementId ) = 0;
-      virtual SMDSAbs_ElementType GetType() const = 0;
+      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
@@ -441,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;
 
@@ -781,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;
@@ -889,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;