Salome HOME
PR: synchro V7_main tag mergefrom_V6_main_06Mar13
[modules/smesh.git] / src / Controls / SMESH_ControlsDef.hxx
index 80d573d04b59f10d0daa671884806da6fef09440..972cb042ac4b99a55cad06ab7f22ac28dc48455d 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
@@ -125,7 +125,8 @@ namespace SMESH{
                         std::vector<int>&       nbEvents,
                         std::vector<double>&    funValues,
                         const std::vector<int>& elements,
-                        const double*           minmax=0);
+                        const double*           minmax=0,
+                        const bool              isLogarithmic = false);
       virtual SMDSAbs_ElementType GetType() const = 0;
       virtual double GetBadRate( double Value, int nbNodes ) const = 0;
       long  GetPrecision() const;
@@ -162,6 +163,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;
     };
@@ -197,6 +199,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;
@@ -242,7 +245,6 @@ namespace SMESH{
       virtual SMDSAbs_ElementType GetType() const;
     };
 
-
     /*
       Class       : Skew
       Description : Functor for calculating skew in degrees
@@ -330,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
     */
@@ -413,6 +428,28 @@ namespace SMESH{
       const SMDS_Mesh* myMesh;
     };
 
+    /*
+      Class       : ElemEntityType
+      Description : Functor for calculating entity type
+    */
+    class SMESHCONTROLS_EXPORT ElemEntityType: public virtual Predicate{
+      public:
+      ElemEntityType();
+      virtual void         SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool         IsSatisfy( long theElementId );
+      void                 SetType( SMDSAbs_ElementType theType );
+      virtual              SMDSAbs_ElementType GetType() const;
+      void                 SetElemEntityType( SMDSAbs_EntityType theEntityType );
+      SMDSAbs_EntityType   GetElemEntityType() const;
+
+    private:
+      const SMDS_Mesh*     myMesh;
+      SMDSAbs_ElementType  myType;
+      SMDSAbs_EntityType   myEntityType;
+    };
+    typedef boost::shared_ptr<ElemEntityType> ElemEntityTypePtr;
+
+
     /*
       BareBorderVolume
     */
@@ -769,7 +806,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;
@@ -805,25 +842,36 @@ namespace SMESH{
                         const SMDSAbs_ElementType theType);
 
     private:
-      void    addShape (const TopoDS_Shape& theShape);
-      void    process();
-      void    process (const SMDS_MeshElement* theElem);
 
-    private:
-      TMeshModifTracer      myMeshModifTracer;
-      TColStd_MapOfInteger  myIds;
-      SMDSAbs_ElementType   myType;
-      TopoDS_Shape          myShape;
-      double                myToler;
-      bool                  myAllNodesFlag;
-
-      TopTools_MapOfShape         myShapesMap;
-      TopAbs_ShapeEnum            myCurShapeType; // type of current sub-shape
-      BRepClass3d_SolidClassifier myCurSC;        // current SOLID
-      GeomAPI_ProjectPointOnSurf  myCurProjFace;  // current FACE
-      TopoDS_Face                 myCurFace;      // current FACE
-      GeomAPI_ProjectPointOnCurve myCurProjEdge;  // current EDGE
-      gp_Pnt                      myCurPnt;       // current VERTEX
+      struct TClassifier
+      {
+        TClassifier(const TopoDS_Shape& s, double tol) { Init(s,tol); }
+        void Init(const TopoDS_Shape& s, double tol);
+        bool IsOut(const gp_Pnt& p);
+        TopAbs_ShapeEnum ShapeType() const;
+      private:
+        bool isOutOfSolid (const gp_Pnt& p);
+        bool isOutOfFace  (const gp_Pnt& p);
+        bool isOutOfEdge  (const gp_Pnt& p);
+        bool isOutOfVertex(const gp_Pnt& p);
+
+        bool (TClassifier::* myIsOutFun)(const gp_Pnt& p);
+        BRepClass3d_SolidClassifier mySolidClfr;
+        GeomAPI_ProjectPointOnSurf  myProjFace;
+        GeomAPI_ProjectPointOnCurve myProjEdge;
+        gp_Pnt                      myVertexXYZ;
+        TopoDS_Shape                myShape;
+        double                      myTol;
+      };
+      void clearClassifiers();
+
+      std::vector< TClassifier* > myClassifiers;
+      const SMDS_Mesh*            myMesh;
+      SMDSAbs_ElementType         myType;
+      TopoDS_Shape                myShape;
+      double                      myToler;
+      bool                        myAllNodesFlag;
+
     };
 
     typedef boost::shared_ptr<ElementsOnShape> ElementsOnShapePtr;