Version: 9.16.0
SMESHDS_SubMesh.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5//
6// This library is free software; you can redistribute it and/or
7// modify it under the terms of the GNU Lesser General Public
8// License as published by the Free Software Foundation; either
9// version 2.1 of the License, or (at your option) any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14// Lesser General Public License for more details.
15//
16// You should have received a copy of the GNU Lesser General Public
17// License along with this library; if not, write to the Free Software
18// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19//
20// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21//
22
23// SMESH SMESHDS : management of mesh data and SMESH document
24// File : SMESHDS_SubMesh.hxx
25// Module : SMESH
26//
27#ifndef _SMESHDS_SubMesh_HeaderFile
28#define _SMESHDS_SubMesh_HeaderFile
29
30#include "SMESH_SMESHDS.hxx"
31
33#include "SMDS_Mesh.hxx"
34#include <smIdType.hxx>
35#include <vector>
36
37#include <boost/container/flat_set.hpp>
38class SMESHDS_SubMesh;
40
41class SMESHDS_SubMesh;
43typedef boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr;
44
45class SMESHDS_Mesh;
46
48{
49 public:
50 SMESHDS_SubMesh(const SMESHDS_Mesh *parent, int index);
51 virtual ~SMESHDS_SubMesh();
52
53 virtual bool IsComplexSubmesh() const { return !mySubMeshes.empty(); }
54
55 // if !IsComplexSubmesh()
56 virtual void AddElement(const SMDS_MeshElement * ME);
57 virtual bool RemoveElement(const SMDS_MeshElement * ME); // ret true if ME was in
58 virtual void AddNode(const SMDS_MeshNode * ME);
59 virtual bool RemoveNode(const SMDS_MeshNode * ME); // ret true if ME was in
60
61 // if IsComplexSubmesh()
62 void AddSubMesh( const SMESHDS_SubMesh* theSubMesh );
63 bool RemoveSubMesh( const SMESHDS_SubMesh* theSubMesh );
64 void RemoveAllSubmeshes();
65 bool ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const;
66 size_t NbSubMeshes() const { return mySubMeshes.size(); }
67 SMESHDS_SubMeshIteratorPtr GetSubMeshIterator() const;
68
69 // for both types
70 virtual smIdType NbElements() const;
71 virtual smIdType NbNodes() const;
72 virtual SMDS_ElemIteratorPtr GetElements() const;
73 virtual SMDS_NodeIteratorPtr GetNodes() const;
74 virtual bool Contains(const SMDS_MeshElement * ME) const; // check if elem or node is in
75 virtual bool IsQuadratic() const;
76
77 // clear the contents
78 virtual void Clear();
79
80 SMESHDS_Mesh* GetParent() const { return const_cast< SMESHDS_Mesh*>( myParent ); }
81 int GetID() const { return myIndex; }
82
83 protected: // methods of SMDS_ElementHolder
84
86 virtual void tmpClear();
87 virtual void add( const SMDS_MeshElement* element );
88 virtual void compact() {}
89 // Commented out to avoid SMESH_netgen_runner_1D2D3D test failure
90 // virtual void clear() override { Clear(); }
91
92 private:
93
95 smIdType myNbElements;
96 smIdType myNbNodes;
97 const SMDS_MeshElement* my1stElemNode[2]; // elem and node with least ID, to optimize iteration
100
101};
102#endif
boost::shared_ptr< SMDS_Iterator< const SMDS_MeshElement * > > SMDS_ElemIteratorPtr
Definition: SMDS_ElemIterator.hxx:43
boost::shared_ptr< SMDS_Iterator< const SMDS_MeshNode * > > SMDS_NodeIteratorPtr
Definition: SMDS_ElemIterator.hxx:46
boost::container::flat_set< const SMESHDS_SubMesh * > TSubMeshSet
Definition: SMESHDS_SubMesh.hxx:39
boost::shared_ptr< SMESHDS_SubMeshIterator > SMESHDS_SubMeshIteratorPtr
Definition: SMESHDS_SubMesh.hxx:43
SMDS_Iterator< const SMESHDS_SubMesh * > SMESHDS_SubMeshIterator
Definition: SMESHDS_SubMesh.hxx:42
#define SMESHDS_EXPORT
Definition: SMESH_SMESHDS.hxx:37
Base class of object holding SMDS_MeshElement pointers.
Definition: SMDS_ElementHolder.hxx:48
virtual void add(const SMDS_MeshElement *element)=0
the descendant squeeze its element storage after re-adding elements
virtual SMDS_ElemIteratorPtr getElements()=0
< the descendant object return its elements just before the mesh compacting
virtual void tmpClear()=0
the descendant object re-add its elements after the mesh compacting
Abstract class for iterators.
Definition: SMDS_Iterator.hxx:33
Base class for elements.
Definition: SMDS_MeshElement.hxx:56
Definition: SMDS_MeshNode.hxx:36
Definition: SMESHDS_Mesh.hxx:98
Definition: SMESHDS_SubMesh.hxx:48
const SMESHDS_Mesh * myParent
Definition: SMESHDS_SubMesh.hxx:98
smIdType myNbNodes
Definition: SMESHDS_SubMesh.hxx:96
TSubMeshSet mySubMeshes
Definition: SMESHDS_SubMesh.hxx:99
int myIndex
Definition: SMESHDS_SubMesh.hxx:94
virtual void compact()
allow the descendant treat its elements before mesh clearing
Definition: SMESHDS_SubMesh.hxx:88
int GetID() const
Definition: SMESHDS_SubMesh.hxx:81
smIdType myNbElements
Definition: SMESHDS_SubMesh.hxx:95
SMESHDS_Mesh * GetParent() const
Definition: SMESHDS_SubMesh.hxx:80
virtual bool IsComplexSubmesh() const
Definition: SMESHDS_SubMesh.hxx:53
size_t NbSubMeshes() const
Definition: SMESHDS_SubMesh.hxx:66
long AddNode(SMESH::SMESH_Mesh_ptr theMesh, float x, float y, float z, const QStringList &theParameters)
Definition: SMESHGUI_NodesDlg.cxx:96