smesh/src/SMDS/SMDS_MeshGroup.cxx

183 lines
5.1 KiB
C++
Raw Normal View History

2003-07-10 15:49:12 +06:00
// SMESH SMDS : implementaion of Salome mesh data structure
//
// Copyright (C) 2003 OPEN CASCADE
//
// 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.
//
// 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.opencascade.org or email : webmaster@opencascade.org
//
//
//
// File : SMDS_MeshGroup.cxx
// Author : Jean-Michel BOULCOURT
// Module : SMESH
2003-05-19 19:49:00 +06:00
2003-07-10 15:49:12 +06:00
using namespace std;
2003-05-19 19:49:00 +06:00
#include "SMDS_MeshGroup.ixx"
#include "SMDS_ListIteratorOfListOfMeshGroup.hxx"
//=======================================================================
//function : SMDS_MeshGroup
//purpose :
//=======================================================================
SMDS_MeshGroup::SMDS_MeshGroup(const Handle(SMDS_Mesh)& aMesh)
:myMesh(aMesh),myType(SMDSAbs_All)
{
}
//=======================================================================
//function : SMDS_MeshGroup
//purpose :
//=======================================================================
SMDS_MeshGroup::SMDS_MeshGroup(const Handle(SMDS_MeshGroup)& parent)
:myMesh(parent->myMesh),myType(SMDSAbs_All),myParent(parent)
{
}
//=======================================================================
//function : AddSubGroup
//purpose :
//=======================================================================
Handle(SMDS_MeshGroup) SMDS_MeshGroup::AddSubGroup()
{
Handle(SMDS_MeshGroup) subgroup = new SMDS_MeshGroup(this);
if (!subgroup.IsNull()) {
myChildren.Append(subgroup);
}
return subgroup;
}
//=======================================================================
//function : RemoveSubGroup
//purpose :
//=======================================================================
Standard_Boolean SMDS_MeshGroup::RemoveSubGroup(const Handle(SMDS_MeshGroup)& aGroup)
{
Standard_Boolean found = Standard_False;
SMDS_ListIteratorOfListOfMeshGroup itgroup(myChildren);
for (;itgroup.More() && !found; itgroup.Next()) {
Handle(SMDS_MeshGroup) subgroup;
subgroup = itgroup.Value();
if (subgroup == aGroup) {
found = Standard_True;
myChildren.Remove(itgroup);
}
}
return found;
}
//=======================================================================
//function : RemoveFromParent
//purpose :
//=======================================================================
Standard_Boolean SMDS_MeshGroup::RemoveFromParent()
{
if (myParent.IsNull())
return Standard_False;
return (myParent->RemoveSubGroup(this));
}
//=======================================================================
//function : Clear
//purpose :
//=======================================================================
void SMDS_MeshGroup::Clear()
{
myElements.Clear();
myType = SMDSAbs_All;
}
//=======================================================================
//function : IsEmpty
//purpose :
//=======================================================================
Standard_Boolean SMDS_MeshGroup::IsEmpty() const
{
return myElements.IsEmpty();
}
//=======================================================================
//function : Extent
//purpose :
//=======================================================================
Standard_Integer SMDS_MeshGroup::Extent() const
{
return myElements.Extent();
}
//=======================================================================
//function : Add
//purpose :
//=======================================================================
void SMDS_MeshGroup::Add(const Handle(SMDS_MeshElement)& ME)
{
// the type of the group is determined by the first element added
if (myElements.IsEmpty()) {
myType = ME->GetType();
}
if (ME->GetType() != myType) {
Standard_TypeMismatch::Raise("SMDS_MeshGroup::Add");
}
myElements.Add(ME);
}
//=======================================================================
//function : Remove
//purpose :
//=======================================================================
void SMDS_MeshGroup::Remove(const Handle(SMDS_MeshElement)& ME)
{
myElements.Remove(ME);
if (myElements.IsEmpty())
myType = SMDSAbs_All;
}
//=======================================================================
//function : Type
//purpose :
//=======================================================================
SMDSAbs_ElementType SMDS_MeshGroup::Type() const
{
return myType;
}
//=======================================================================
//function : Contains
//purpose :
//=======================================================================
Standard_Boolean SMDS_MeshGroup::Contains(const Handle(SMDS_MeshElement)& ME) const
{
return myElements.Contains(ME);
}