mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-15 10:08:34 +05:00
0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups
+ SMESHDS_GroupOnFilter.cxx
This commit is contained in:
parent
ac5729075f
commit
ec36250a0d
165
src/SMESHDS/SMESHDS_GroupOnFilter.cxx
Normal file
165
src/SMESHDS/SMESHDS_GroupOnFilter.cxx
Normal file
@ -0,0 +1,165 @@
|
||||
// Copyright (C) 2007-2011 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
|
||||
//
|
||||
// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// File : SMESHDS_GroupOnFilter.cxx
|
||||
// Module : SMESH
|
||||
//
|
||||
#include "SMESHDS_GroupOnFilter.hxx"
|
||||
|
||||
#include "SMESHDS_Mesh.hxx"
|
||||
#include "SMDS_SetIterator.hxx"
|
||||
|
||||
using namespace std;
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* Creates a group based on thePredicate
|
||||
*/
|
||||
//=============================================================================
|
||||
|
||||
SMESHDS_GroupOnFilter::SMESHDS_GroupOnFilter (const int theID,
|
||||
const SMESHDS_Mesh* theMesh,
|
||||
const SMDSAbs_ElementType theType,
|
||||
const SMESH_PredicatePtr& thePredicate)
|
||||
: SMESHDS_GroupBase(theID,theMesh,theType), myMeshModifTime(0)
|
||||
{
|
||||
setChanged();
|
||||
SetPredicate( thePredicate );
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Sets a new predicate
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESHDS_GroupOnFilter::SetPredicate( const SMESH_PredicatePtr& thePredicate)
|
||||
{
|
||||
myPredicate = thePredicate;
|
||||
setChanged();
|
||||
if ( myPredicate )
|
||||
myPredicate->SetMesh( GetMesh() );
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Returns nb of elements
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
int SMESHDS_GroupOnFilter::Extent()
|
||||
{
|
||||
update();
|
||||
return myElements.size();
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Checks if the element belongs to the group
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
bool SMESHDS_GroupOnFilter::Contains (const int theID)
|
||||
{
|
||||
return myPredicate ? myPredicate->IsSatisfy( theID ) : false;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Checks if the element belongs to the group
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
bool SMESHDS_GroupOnFilter::Contains (const SMDS_MeshElement* elem)
|
||||
{
|
||||
return myPredicate ? myPredicate->IsSatisfy( elem->GetID() ) : false;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Return iterator on all elements
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
SMDS_ElemIteratorPtr SMESHDS_GroupOnFilter::GetElements() const
|
||||
{
|
||||
update();
|
||||
return SMDS_ElemIteratorPtr
|
||||
( new SMDS_ElementVectorIterator( myElements.begin(), myElements.end() ));
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief return ID of theIndex-th element
|
||||
* \param theIndex - index countered from 1
|
||||
* \retval int - element ID
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
int SMESHDS_GroupOnFilter::GetID (const int theIndex)
|
||||
{
|
||||
update();
|
||||
if ( theIndex < 1 || theIndex > myElements.size() )
|
||||
return -1;
|
||||
return myElements[ theIndex-1 ]->GetID();
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Updates myElements if necessary
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESHDS_GroupOnFilter::update() const
|
||||
{
|
||||
if ( myMeshModifTime < GetMesh()->GetMTime() )
|
||||
{
|
||||
SMESHDS_GroupOnFilter* me = const_cast<SMESHDS_GroupOnFilter*>( this );
|
||||
me->myElements.clear();
|
||||
if ( myPredicate )
|
||||
{
|
||||
me->myElements.reserve( GetMesh()->GetMeshInfo().NbElements(GetType()));
|
||||
SMDS_ElemIteratorPtr elIt = GetMesh()->elementsIterator(GetType());
|
||||
while ( elIt->more() )
|
||||
{
|
||||
const SMDS_MeshElement* e = elIt->next();
|
||||
if ( myPredicate->IsSatisfy( e->GetID() ))
|
||||
me->myElements.push_back( e );
|
||||
}
|
||||
me->myElements.resize( myElements.size() );
|
||||
}
|
||||
me->setChanged( false );
|
||||
}
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
/*!
|
||||
* \brief Sets myMeshModifTime according to modification state
|
||||
*/
|
||||
//================================================================================
|
||||
|
||||
void SMESHDS_GroupOnFilter::setChanged(bool changed)
|
||||
{
|
||||
myMeshModifTime = GetMesh()->GetMTime();
|
||||
if ( changed && myMeshModifTime != 0 )
|
||||
--myMeshModifTime;
|
||||
}
|
69
src/SMESHDS/SMESHDS_GroupOnFilter.hxx
Normal file
69
src/SMESHDS/SMESHDS_GroupOnFilter.hxx
Normal file
@ -0,0 +1,69 @@
|
||||
// Copyright (C) 2007-2011 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
|
||||
//
|
||||
// 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.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
// File : SMESHDS_GroupOnFilter.hxx
|
||||
// Module : SMESH
|
||||
//
|
||||
#ifndef _SMESHDS_GroupOnFilter_HeaderFile
|
||||
#define _SMESHDS_GroupOnFilter_HeaderFile
|
||||
|
||||
#include "SMESH_SMESHDS.hxx"
|
||||
|
||||
#include "SMESHDS_GroupBase.hxx"
|
||||
#include "SMESH_Controls.hxx"
|
||||
|
||||
/*!
|
||||
* \brief Groups whose contents is dynamically updated using the filter
|
||||
*/
|
||||
class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase
|
||||
{
|
||||
public:
|
||||
|
||||
SMESHDS_GroupOnFilter (const int theID,
|
||||
const SMESHDS_Mesh* theMesh,
|
||||
const SMDSAbs_ElementType theType,
|
||||
const SMESH_PredicatePtr& thePredicate);
|
||||
|
||||
void SetPredicate( const SMESH_PredicatePtr& thePredicate);
|
||||
|
||||
SMESH_PredicatePtr GetPredicate() const { return myPredicate; }
|
||||
|
||||
virtual int Extent();
|
||||
|
||||
virtual bool Contains (const int theID);
|
||||
|
||||
virtual bool Contains (const SMDS_MeshElement* elem);
|
||||
|
||||
virtual SMDS_ElemIteratorPtr GetElements() const;
|
||||
|
||||
virtual int GetID (const int theIndex);
|
||||
|
||||
private:
|
||||
|
||||
void update() const;
|
||||
void setChanged(bool changed=true);
|
||||
|
||||
SMESH_PredicatePtr myPredicate;
|
||||
std::vector< const SMDS_MeshElement*> myElements;
|
||||
unsigned long myMeshModifTime; // when myElements was filled
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user