X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FControls%2FSMESH_ControlsDef.hxx;h=4f81bbd72f8ea2882d7f962d66e2507af501d8c1;hb=bf9d590cdaecbe7c0d55be058d28f745d23fc096;hp=339157e6cc12e262d5cbc61d1112a3663dfd6cf1;hpb=283a9b4f5af948bec54f81e3296d3185933eda1b;p=modules%2Fsmesh.git diff --git a/src/Controls/SMESH_ControlsDef.hxx b/src/Controls/SMESH_ControlsDef.hxx index 339157e6c..4f81bbd72 100644 --- a/src/Controls/SMESH_ControlsDef.hxx +++ b/src/Controls/SMESH_ControlsDef.hxx @@ -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 #include #include + #include + #include -#include +#include +#include #include #include #include +#include +#include +#include +#include +#include #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,67 +64,66 @@ class SMESHDS_Mesh; class SMESHDS_SubMesh; class gp_Pnt; -class TopoDS_Shape; - namespace SMESH{ namespace Controls{ - class TSequenceOfXYZ: public std::vector + class SMESHCONTROLS_EXPORT TSequenceOfXYZ { + typedef std::vector::size_type size_type; + public: - typedef std::vector TSuperClass; - TSequenceOfXYZ() - {} + TSequenceOfXYZ(); - TSequenceOfXYZ(size_type n): - TSuperClass(n) - {} + TSequenceOfXYZ(size_type n); - TSequenceOfXYZ(size_type n, const value_type& t): - TSuperClass(n,t) - {} + TSequenceOfXYZ(size_type n, const gp_XYZ& t); - TSequenceOfXYZ(const TSequenceOfXYZ& theSequenceOfXYZ): - TSuperClass(theSequenceOfXYZ) - {} + TSequenceOfXYZ(const TSequenceOfXYZ& theSequenceOfXYZ); template - TSequenceOfXYZ(InputIterator theBegin, InputIterator theEnd): - TSuperClass(theBegin,theEnd) - {} + TSequenceOfXYZ(InputIterator theBegin, InputIterator theEnd); - TSequenceOfXYZ& operator=(const TSequenceOfXYZ& theSequenceOfXYZ){ - TSuperClass::operator=(theSequenceOfXYZ); - return *this; - } + ~TSequenceOfXYZ(); - reference operator()(size_type n){ - return TSuperClass::operator[](n-1); - } + TSequenceOfXYZ& operator=(const TSequenceOfXYZ& theSequenceOfXYZ); - const_reference operator()(size_type n) const{ - return TSuperClass::operator[](n-1); - } + gp_XYZ& operator()(size_type n); - private: - reference operator[](size_type n); + const gp_XYZ& operator()(size_type n) const; + + void clear(); + + void reserve(size_type n); + + void push_back(const gp_XYZ& v); - const_reference operator[](size_type n) const; + size_type size() const; + + private: + std::vector myArray; }; - 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; @@ -112,21 +131,35 @@ namespace SMESH{ long GetPrecision() const; void SetPrecision( const long thePrecision ); - 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: - 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 +171,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 +183,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 +195,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,31 +210,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; @@ -213,31 +246,30 @@ 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; virtual SMDSAbs_ElementType GetType() const; struct Value{ - double myLength; - long myPntId[2]; - Value(double theLength, long thePntId1, long thePntId2); - bool operator<(const Value& x) const; + double myLength; + long myPntId[2]; + Value(double theLength, long thePntId1, long thePntId2); + bool operator<(const Value& x) const; }; typedef std::set TValues; void GetValues(TValues& theValues); - }; typedef boost::shared_ptr Length2DPtr; @@ -245,7 +277,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,16 +289,16 @@ 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 ); virtual double GetBadRate( double Value, int nbNodes ) const; virtual SMDSAbs_ElementType GetType() const; struct Value{ - long myPntId[2]; - Value(long thePntId1, long thePntId2); - bool operator<(const Value& x) const; + long myPntId[2]; + Value(long thePntId1, long thePntId2); + bool operator<(const Value& x) const; }; typedef std::map MValues; @@ -280,27 +312,26 @@ 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( 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,28 +355,44 @@ 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 ); typedef long TElemId; struct Border{ - TElemId myElemId; - TElemId myPntId[2]; - Border(long theElemId, long thePntId1, long thePntId2); - bool operator<(const Border& x) const; + TElemId myElemId; + TElemId myPntId[2]; + Border(long theElemId, long thePntId1, long thePntId2); + bool operator<(const Border& x) const; }; typedef std::set TBorders; void GetBoreders(TBorders& theBorders); protected: - SMDS_Mesh* myMesh; + const SMDS_Mesh* myMesh; }; typedef boost::shared_ptr 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 @@ -355,11 +402,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 +416,7 @@ namespace SMESH{ bool SetRangeStr( const TCollection_AsciiString& ); protected: - SMDS_Mesh* myMesh; + const SMDS_Mesh* myMesh; TColStd_SequenceOfInteger myMin; TColStd_SequenceOfInteger myMax; @@ -385,11 +432,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 +454,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 +464,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 +474,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 +491,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 +510,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 +530,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 +540,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 +550,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 +579,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 +607,7 @@ namespace SMESH{ TVectorOfFacePtr& theFaces ) const; private: - SMDS_Mesh* myMesh; + const SMDS_Mesh* myMesh; TColStd_MapOfInteger myMapIds; TColStd_MapOfInteger myMapBadGeomIds; TVectorOfFacePtr myAllFacePtr; @@ -571,18 +618,18 @@ namespace SMESH{ }; typedef boost::shared_ptr 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(); - virtual void SetMesh( SMDS_Mesh* theMesh ); + virtual void SetMesh( const SMDS_Mesh* theMesh ); virtual bool IsSatisfy( long theElementId ); virtual SMDSAbs_ElementType GetType() const; @@ -590,38 +637,178 @@ 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: - SMDS_Mesh* myMesh; + 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 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 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 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 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 ElemGeomTypePtr; /* FILTER */ - class Filter{ + class SMESHCONTROLS_EXPORT Filter{ public: Filter(); virtual ~Filter(); virtual void SetPredicate(PredicatePtr thePred); + typedef std::vector 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; }; - }; + }; };