Salome HOME
Test EXPORTS definition with target name as suggested by cmake
[modules/smesh.git] / src / Controls / SMESH_ControlsDef.hxx
index a4018959f7536a9b545e7553bfa764d9ce55421e..dba5f81986411780338a270d73d097077fc02cd6 100644 (file)
@@ -1,40 +1,60 @@
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  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. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
-
+//  Copyright (C) 2007-2008  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
+//
+//  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.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
 #ifndef _SMESH_CONTROLSDEF_HXX_
 #define _SMESH_CONTROLSDEF_HXX_
 
 #include <set>
 #include <map>
 #include <vector>
+
 #include <boost/shared_ptr.hpp>
+
 #include <gp_XYZ.hxx>
-#include <Geom_Surface.hxx>
+#include <GeomAPI_ProjectPointOnSurf.hxx>
+#include <GeomAPI_ProjectPointOnCurve.hxx>
 #include <TColStd_SequenceOfInteger.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TCollection_AsciiString.hxx>
+#include <TopAbs.hxx>
+#include <TopoDS_Face.hxx>
+#include <TopTools_MapOfShape.hxx>
+#include <BRepClass3d_SolidClassifier.hxx>
+#include <Quantity_Color.hxx>
 
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_MeshNode.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;
@@ -44,13 +64,11 @@ class SMESHDS_Mesh;
 class SMESHDS_SubMesh;
 
 class gp_Pnt;
