-// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com
-
+// 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
+ #if defined SMESHCONTROLS_EXPORTS || defined SMESHControls_EXPORTS
#define SMESHCONTROLS_EXPORT __declspec( dllexport )
#else
#define SMESHCONTROLS_EXPORT __declspec( dllimport )
class SMESHDS_SubMesh;
class gp_Pnt;
-//class TopoDS_Shape;
namespace SMESH{
namespace Controls{
- class SMESHCONTROLS_EXPORT TSequenceOfXYZ: public std::vector<gp_XYZ>
+ class SMESHCONTROLS_EXPORT TSequenceOfXYZ
{
+ typedef std::vector<gp_XYZ>::size_type size_type;
+
public:
- typedef std::vector<gp_XYZ> 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 <class InputIterator>
- 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);
- const_reference operator[](size_type n) const;
+ void push_back(const gp_XYZ& v);
+
+ size_type size() const;
+
+ private:
+ std::vector<gp_XYZ> myArray;
};
/*
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
virtual double GetBadRate( double Value, int nbNodes ) const;
virtual SMDSAbs_ElementType GetType() const;
};
-
-
+
+
/*
Class : Skew
Description : Functor for calculating skew in degrees
virtual double GetBadRate( double Value, int nbNodes ) const;
virtual SMDSAbs_ElementType GetType() const;
};
-
-
+
+
/*
Class : Area
Description : Functor for calculating area
virtual double GetBadRate( double Value, int nbNodes ) const;
virtual SMDSAbs_ElementType GetType() const;
};
-
+
/*
Class : Length2D
Description : Functor for calculating length of edge
};
typedef std::set<Value> TValues;
void GetValues(TValues& theValues);
-
};
typedef boost::shared_ptr<Length2D> Length2DPtr;
virtual bool IsSatisfy( long theElementId ) = 0;
virtual SMDSAbs_ElementType GetType() const = 0;
};
-
/*
virtual void SetMesh( const SMDS_Mesh* theMesh );
virtual bool IsSatisfy( long theElementId );
virtual SMDSAbs_ElementType GetType() const;
-
+
protected:
const SMDS_Mesh* myMesh;
};
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
};
typedef boost::shared_ptr<ManifoldPart> ManifoldPartPtr;
-
+
/*
Class : ElementsOnSurface
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
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;
};
- };
+ };
};