X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHDS%2FSMESHDS_SubMesh.hxx;h=3a31915c44685922bbc9f7dff3d3c0ef46bc73c0;hp=a9feca8b32cfe314ce9470c465753210bf1d2ce7;hb=2f529dcd2629679dadcca3047583bfcf28ca7b1a;hpb=1067ffa6e7e5c394e3a1b17219d8b355a57607cd diff --git a/src/SMESHDS/SMESHDS_SubMesh.hxx b/src/SMESHDS/SMESHDS_SubMesh.hxx index a9feca8b3..3a31915c4 100644 --- a/src/SMESHDS/SMESHDS_SubMesh.hxx +++ b/src/SMESHDS/SMESHDS_SubMesh.hxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 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 @@ -6,7 +6,7 @@ // 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 @@ -29,29 +29,33 @@ #include "SMESH_SMESHDS.hxx" +#include "SMDS_ElementHolder.hxx" #include "SMDS_Mesh.hxx" -#include #include +#include +class SMESHDS_SubMesh; +typedef boost::container::flat_set< const SMESHDS_SubMesh* > TSubMeshSet; + class SMESHDS_SubMesh; typedef SMDS_Iterator SMESHDS_SubMeshIterator; typedef boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr; class SMESHDS_Mesh; -class SMESHDS_EXPORT SMESHDS_SubMesh +class SMESHDS_EXPORT SMESHDS_SubMesh : public SMDS_ElementHolder { public: - SMESHDS_SubMesh(SMESHDS_Mesh *parent, int index); + SMESHDS_SubMesh(const SMESHDS_Mesh *parent, int index); virtual ~SMESHDS_SubMesh(); virtual bool IsComplexSubmesh() const { return !mySubMeshes.empty(); } // if !IsComplexSubmesh() virtual void AddElement(const SMDS_MeshElement * ME); - virtual bool RemoveElement(const SMDS_MeshElement * ME, bool isElemDeleted); // ret true if ME was in + virtual bool RemoveElement(const SMDS_MeshElement * ME); // ret true if ME was in virtual void AddNode(const SMDS_MeshNode * ME); - virtual bool RemoveNode(const SMDS_MeshNode * ME, bool isNodeDeleted); // ret true if ME was in + virtual bool RemoveNode(const SMDS_MeshNode * ME); // ret true if ME was in // if IsComplexSubmesh() void AddSubMesh( const SMESHDS_SubMesh* theSubMesh ); @@ -63,28 +67,33 @@ class SMESHDS_EXPORT SMESHDS_SubMesh // for both types virtual int NbElements() const; - virtual SMDS_ElemIteratorPtr GetElements() const; virtual int NbNodes() const; + virtual SMDS_ElemIteratorPtr GetElements() const; virtual SMDS_NodeIteratorPtr GetNodes() const; virtual bool Contains(const SMDS_MeshElement * ME) const; // check if elem or node is in + virtual bool IsQuadratic() const; // clear the contents virtual void Clear(); - int getSize(); - void compactList(); - SMESHDS_Mesh *GetParent() { return myParent; } - int GetID() const { return myIndex; } + SMESHDS_Mesh* GetParent() const { return const_cast< SMESHDS_Mesh*>( myParent ); } + int GetID() const { return myIndex; } + + protected: // methods of SMDS_ElementHolder + + virtual SMDS_ElemIteratorPtr getElements(); + virtual void tmpClear(); + virtual void add( const SMDS_MeshElement* element ); + virtual void compact() {} private: - SMESHDS_Mesh * myParent; - std::vector myElements; - std::vector myNodes; - int myUnusedIdNodes; - int myUnusedIdElements; - int myIndex; + int myIndex; + int myNbElements; + int myNbNodes; + const SMDS_MeshElement* my1stElemNode[2]; // elem and node with least ID, to optimize iteration + const SMESHDS_Mesh * myParent; + TSubMeshSet mySubMeshes; - std::set mySubMeshes; }; #endif