Salome HOME
0051567: TC6.6.0: Qadrangle_2D fail
[modules/smesh.git] / src / Controls / SMESH_ControlsDef.hxx
index ac07599edfada8074e84cde0807072786a22edae..587f5b6d609bf79b6c09b933764aaaf81758953b 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
@@ -96,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
@@ -147,6 +162,7 @@ namespace SMESH{
     class SMESHCONTROLS_EXPORT MaxElementLength2D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
+      virtual double GetValue( const TSequenceOfXYZ& P );
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
     };
@@ -182,6 +198,7 @@ namespace SMESH{
     */
     class SMESHCONTROLS_EXPORT AspectRatio: public virtual NumericalFunctor{
     public:
+      virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
@@ -315,6 +332,19 @@ namespace SMESH{
       void GetValues(MValues& theValues);
     };
     typedef boost::shared_ptr<MultiConnection2D> MultiConnection2DPtr;
+
+    /*
+      Class       : BallDiameter
+      Description : Functor returning diameter of a ball element
+    */
+    class SMESHCONTROLS_EXPORT BallDiameter: public virtual NumericalFunctor{
+    public:
+      virtual double GetValue( long theElementId );
+      virtual double GetBadRate( double Value, int nbNodes ) const;
+      virtual SMDSAbs_ElementType GetType() const;
+    };
+    
+
     /*
       PREDICATES
     */
@@ -326,16 +356,19 @@ namespace SMESH{
     class SMESHCONTROLS_EXPORT CoincidentNodes: public Predicate {
     public:
       CoincidentNodes();
-      void SetTolerance (const double theToler)  { myToler = theToler; }
-      void SetMesh( const SMDS_Mesh* theMesh, TIDSortedNodeSet* nodesToCheck );
-      virtual void SetMesh( const SMDS_Mesh* theMesh ) { SetMesh( theMesh, 0 ); }
+      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:
-      TColStd_MapOfInteger myCoincidentIDs;
       double               myToler;
+      TColStd_MapOfInteger myCoincidentIDs;
+      TMeshModifTracer     myMeshModifTracer;
     };
+    typedef boost::shared_ptr<CoincidentNodes> CoincidentNodesPtr;
    
     /*
       Class       : CoincidentElements
@@ -345,14 +378,11 @@ namespace SMESH{
     class SMESHCONTROLS_EXPORT CoincidentElements: public Predicate {
     public:
       CoincidentElements();
-      void SetMesh( const SMDS_Mesh* theMesh, TIDSortedElemSet* elemsToCheck );
-      virtual void SetMesh( const SMDS_Mesh* theMesh ) { SetMesh( theMesh, 0 ); }
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
 
     private:
-      const SMDS_Mesh*     myMesh;
-      TIDSortedElemSet*    myElemsToCheck;
-      TColStd_MapOfInteger myCoincidentIDs;
+      const SMDS_Mesh* myMesh;
     };
     class SMESHCONTROLS_EXPORT CoincidentElements1D: public CoincidentElements {
     public:
@@ -456,7 +486,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;
 
@@ -755,7 +784,7 @@ namespace SMESH{
       bool    isOnSurface( const SMDS_MeshNode* theNode );
 
     private:
-      const SMDS_Mesh*      myMesh;
+      TMeshModifTracer      myMeshModifTracer;
       TColStd_MapOfInteger  myIds;
       SMDSAbs_ElementType   myType;
       //Handle(Geom_Surface)  mySurf;
@@ -796,7 +825,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;
@@ -904,13 +933,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;