// 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 <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 "SMDSAbs_ElementType.hxx"
#include "SMDS_MeshNode.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;
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;
Class : Functor
Description : Root of all Functors
*/
- class Functor
+ class SMESHCONTROLS_EXPORT Functor
{
public:
~Functor(){}
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 );
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 );
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;
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;
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;
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;
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;
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;
};
typedef std::set<Value> TValues;
void GetValues(TValues& theValues);
-
};
typedef boost::shared_ptr<Length2D> Length2DPtr;
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 );
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 );
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;
};
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 );
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 );
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();
Class : Comparator
Description : Base class for comparators
*/
- class Comparator: public virtual Predicate{
+ class SMESHCONTROLS_EXPORT Comparator: public virtual Predicate{
public:
Comparator();
virtual ~Comparator();
Class : LessThan
Description : Comparator "<"
*/
- class LessThan: public virtual Comparator{
+ class SMESHCONTROLS_EXPORT LessThan: public virtual Comparator{
public:
virtual bool IsSatisfy( long theElementId );
};
Class : MoreThan
Description : Comparator ">"
*/
- class MoreThan: public virtual Comparator{
+ class SMESHCONTROLS_EXPORT MoreThan: public virtual Comparator{
public:
virtual bool IsSatisfy( long theElementId );
};
Class : EqualTo
Description : Comparator "="
*/
- class EqualTo: public virtual Comparator{
+ class SMESHCONTROLS_EXPORT EqualTo: public virtual Comparator{
public:
EqualTo();
virtual bool IsSatisfy( long theElementId );
Class : LogicalNOT
Description : Logical NOT predicate
*/
- class LogicalNOT: public virtual Predicate{
+ class SMESHCONTROLS_EXPORT LogicalNOT: public virtual Predicate{
public:
LogicalNOT();
virtual ~LogicalNOT();
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();
Class : LogicalAND
Description : Logical AND
*/
- class LogicalAND: public virtual LogicalBinary{
+ class SMESHCONTROLS_EXPORT LogicalAND: public virtual LogicalBinary{
public:
virtual bool IsSatisfy( long theElementId );
};
Class : LogicalOR
Description : Logical OR
*/
- class LogicalOR: public virtual LogicalBinary{
+ class SMESHCONTROLS_EXPORT LogicalOR: public virtual LogicalBinary{
public:
virtual bool IsSatisfy( long theElementId );
};
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 */
};
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();
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;
+
/*
FILTER
*/
- class Filter{
+ class SMESHCONTROLS_EXPORT Filter{
public:
Filter();
virtual ~Filter();
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;
};
- };
+ };
};