Salome HOME
Temporary rollback ASCII load/save for smesh
[modules/smesh.git] / src / Controls / SMESH_ControlsDef.hxx
index 339157e6cc12e262d5cbc61d1112a3663dfd6cf1..c9b4dc0b9de9ab79d3bdb1dbaeeed6bb9fdee34b 100644 (file)
@@ -15,7 +15,7 @@
 //  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 
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 
 #ifndef _SMESH_CONTROLSDEF_HXX_
 #define _SMESH_CONTROLSDEF_HXX_
 
 #include "SMESH_Controls.hxx"
 
+#ifdef WNT
+ #if 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;
@@ -46,11 +56,10 @@ 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;
@@ -93,18 +102,26 @@ namespace SMESH{
       const_reference operator[](size_type n) const;
     };
 
-    class Functor
+    /*
+      Class       : Functor
+      Description : Root of all Functors
+    */
+    class SMESHCONTROLS_EXPORT Functor
     {
     public:
       ~Functor(){}
-      virtual void SetMesh( SMDS_Mesh* theMesh ) = 0;
+      virtual void SetMesh( const SMDS_Mesh* theMesh ) = 0;
       virtual SMDSAbs_ElementType GetType() const = 0;
     };
 
-    class NumericalFunctor: public virtual Functor{
+    /*
+      Class       : NumericalFunctor
+      Description : Root of all Functors returning numeric value
+    */
+    class SMESHCONTROLS_EXPORT NumericalFunctor: public virtual Functor{
     public:
       NumericalFunctor();
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual double GetValue( long theElementId );
       virtual double GetValue(const TSequenceOfXYZ& thePoints) { return -1.0;};
       virtual SMDSAbs_ElementType GetType() const = 0;
@@ -117,16 +134,30 @@ namespace SMESH{
       static bool GetPoints(const SMDS_MeshElement* theElem, 
                            TSequenceOfXYZ& theRes);
     protected:
-      SMDS_Mesh* myMesh;
+      const SMDS_Mesh* myMesh;
+      const SMDS_MeshElement* myCurrElement;
       long       myPrecision;
     };
   
   
+    /*
+      Class       : Volume
+      Description : Functor calculating volume of 3D mesh element
+    */
+    class SMESHCONTROLS_EXPORT Volume: 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;
+    };
+  
+  
     /*
       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;
@@ -138,7 +169,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;
@@ -150,7 +181,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;
@@ -162,7 +193,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;
@@ -177,7 +208,7 @@ 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;
@@ -189,7 +220,7 @@ namespace SMESH{
       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;
@@ -201,7 +232,7 @@ namespace SMESH{
       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;
@@ -213,7 +244,7 @@ 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;
@@ -224,7 +255,7 @@ namespace SMESH{
       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;
@@ -245,7 +276,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 );
@@ -257,7 +288,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 );
@@ -280,7 +311,7 @@ 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;
@@ -292,15 +323,15 @@ namespace SMESH{
       Class       : FreeBorders
       Description : Predicate for free borders
     */
-    class FreeBorders: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT FreeBorders: public virtual Predicate{
     public:
       FreeBorders();
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
       virtual SMDSAbs_ElementType GetType() const;
             
     protected:
-      SMDS_Mesh* myMesh;
+      const SMDS_Mesh* myMesh;
     };
    
 
@@ -308,15 +339,15 @@ 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( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
       virtual SMDSAbs_ElementType GetType() const;
             
     protected:
-      SMDS_Mesh* myMesh;
+      const SMDS_Mesh* myMesh;
     };
    
 
@@ -324,10 +355,10 @@ 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( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
       virtual SMDSAbs_ElementType GetType() const;
       static bool IsFreeEdge( const SMDS_MeshNode** theNodes, const int theFaceId  );
@@ -342,7 +373,7 @@ namespace SMESH{
       void GetBoreders(TBorders& theBorders);
       
     protected:
-      SMDS_Mesh* myMesh;
+      const SMDS_Mesh* myMesh;
     };
     typedef boost::shared_ptr<FreeEdges> FreeEdgesPtr;
 
@@ -355,11 +386,11 @@ 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();
-      virtual void                  SetMesh( SMDS_Mesh* theMesh );
+      virtual void                  SetMesh( const SMDS_Mesh* theMesh );
       virtual bool                  IsSatisfy( long theNodeId );
       virtual SMDSAbs_ElementType   GetType() const;
       virtual void                  SetType( SMDSAbs_ElementType theType );
@@ -369,7 +400,7 @@ namespace SMESH{
       bool                          SetRangeStr( const TCollection_AsciiString& );
 
     protected:
-      SMDS_Mesh*                    myMesh;
+      const SMDS_Mesh*              myMesh;
 
       TColStd_SequenceOfInteger     myMin;
       TColStd_SequenceOfInteger     myMax;
@@ -385,11 +416,11 @@ 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();
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual void SetMargin(double theValue);
       virtual void SetNumFunctor(NumericalFunctorPtr theFunct);
       virtual bool IsSatisfy( long theElementId ) = 0;
@@ -407,7 +438,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 );
     };
@@ -417,7 +448,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 );
     };
