X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FControls%2FSMESH_ControlsDef.hxx;h=68420c300ba3c27f28443bb02d16589f0933d795;hb=5f35b29326442a6bc64dda716d66f06a05acf12f;hp=576b1e8e011b9cec6f90c939fc040d6db3f9a9ae;hpb=2875648bdbc323df97bdb879b60673a2de776889;p=modules%2Fsmesh.git diff --git a/src/Controls/SMESH_ControlsDef.hxx b/src/Controls/SMESH_ControlsDef.hxx index 576b1e8e0..68420c300 100644 --- a/src/Controls/SMESH_ControlsDef.hxx +++ b/src/Controls/SMESH_ControlsDef.hxx @@ -1,21 +1,24 @@ -// 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-2010 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_ @@ -23,18 +26,36 @@ #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,60 +65,51 @@ 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); + + size_type size() const; - const_reference operator[](size_type n) const; + private: + std::vector myArray; }; /* Class : Functor Description : Root of all Functors */ - class Functor + class SMESHCONTROLS_EXPORT Functor { public: ~Functor(){} @@ -109,32 +121,40 @@ 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 ); virtual double GetValue( long theElementId ); virtual double GetValue(const TSequenceOfXYZ& thePoints) { return -1.0;}; + void GetHistogram(int nbIntervals, + std::vector& nbEvents, + std::vector& funValues, + const std::vector& elements, + const double* minmax=0); virtual SMDSAbs_ElementType GetType() const = 0; virtual double GetBadRate( double Value, int nbNodes ) const = 0; long GetPrecision() const; void SetPrecision( const long thePrecision ); + double Round( const double & value ); - 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: - const SMDS_Mesh* myMesh; - long myPrecision; + const SMDS_Mesh* myMesh; + const SMDS_MeshElement* myCurrElement; + long myPrecision; + double myPrecisionValue; }; - - + + /* 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 ); @@ -143,11 +163,35 @@ namespace SMESH{ }; + /* + Class : MaxElementLength2D + Description : Functor calculating maximum length of 2D element + */ + class SMESHCONTROLS_EXPORT MaxElementLength2D: public virtual NumericalFunctor{ + public: + virtual double GetValue( long theElementId ); + virtual double GetBadRate( double Value, int nbNodes ) const; + virtual SMDSAbs_ElementType GetType() const; + }; + + + /* + Class : MaxElementLength3D + Description : Functor calculating maximum length of 3D element + */ + class SMESHCONTROLS_EXPORT MaxElementLength3D: public virtual NumericalFunctor{ + public: + virtual double GetValue( long theElementId ); + 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; @@ -159,7 +203,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; @@ -171,8 +215,9 @@ 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( long theElementId ); virtual double GetValue( const TSequenceOfXYZ& thePoints ); virtual double GetBadRate( double Value, int nbNodes ) const; virtual SMDSAbs_ElementType GetType() const; @@ -183,7 +228,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; @@ -198,31 +243,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; @@ -234,31 +279,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; @@ -266,7 +310,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 ); @@ -278,16 +322,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; @@ -301,25 +345,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; }; @@ -329,23 +372,84 @@ 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 ); virtual bool IsSatisfy( long theElementId ); virtual SMDSAbs_ElementType GetType() const; - + protected: const SMDS_Mesh* myMesh; }; - + + /* + BareBorderVolume + */ + class SMESHCONTROLS_EXPORT BareBorderVolume: public Predicate + { + public: + BareBorderVolume():myMesh(0) {} + virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; } + virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Volume; } + virtual bool IsSatisfy( long theElementId ); + protected: + const SMDS_Mesh* myMesh; + }; + typedef boost::shared_ptr BareBorderVolumePtr; + + /* + BareBorderFace + */ + class SMESHCONTROLS_EXPORT BareBorderFace: public Predicate + { + public: + BareBorderFace():myMesh(0) {} + virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; } + virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Face; } + virtual bool IsSatisfy( long theElementId ); + protected: + const SMDS_Mesh* myMesh; + std::vector< const SMDS_MeshNode* > myLinkNodes; + }; + typedef boost::shared_ptr BareBorderFacePtr; + + /* + OverConstrainedVolume + */ + class SMESHCONTROLS_EXPORT OverConstrainedVolume: public Predicate + { + public: + OverConstrainedVolume():myMesh(0) {} + virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; } + virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Volume; } + virtual bool IsSatisfy( long theElementId ); + protected: + const SMDS_Mesh* myMesh; + }; + typedef boost::shared_ptr OverConstrainedVolumePtr; + + /* + OverConstrainedFace + */ + class SMESHCONTROLS_EXPORT OverConstrainedFace: public Predicate + { + public: + OverConstrainedFace():myMesh(0) {} + virtual void SetMesh( const SMDS_Mesh* theMesh ) { myMesh = theMesh; } + virtual SMDSAbs_ElementType GetType() const { return SMDSAbs_Face; } + virtual bool IsSatisfy( long theElementId ); + protected: + const SMDS_Mesh* myMesh; + std::vector< const SMDS_MeshNode* > myLinkNodes; + }; + typedef boost::shared_ptr OverConstrainedFacePtr; /* 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 ); @@ -354,19 +458,35 @@ namespace SMESH{ 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: 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 @@ -376,7 +496,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(); @@ -406,7 +526,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(); @@ -428,7 +548,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 ); }; @@ -438,7 +558,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 ); }; @@ -448,7 +568,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 ); @@ -465,7 +585,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(); @@ -484,7 +604,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(); @@ -504,7 +624,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 ); }; @@ -514,7 +634,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 ); }; @@ -524,7 +644,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 */ @@ -592,14 +712,14 @@ 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(); @@ -611,27 +731,181 @@ 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 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; + + /* + Class : CoplanarFaces + Description : Predicate to check angle between faces + */ + class SMESHCONTROLS_EXPORT CoplanarFaces: public virtual Predicate + { + public: + CoplanarFaces(); + void SetFace( long theID ) { myFaceID = theID; } + 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 bool IsSatisfy( long theElementId ); + + private: + const SMDS_Mesh* myMesh; + long myFaceID; + double myToler; + std::set< long > myCoplanarIDs; + }; + typedef boost::shared_ptr CoplanarFacesPtr; /* FILTER */ - class Filter{ + class SMESHCONTROLS_EXPORT Filter{ public: Filter(); virtual ~Filter(); @@ -639,21 +913,21 @@ namespace SMESH{ typedef std::vector TIdSequence; - virtual + virtual void GetElementsId( const SMDS_Mesh* theMesh, - TIdSequence& theSequence ); + TIdSequence& theSequence ); static void - GetElementsId( const SMDS_Mesh* theMesh, - PredicatePtr thePredicate, - TIdSequence& theSequence ); + GetElementsId( const SMDS_Mesh* theMesh, + PredicatePtr thePredicate, + TIdSequence& theSequence ); protected: PredicatePtr myPredicate; }; - }; + }; };