-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016 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
virtual int NbNodes() const;
virtual int NbEdges() const;
virtual int NbFaces() const;
- inline int GetID() const { return myID; };
+ inline int GetID() const { return myID; }
///Return the type of the current element
- virtual SMDSAbs_ElementType GetType() const = 0;
- virtual SMDSAbs_EntityType GetEntityType() const = 0;
+ virtual SMDSAbs_ElementType GetType() const = 0;
+ virtual SMDSAbs_EntityType GetEntityType() const = 0;
virtual SMDSAbs_GeometryType GetGeomType() const = 0;
- virtual vtkIdType GetVtkType() const = 0;
+ virtual vtkIdType GetVtkType() const = 0;
+
virtual bool IsPoly() const { return false; }
virtual bool IsQuadratic() const;
-
virtual bool IsMediumNode(const SMDS_MeshNode* node) const;
virtual int NbCornerNodes() const;
*/
virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
- inline ShortType getMeshId() const { return myMeshId; }
- inline LongType getshapeId() const { return myShapeId; }
- inline int getIdInShape() const { return myIdInShape; }
- inline int getVtkId() const { return myVtkID; }
+ inline ShortType getMeshId() const { return myMeshId; }
+ inline LongType getshapeId() const { return myShapeId >> BITS_SHIFT; }
+ inline int getIdInShape() const { return myIdInShape; }
+ inline int getVtkId() const { return myVtkID; }
+
+ // mark this element; to be used in algos
+ inline void setIsMarked( bool is ) const;
+ inline bool isMarked() const;
/*!
* \brief Filters of elements, to be used with SMDS_SetIterator
};
protected:
- inline void setId(int id) {myID = id; }
- inline void setShapeId(LongType shapeId) {myShapeId = shapeId; }
- inline void setIdInShape(int id) { myIdInShape = id; }
- inline void setVtkId(int vtkId) { myVtkID = vtkId; }
+ inline void setId(int id) { myID = id; }
+ inline void setVtkId(int vtkId) { myVtkID = vtkId; }
+ inline void setIdInShape(int id) { myIdInShape = id; }
+ inline void setShapeId(LongType shapeId) { myShapeId = ( shapeId << BITS_SHIFT ) | ( myShapeId & BIT_IS_MARKED ); }
SMDS_MeshElement(int ID=-1);
SMDS_MeshElement(int id, ShortType meshId, LongType shapeId = 0);
virtual void init(int id = -1, ShortType meshId = -1, LongType shapeId = 0);
int myVtkID;
//! SMDS_Mesh identification in SMESH
ShortType myMeshId;
- //! SubShape and SubMesh identification in SMESHDS
+ //! SubShape and SubMesh identification in SMESHDS; one bit is used to mark the element
LongType myShapeId;
//! Element index in SMESHDS_SubMesh vector
int myIdInShape;
+
+ enum Bits { // use the 1st right bit of myShapeId to set/unset a mark
+ BIT_IS_MARKED = 1,
+ BITS_SHIFT = 1
+ };
};
+inline void SMDS_MeshElement::setIsMarked( bool is ) const
+{
+ const_cast< SMDS_MeshElement* >( this )->myShapeId = ( myShapeId & ~BIT_IS_MARKED ) | is;
+}
+inline bool SMDS_MeshElement::isMarked() const
+{
+ return myShapeId & BIT_IS_MARKED;
+}
// ============================================================
/*!