@@ -427,7 +458,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 );
@@ -444,12 +475,12 @@ namespace SMESH{
       Class       : LogicalNOT
       Description : Logical NOT predicate
     */
-    class LogicalNOT: public virtual Predicate{
+    class SMESHCONTROLS_EXPORT LogicalNOT: public virtual Predicate{
     public:
       LogicalNOT();
       virtual ~LogicalNOT();
       virtual bool IsSatisfy( long theElementId );
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual void SetPredicate(PredicatePtr thePred);
       virtual SMDSAbs_ElementType GetType() const;
   
@@ -463,11 +494,11 @@ 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();
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual void SetPredicate1(PredicatePtr thePred);
       virtual void SetPredicate2(PredicatePtr thePred);
       virtual SMDSAbs_ElementType GetType() const;
@@ -483,7 +514,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 );
     };
@@ -493,7 +524,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 );
     };
@@ -503,7 +534,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 */
@@ -532,7 +563,7 @@ namespace SMESH{
       
       ManifoldPart();
       ~ManifoldPart();
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       // inoke when all parameters already set
       virtual bool IsSatisfy( long theElementId );
       virtual      SMDSAbs_ElementType GetType() const;
@@ -560,7 +591,7 @@ namespace SMESH{
                               TVectorOfFacePtr& theFaces ) const;
 
     private:
-      SMDS_Mesh*            myMesh;
+      const SMDS_Mesh*      myMesh;
       TColStd_MapOfInteger  myMapIds;
       TColStd_MapOfInteger  myMapBadGeomIds;
       TVectorOfFacePtr      myAllFacePtr;
@@ -578,11 +609,11 @@ namespace SMESH{
       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();
-      virtual void SetMesh( SMDS_Mesh* theMesh );
+      virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
       virtual      SMDSAbs_ElementType GetType() const;
 
@@ -597,7 +628,7 @@ namespace SMESH{
       bool    isOnSurface( const SMDS_MeshNode* theNode ) const;
 
     private:
-      SMDS_Mesh*            myMesh;
+      const SMDS_Mesh*      myMesh;
       TColStd_MapOfInteger  myIds;
       SMDSAbs_ElementType   myType;
       Handle(Geom_Surface)  mySurf;
@@ -610,14 +641,25 @@ namespace SMESH{
     /*
       FILTER
     */
-    class Filter{
+    class SMESHCONTROLS_EXPORT Filter{
     public:
       Filter();
       virtual ~Filter();
       virtual void SetPredicate(PredicatePtr thePred);
+
       typedef std::vector<long> TIdSequence;
-      virtual TIdSequence GetElementsId( SMDS_Mesh* theMesh );
-  
+
+      virtual 
+      void
+      GetElementsId( const SMDS_Mesh* theMesh,
+                    TIdSequence& theSequence );
+
+      static
+      void
+      GetElementsId( const SMDS_Mesh* theMesh, 
+                    PredicatePtr thePredicate,
+                    TIdSequence& theSequence );
+      
     protected:
       PredicatePtr myPredicate;
     };