-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2014 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.
+// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
#ifndef _SMESH_CONTROLSDEF_HXX_
#define _SMESH_CONTROLSDEF_HXX_
-#include <set>
-#include <map>
-#include <vector>
+#include "SMESH_Controls.hxx"
-#include <boost/shared_ptr.hpp>
+#include "SMDS_MeshNode.hxx"
+#include "SMESH_TypeDefs.hxx"
-#include <gp_XYZ.hxx>
-#include <GeomAPI_ProjectPointOnSurf.hxx>
+#include <BRepClass3d_SolidClassifier.hxx>
+#include <Bnd_B3d.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
-#include <TColStd_SequenceOfInteger.hxx>
+#include <GeomAPI_ProjectPointOnSurf.hxx>
+#include <Quantity_Color.hxx>
#include <TColStd_MapOfInteger.hxx>
+#include <TColStd_SequenceOfInteger.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 <TopoDS_Face.hxx>
+#include <gp_XYZ.hxx>
-#include "SMDSAbs_ElementType.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMESH_TypeDefs.hxx"
+#include <set>
+#include <map>
+#include <vector>
-#include "SMESH_Controls.hxx"
+#include <boost/shared_ptr.hpp>
class SMDS_MeshElement;
class SMDS_MeshFace;
std::vector<int>& nbEvents,
std::vector<double>& funValues,
const std::vector<int>& elements,
- const double* minmax=0);
+ const double* minmax=0,
+ const bool isLogarithmic = false);
virtual SMDSAbs_ElementType GetType() const = 0;
virtual double GetBadRate( double Value, int nbNodes ) const = 0;
long GetPrecision() const;
virtual SMDSAbs_ElementType GetType() const;
};
-
/*
Class : Skew
Description : Functor for calculating skew in degrees
/*
Class : MultiConnection
- Description : Functor for calculating number of faces conneted to the edge
+ Description : Functor for calculating number of faces connected to the edge
*/
class SMESHCONTROLS_EXPORT MultiConnection: public virtual NumericalFunctor{
public:
/*
Class : MultiConnection2D
- Description : Functor for calculating number of faces conneted to the edge
+ Description : Functor for calculating number of faces connected to the edge
*/
class SMESHCONTROLS_EXPORT MultiConnection2D: public virtual NumericalFunctor{
public:
const SMDS_Mesh* myMesh;
};
+ /*
+ Class : ElemEntityType
+ Description : Functor for calculating entity type
+ */
+ class SMESHCONTROLS_EXPORT ElemEntityType: public virtual Predicate{
+ public:
+ ElemEntityType();
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual bool IsSatisfy( long theElementId );
+ void SetType( SMDSAbs_ElementType theType );
+ virtual SMDSAbs_ElementType GetType() const;
+ void SetElemEntityType( SMDSAbs_EntityType theEntityType );
+ SMDSAbs_EntityType GetElemEntityType() const;
+
+ private:
+ const SMDS_Mesh* myMesh;
+ SMDSAbs_ElementType myType;
+ SMDSAbs_EntityType myEntityType;
+ };
+ typedef boost::shared_ptr<ElemEntityType> ElemEntityTypePtr;
+
+
/*
BareBorderVolume
*/
const SMDSAbs_ElementType theType);
private:
- void addShape (const TopoDS_Shape& theShape);
- void process();
- void process (const SMDS_MeshElement* theElem);
- private:
- TMeshModifTracer myMeshModifTracer;
- TColStd_MapOfInteger myIds;
- SMDSAbs_ElementType myType;
- TopoDS_Shape myShape;
- double myToler;
- bool myAllNodesFlag;
+ struct TClassifier
+ {
+ TClassifier(const TopoDS_Shape& s, double tol) { Init(s,tol); }
+ void Init(const TopoDS_Shape& s, double tol);
+ bool IsOut(const gp_Pnt& p);
+ TopAbs_ShapeEnum ShapeType() const;
+ private:
+ bool isOutOfSolid (const gp_Pnt& p);
+ bool isOutOfBox (const gp_Pnt& p);
+ bool isOutOfFace (const gp_Pnt& p);
+ bool isOutOfEdge (const gp_Pnt& p);
+ bool isOutOfVertex(const gp_Pnt& p);
+ bool isBox (const TopoDS_Shape& s);
+
+ bool (TClassifier::* myIsOutFun)(const gp_Pnt& p);
+ BRepClass3d_SolidClassifier mySolidClfr;
+ Bnd_B3d myBox;
+ GeomAPI_ProjectPointOnSurf myProjFace;
+ GeomAPI_ProjectPointOnCurve myProjEdge;
+ gp_Pnt myVertexXYZ;
+ TopoDS_Shape myShape;
+ double myTol;
+ };
+ void clearClassifiers();
+
+ std::vector< TClassifier* > myClassifiers;
+ const SMDS_Mesh* myMesh;
+ 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 : BelongToGeom
+ Description : Predicate for verifying whether entiy belong to
+ specified geometrical support
+ */
+ class SMESHCONTROLS_EXPORT BelongToGeom: public virtual Predicate
+ {
+ public:
+ BelongToGeom();
+
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual void SetGeom( const TopoDS_Shape& theShape );
+
+ virtual bool IsSatisfy( long theElementId );
+
+ virtual void SetType( SMDSAbs_ElementType theType );
+ virtual SMDSAbs_ElementType GetType() const;
+
+ TopoDS_Shape GetShape();
+ const SMESHDS_Mesh* GetMeshDS() const;
+
+ void SetTolerance( double );
+ double GetTolerance();
+
+ private:
+ virtual void init();
+
+ TopoDS_Shape myShape;
+ const SMESHDS_Mesh* myMeshDS;
+ SMDSAbs_ElementType myType;
+ bool myIsSubshape;
+ double myTolerance; // only if myIsSubshape == false
+ Controls::ElementsOnShapePtr myElementsOnShapePtr; // only if myIsSubshape == false
+ };
+ typedef boost::shared_ptr<BelongToGeom> BelongToGeomPtr;
+
+ /*
+ Class : LyingOnGeom
+ Description : Predicate for verifying whether entiy lying or partially lying on
+ specified geometrical support
+ */
+ class SMESHCONTROLS_EXPORT LyingOnGeom: public virtual Predicate
+ {
+ public:
+ LyingOnGeom();
+
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual void SetGeom( const TopoDS_Shape& theShape );
+
+ virtual bool IsSatisfy( long theElementId );
+
+ virtual void SetType( SMDSAbs_ElementType theType );
+ virtual SMDSAbs_ElementType GetType() const;
+
+ TopoDS_Shape GetShape();
+ const SMESHDS_Mesh* GetMeshDS() const;
+
+ void SetTolerance( double );
+ double GetTolerance();
+
+ virtual bool Contains( const SMESHDS_Mesh* theMeshDS,
+ const TopoDS_Shape& theShape,
+ const SMDS_MeshElement* theElem,
+ TopAbs_ShapeEnum theFindShapeEnum,
+ TopAbs_ShapeEnum theAvoidShapeEnum = TopAbs_SHAPE );
+ private:
+ virtual void init();
+
+ TopoDS_Shape myShape;
+ const SMESHDS_Mesh* myMeshDS;
+ SMDSAbs_ElementType myType;
+ bool myIsSubshape;
+ double myTolerance; // only if myIsSubshape == false
+ Controls::ElementsOnShapePtr myElementsOnShapePtr; // only if myIsSubshape == false
+ };
+ typedef boost::shared_ptr<LyingOnGeom> LyingOnGeomPtr;
+
/*
Class : FreeFaces
Description : Predicate for free faces
void SetType( SMDSAbs_ElementType theType );
virtual SMDSAbs_ElementType GetType() const;
void SetGeomType( SMDSAbs_GeometryType theType );
- virtual SMDSAbs_GeometryType GetGeomType() const;
+ SMDSAbs_GeometryType GetGeomType() const;
private:
const SMDS_Mesh* myMesh;
};
typedef boost::shared_ptr<CoplanarFaces> CoplanarFacesPtr;
+ /*
+ Class : ConnectedElements
+ Description : Predicate to get elements of one domain
+ */
+ class SMESHCONTROLS_EXPORT ConnectedElements: public virtual Predicate
+ {
+ public:
+ ConnectedElements();
+ void SetNode( int nodeID );
+ void SetPoint( double x, double y, double z );
+ int GetNode() const;
+ std::vector<double> GetPoint() const;
+
+ void SetType( SMDSAbs_ElementType theType );
+ virtual SMDSAbs_ElementType GetType() const;
+
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual bool IsSatisfy( long theElementId );
+
+ //const std::set<long>& GetDomainIDs() const { return myOkIDs; }
+
+ private:
+ int myNodeID;
+ std::vector<double> myXYZ;
+ SMDSAbs_ElementType myType;
+ TMeshModifTracer myMeshModifTracer;
+
+ void clearOkIDs();
+ bool myOkIDsReady;
+ std::set< int > myOkIDs; // empty means that there is one domain
+ };
+ typedef boost::shared_ptr<ConnectedElements> ConnectedElementsPtr;
+
/*
FILTER
*/
- class SMESHCONTROLS_EXPORT Filter{
+ class SMESHCONTROLS_EXPORT Filter {
public:
Filter();
virtual ~Filter();