-class TopoDS_Shape;
-
 
 namespace SMESH{
   namespace Controls{
 
-    class TSequenceOfXYZ: public std::vector<gp_XYZ>
+    class SMESHCONTROLS_EXPORT TSequenceOfXYZ: public std::vector<gp_XYZ>
     {
     public:
       typedef std::vector<gp_XYZ> TSuperClass;
@@ -97,7 +115,7 @@ namespace SMESH{
       Class       : Functor
       Description : Root of all Functors
     */
-    class Functor
+    class SMESHCONTROLS_EXPORT Functor
     {
     public:
       ~Functor(){}
@@ -109,7 +127,7 @@ namespace SMESH{
       Class       : NumericalFunctor
       Description : Root of all Functors returning numeric value
     */
-    class NumericalFunctor: public virtual Functor{
+    class SMESHCONTROLS_EXPORT NumericalFunctor: public virtual Functor{
     public:
       NumericalFunctor();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -120,22 +138,22 @@ namespace SMESH{
       long  GetPrecision() const;
       void  SetPrecision( const long thePrecision );
       
-      bool GetPoints(const int theId, 
+      bool GetPoints(const int theId,
                     TSequenceOfXYZ& theRes) const;
-      static bool GetPoints(const SMDS_MeshElement* theElem, 
+      static bool GetPoints(const SMDS_MeshElement* theElem,
                            TSequenceOfXYZ& theRes);
     protected:
       const SMDS_Mesh* myMesh;
       const SMDS_MeshElement* myCurrElement;
       long       myPrecision;
     };
-  
-  
+
+
     /*
       Class       : Volume
       Description : Functor calculating volume of 3D mesh element
     */
-    class Volume: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Volume: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       //virtual double GetValue( const TSequenceOfXYZ& thePoints );
@@ -148,7 +166,7 @@ namespace SMESH{
       Class       : SMESH_MinimumAngle
       Description : Functor for calculation of minimum angle
     */
-    class MinimumAngle: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT MinimumAngle: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -160,7 +178,7 @@ namespace SMESH{
       Class       : AspectRatio
       Description : Functor for calculating aspect ratio
     */
-    class AspectRatio: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT AspectRatio: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -172,7 +190,7 @@ namespace SMESH{
       Class       : AspectRatio3D
       Description : Functor for calculating aspect ratio of 3D elems.
     */
-    class AspectRatio3D: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT AspectRatio3D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -184,7 +202,7 @@ namespace SMESH{
       Class       : Warping
       Description : Functor for calculating warping
     */
-    class Warping: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Warping: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -199,31 +217,31 @@ namespace SMESH{
       Class       : Taper
       Description : Functor for calculating taper
     */
-    class Taper: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Taper: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
     };
-    
-  
+
+
     /*
       Class       : Skew
       Description : Functor for calculating skew in degrees
     */
-    class Skew: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Skew: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
     };
-  
-    
+
+
     /*
       Class       : Area
       Description : Functor for calculating area
     */
-    class Area: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Area: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -235,18 +253,18 @@ namespace SMESH{
       Class       : Length
       Description : Functor for calculating length of edge
     */
-    class Length: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Length: public virtual NumericalFunctor{
     public:
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
     };
-  
+
     /*
       Class       : Length2D
       Description : Functor for calculating length of edge
     */
-    class Length2D: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT Length2D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       virtual double GetBadRate( double Value, int nbNodes ) const;
@@ -259,7 +277,6 @@ namespace SMESH{
       };
       typedef std::set<Value> TValues;
       void GetValues(TValues& theValues);
-      
     };
     typedef boost::shared_ptr<Length2D> Length2DPtr;
 
@@ -267,7 +284,7 @@ namespace SMESH{
       Class       : MultiConnection
       Description : Functor for calculating number of faces conneted to the edge
     */
-    class MultiConnection: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT MultiConnection: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
@@ -279,7 +296,7 @@ namespace SMESH{
       Class       : MultiConnection2D
       Description : Functor for calculating number of faces conneted to the edge
     */
-    class MultiConnection2D: public virtual NumericalFunctor{
+    class SMESHCONTROLS_EXPORT MultiConnection2D: public virtual NumericalFunctor{
     public:
       virtual double GetValue( long theElementId );
       virtual double GetValue( const TSequenceOfXYZ& thePoints );
@@ -302,25 +319,24 @@ namespace SMESH{
       Class       : Predicate
       Description : Base class for all predicates
     */
-    class Predicate: public virtual Functor{
+    class SMESHCONTROLS_EXPORT Predicate: public virtual Functor{
     public:
       virtual bool IsSatisfy( long theElementId ) = 0;
       virtual SMDSAbs_ElementType GetType() const = 0;
     };
-    
   
   
     /*
       Class       : FreeBorders
       Description : Predicate for free borders
     */
-    class FreeBorders: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT FreeBorders: public virtual Predicate{
     public:
       FreeBorders();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
       virtual SMDSAbs_ElementType GetType() const;
-            
+
     protected:
       const SMDS_Mesh* myMesh;
     };
@@ -330,7 +346,7 @@ namespace SMESH{
       Class       : BadOrientedVolume
       Description : Predicate bad oriented volumes
     */
-    class BadOrientedVolume: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT BadOrientedVolume: public virtual Predicate{
     public:
       BadOrientedVolume();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -346,7 +362,7 @@ namespace SMESH{
       Class       : FreeEdges
       Description : Predicate for free Edges
     */
-    class FreeEdges: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT FreeEdges: public virtual Predicate{
     public:
       FreeEdges();
       virtual void SetMesh( const SMDS_Mesh* theMesh );
@@ -367,7 +383,23 @@ namespace SMESH{
       const SMDS_Mesh* myMesh;
     };
     typedef boost::shared_ptr<FreeEdges> FreeEdgesPtr;
+    
+    
+    /*
+      Class       : FreeNodes
+      Description : Predicate for free nodes
+    */
+    class SMESHCONTROLS_EXPORT FreeNodes: public virtual Predicate{
+    public:
+      FreeNodes();
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool IsSatisfy( long theNodeId );
+      virtual SMDSAbs_ElementType GetType() const;
 
+    protected:
+      const SMDS_Mesh* myMesh;
+    };
+    
 
     /*
       Class       : RangeOfIds
@@ -377,7 +409,7 @@ namespace SMESH{
                     2. With SetRangeStr method. Parameter of this method is a string
                        like as "1,2,3,50-60,63,67,70-"
     */
-    class RangeOfIds: public virtual Predicate
+    class SMESHCONTROLS_EXPORT RangeOfIds: public virtual Predicate
     {
     public:
                                     RangeOfIds();
@@ -407,7 +439,7 @@ namespace SMESH{
       Class       : Comparator
       Description : Base class for comparators
     */
-    class Comparator: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT Comparator: public virtual Predicate{
     public:
       Comparator();
       virtual ~Comparator();
@@ -429,7 +461,7 @@ namespace SMESH{
       Class       : LessThan
       Description : Comparator "<"
     */
-    class LessThan: public virtual Comparator{
+    class SMESHCONTROLS_EXPORT LessThan: public virtual Comparator{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -439,7 +471,7 @@ namespace SMESH{
       Class       : MoreThan
       Description : Comparator ">"
     */
-    class MoreThan: public virtual Comparator{
+    class SMESHCONTROLS_EXPORT MoreThan: public virtual Comparator{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -449,7 +481,7 @@ namespace SMESH{
       Class       : EqualTo
       Description : Comparator "="
     */
-    class EqualTo: public virtual Comparator{
+    class SMESHCONTROLS_EXPORT EqualTo: public virtual Comparator{
     public:
       EqualTo();
       virtual bool IsSatisfy( long theElementId );
@@ -466,7 +498,7 @@ namespace SMESH{
       Class       : LogicalNOT
       Description : Logical NOT predicate
     */
-    class LogicalNOT: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT LogicalNOT: public virtual Predicate{
     public:
       LogicalNOT();
       virtual ~LogicalNOT();
@@ -485,7 +517,7 @@ namespace SMESH{
       Class       : LogicalBinary
       Description : Base class for binary logical predicate
     */
-    class LogicalBinary: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT LogicalBinary: public virtual Predicate{
     public:
       LogicalBinary();
       virtual ~LogicalBinary();
@@ -505,7 +537,7 @@ namespace SMESH{
       Class       : LogicalAND
       Description : Logical AND
     */
-    class LogicalAND: public virtual LogicalBinary{
+    class SMESHCONTROLS_EXPORT LogicalAND: public virtual LogicalBinary{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -515,7 +547,7 @@ namespace SMESH{
       Class       : LogicalOR
       Description : Logical OR
     */
-    class LogicalOR: public virtual LogicalBinary{
+    class SMESHCONTROLS_EXPORT LogicalOR: public virtual LogicalBinary{
     public:
       virtual bool IsSatisfy( long theElementId );
     };
@@ -525,7 +557,7 @@ namespace SMESH{
       Class       : ManifoldPart
       Description : Predicate for manifold part of mesh
     */
-    class ManifoldPart: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT ManifoldPart: public virtual Predicate{
     public:
 
       /* internal class for algorithm uses */
@@ -593,14 +625,14 @@ namespace SMESH{
 
     };
     typedef boost::shared_ptr<ManifoldPart> ManifoldPartPtr;
-                         
+
 
     /*
       Class       : ElementsOnSurface
       Description : Predicate elements that lying on indicated surface
                     (plane or cylinder)
     */
-    class ElementsOnSurface : public virtual Predicate {
+    class SMESHCONTROLS_EXPORT ElementsOnSurface : public virtual Predicate {
     public:
       ElementsOnSurface();
       ~ElementsOnSurface();
@@ -612,27 +644,156 @@ namespace SMESH{
       double  GetTolerance() const;
       void    SetSurface( const TopoDS_Shape& theShape,
                           const SMDSAbs_ElementType theType );
+      void    SetUseBoundaries( bool theUse );
+      bool    GetUseBoundaries() const { return myUseBoundaries; }
 
     private:
       void    process();
       void    process( const SMDS_MeshElement* theElem  );
-      bool    isOnSurface( const SMDS_MeshNode* theNode ) const;
+      bool    isOnSurface( const SMDS_MeshNode* theNode );
 
     private:
       const SMDS_Mesh*      myMesh;
       TColStd_MapOfInteger  myIds;
       SMDSAbs_ElementType   myType;
-      Handle(Geom_Surface)  mySurf;
+      //Handle(Geom_Surface)  mySurf;
+      TopoDS_Face           mySurf;
       double                myToler;
+      bool                  myUseBoundaries;
+      GeomAPI_ProjectPointOnSurf myProjector;
     };
-    
+
     typedef boost::shared_ptr<ElementsOnSurface> ElementsOnSurfacePtr;
+
+
+    /*
+      Class       : ElementsOnShape
+      Description : Predicate elements that lying on indicated shape
+                    (1D, 2D or 3D)
+    */
+    class SMESHCONTROLS_EXPORT ElementsOnShape : public virtual Predicate
+    {
+    public:
+      ElementsOnShape();
+      ~ElementsOnShape();
+
+      virtual void SetMesh (const SMDS_Mesh* theMesh);
+      virtual bool IsSatisfy (long theElementId);
+      virtual SMDSAbs_ElementType GetType() const;
+
+      void    SetTolerance (const double theToler);
+      double  GetTolerance() const;
+      void    SetAllNodes (bool theAllNodes);
+      bool    GetAllNodes() const { return myAllNodesFlag; }
+      void    SetShape (const TopoDS_Shape& theShape,
+                        const SMDSAbs_ElementType theType);
+
+    private:
+      void    addShape (const TopoDS_Shape& theShape);
+      void    process();
+      void    process (const SMDS_MeshElement* theElem);
+
+    private:
+      const SMDS_Mesh*      myMesh;
+      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
+    };
+
+    typedef boost::shared_ptr<ElementsOnShape> ElementsOnShapePtr;
+
+
+    /*
+      Class       : FreeFaces
+      Description : Predicate for free faces
+    */
+    class SMESHCONTROLS_EXPORT FreeFaces: public virtual Predicate{
+    public:
+      FreeFaces();
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool IsSatisfy( long theElementId );
+      virtual SMDSAbs_ElementType GetType() const;
+
+    private:
+      const SMDS_Mesh* myMesh;
+    };
+
+    /*
+      Class       : LinearOrQuadratic
+      Description : Predicate for free faces
+    */
+    class SMESHCONTROLS_EXPORT LinearOrQuadratic: public virtual Predicate{
+    public:
+      LinearOrQuadratic();
+      virtual void        SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool        IsSatisfy( long theElementId );
+      void                SetType( SMDSAbs_ElementType theType );
+      virtual SMDSAbs_ElementType GetType() const;
+
+    private:
+      const SMDS_Mesh*    myMesh;
+      SMDSAbs_ElementType myType;
+    };
+    typedef boost::shared_ptr<LinearOrQuadratic> LinearOrQuadraticPtr;
+
+    /*
+      Class       : GroupColor
+      Description : Functor for check color of group to whic mesh element belongs to
+    */
+    class SMESHCONTROLS_EXPORT GroupColor: public virtual Predicate{
+    public:
+      GroupColor();
+      virtual void        SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool        IsSatisfy( long theElementId );
+      void                SetType( SMDSAbs_ElementType theType );
+      virtual             SMDSAbs_ElementType GetType() const;
+      void                SetColorStr( const TCollection_AsciiString& );
+      void                GetColorStr( TCollection_AsciiString& ) const;
       
+    private:
+      typedef std::set< long > TIDs;
+
+      Quantity_Color      myColor;
+      SMDSAbs_ElementType myType;
+      TIDs                myIDs;
+    };
+    typedef boost::shared_ptr<GroupColor> GroupColorPtr;
+
+    /*
+      Class       : ElemGeomType
+      Description : Predicate to check element geometry type
+    */
+    class SMESHCONTROLS_EXPORT ElemGeomType: public virtual Predicate{
+    public:
+      ElemGeomType();
+      virtual void        SetMesh( const SMDS_Mesh* theMesh );
+      virtual bool        IsSatisfy( long theElementId );
+      void                SetType( SMDSAbs_ElementType theType );
+      virtual             SMDSAbs_ElementType GetType() const;
+      void                SetGeomType( SMDSAbs_GeometryType theType );
+      virtual SMDSAbs_GeometryType GetGeomType() const;
+
+    private:
+      const SMDS_Mesh*     myMesh;
+      SMDSAbs_ElementType  myType;
+      SMDSAbs_GeometryType myGeomType;
+    };
+    typedef boost::shared_ptr<ElemGeomType> ElemGeomTypePtr;
 
     /*
       FILTER
     */
-    class Filter{
+    class SMESHCONTROLS_EXPORT Filter{
     public:
       Filter();
       virtual ~Filter();
@@ -640,21 +801,21 @@ namespace SMESH{
 
       typedef std::vector<long> TIdSequence;
 
-      virtual 
+      virtual
       void
       GetElementsId( const SMDS_Mesh* theMesh,
                     TIdSequence& theSequence );
 
       static
       void
-      GetElementsId( const SMDS_Mesh* theMesh, 
+      GetElementsId( const SMDS_Mesh* theMesh,
                     PredicatePtr thePredicate,
                     TIdSequence& theSequence );
       
     protected:
       PredicatePtr myPredicate;
     };
-  };  
+  };
 };