-// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 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
+// 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 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.
+// 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
+// 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
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifndef _SMESH_CONTROLSDEF_HXX_
#include "SMDSAbs_ElementType.hxx"
#include "SMDS_MeshNode.hxx"
+#include "SMESH_TypeDefs.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;
std::vector<gp_XYZ> myArray;
};
- /*
- Class : Functor
- Description : Root of all Functors
- */
- class SMESHCONTROLS_EXPORT Functor
+ /*!
+ * \brief Class used to detect mesh modification: IsMeshModified() returns
+ * true if a mesh has changed since last calling IsMeshModified()
+ */
+ class SMESHCONTROLS_EXPORT TMeshModifTracer
{
+ unsigned long myMeshModifTime;
+ const SMDS_Mesh* myMesh;
public:
- ~Functor(){}
- virtual void SetMesh( const SMDS_Mesh* theMesh ) = 0;
- virtual SMDSAbs_ElementType GetType() const = 0;
+ TMeshModifTracer();
+ void SetMesh( const SMDS_Mesh* theMesh );
+ const SMDS_Mesh* GetMesh() const { return myMesh; }
+ bool IsMeshModified();
};
/*
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;
const SMDS_MeshElement* myCurrElement;
PREDICATES
*/
/*
- Class : Predicate
- Description : Base class for all predicates
+ Class : CoincidentNodes
+ Description : Predicate of Coincident Nodes
+ Note : This class is suitable only for visualization of Coincident Nodes
*/
- class SMESHCONTROLS_EXPORT Predicate: public virtual Functor{
+ class SMESHCONTROLS_EXPORT CoincidentNodes: public Predicate {
public:
- virtual bool IsSatisfy( long theElementId ) = 0;
- virtual SMDSAbs_ElementType GetType() const = 0;
+ CoincidentNodes();
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual bool IsSatisfy( long theElementId );
+ virtual SMDSAbs_ElementType GetType() const;
+
+ void SetTolerance (const double theToler) { myToler = theToler; }
+ double GetTolerance () const { return myToler; }
+
+ private:
+ double myToler;
+ TColStd_MapOfInteger myCoincidentIDs;
+ TMeshModifTracer myMeshModifTracer;
};
-
-
+ typedef boost::shared_ptr<CoincidentNodes> CoincidentNodesPtr;
+
+ /*
+ Class : CoincidentElements
+ Description : Predicate of Coincident Elements
+ Note : This class is suitable only for visualization of Coincident Elements
+ */
+ class SMESHCONTROLS_EXPORT CoincidentElements: public Predicate {
+ public:
+ CoincidentElements();
+ virtual void SetMesh( const SMDS_Mesh* theMesh );
+ virtual bool IsSatisfy( long theElementId );
+
+ private:
+ const SMDS_Mesh* myMesh;
+ };
+ class SMESHCONTROLS_EXPORT CoincidentElements1D: public CoincidentElements {
+ public:
+ virtual SMDSAbs_ElementType GetType() const;
+ };
+ class SMESHCONTROLS_EXPORT CoincidentElements2D: public CoincidentElements {
+ public:
+ virtual SMDSAbs_ElementType GetType() const;
+ };
+ class SMESHCONTROLS_EXPORT CoincidentElements3D: public CoincidentElements {
+ public:
+ virtual SMDSAbs_ElementType GetType() const;
+ };
+
/*
Class : FreeBorders
Description : Predicate for free borders
virtual bool IsSatisfy( long theElementId );
protected:
const SMDS_Mesh* myMesh;
- std::vector< const SMDS_MeshNode* > myLinkNodes;
};
typedef boost::shared_ptr<OverConstrainedFace> OverConstrainedFacePtr;
void process (const SMDS_MeshElement* theElem);
private:
- const SMDS_Mesh* myMesh;
+ TMeshModifTracer myMeshModifTracer;
TColStd_MapOfInteger myIds;
SMDSAbs_ElementType myType;
TopoDS_Shape myShape;
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 void SetMesh( const SMDS_Mesh* theMesh );
virtual bool IsSatisfy( long theElementId );
private:
- const SMDS_Mesh* myMesh;
+ TMeshModifTracer myMeshModifTracer;
long myFaceID;
double myToler;
std::set< long > myCoplanarIDs;