-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021 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
#include "utilities.h"
-using namespace SMESH;
-
//=============================================================================
/*!
*
SMESH_GroupBase_i::~SMESH_GroupBase_i()
{
- if ( myPreMeshInfo ) delete myPreMeshInfo; myPreMeshInfo = NULL;
+ if ( myPreMeshInfo ) delete myPreMeshInfo;
+ myPreMeshInfo = NULL;
}
//=======================================================================
aGen->SetName( anSO, theName );
// Update Python script
- TPythonDump() << anSO << ".SetName( '" << theName << "' )";
+ SMESH::TPythonDump() << anSO << ".SetName( '" << theName << "' )";
}
}
{
::SMESH_Group* aGroup = GetSmeshGroup();
if (aGroup)
- return CORBA::string_dup (aGroup->GetName());
+ return CORBA::string_dup( aGroup->GetName() );
return CORBA::string_dup( "NO_NAME" );
}
//=============================================================================
/*!
- *
+ *
*/
//=============================================================================
*/
//=============================================================================
-CORBA::Long SMESH_GroupBase_i::Size()
+SMESH::smIdType SMESH_GroupBase_i::Size()
{
if ( myPreMeshInfo )
return GetType() == SMESH::NODE ? myPreMeshInfo->NbNodes() : myPreMeshInfo->NbElements();
//=============================================================================
/*
- * Returns \c true if \c this group depends on the \a other via
+ * Return \c true if \c this group depends on the \a other via
* FT_BelongToMeshGroup predicate or vice versa
*/
//=============================================================================
myPreMeshInfo->FullLoadFromFile();
// Update Python script
- TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()";
+ SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()";
// Clear the group
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
*/
//=============================================================================
-CORBA::Boolean SMESH_GroupBase_i::Contains( CORBA::Long theID )
+CORBA::Boolean SMESH_GroupBase_i::Contains( SMESH::smIdType theID )
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
*/
//=============================================================================
-CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs )
+SMESH::smIdType SMESH_Group_i::Add( const SMESH::smIdType_array& theIDs )
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
// Update Python script
- TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )";
+ SMESH::TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )";
// Add elements to the group
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
*/
//=============================================================================
-CORBA::Long SMESH_Group_i::Remove( const SMESH::long_array& theIDs )
+SMESH::smIdType SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs )
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
// Update Python script
- TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this())
+ SMESH::TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this())
<< ".Remove( " << theIDs << " )";
// Remove elements from the group
*/
//=============================================================================
-typedef bool (SMESHDS_Group::*TFunChangeGroup)(const int);
+typedef bool (SMESHDS_Group::*TFunChangeGroup)(const smIdType);
CORBA::Long
-ChangeByPredicate( SMESH::Predicate_i* thePredicate,
- SMESHDS_GroupBase* theGroupBase,
- NotifyerAndWaiter* theGroupImpl,
- TFunChangeGroup theFun)
+ChangeByPredicate( SMESH::Predicate_i* thePredicate,
+ SMESHDS_GroupBase* theGroupBase,
+ SMESH::NotifyerAndWaiter* theGroupImpl,
+ TFunChangeGroup theFun)
{
CORBA::Long aNb = 0;
if(SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>(theGroupBase)){
return aNb;
}
-CORBA::Long
+SMESH::smIdType
SMESH_Group_i::
AddByPredicate( SMESH::Predicate_ptr thePredicate )
{
myPreMeshInfo->FullLoadFromFile();
if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){
- TPythonDump() << SMESH::SMESH_Group_var(_this())
- << ".AddByPredicate( " << aPredicate << " )";
+ SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this())
+ << ".AddByPredicate( " << aPredicate << " )";
return ChangeByPredicate( aPredicate, GetGroupDS(), this, &SMESHDS_Group::Add );
}
return 0;
}
-CORBA::Long
+SMESH::smIdType
SMESH_Group_i::
RemoveByPredicate( SMESH::Predicate_ptr thePredicate )
{
myPreMeshInfo->FullLoadFromFile();
if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){
- TPythonDump() << SMESH::SMESH_Group_var(_this())
- << ".RemoveByPredicate( " << aPredicate << " )";
+ SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this())
+ << ".RemoveByPredicate( " << aPredicate << " )";
return ChangeByPredicate(aPredicate,GetGroupDS(),this, &SMESHDS_Group::Remove);
}
return 0;
}
-CORBA::Long SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource )
+SMESH::smIdType SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource )
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
- TPythonDump pd;
+ SMESH::TPythonDump pd;
long prevNb = Size();
SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
if (aGroupDS) {
*/
//=============================================================================
-CORBA::Long SMESH_GroupBase_i::GetID( CORBA::Long theIndex )
+SMESH::smIdType SMESH_GroupBase_i::GetID( SMESH::smIdType theIndex )
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
*/
//=============================================================================
-SMESH::long_array* SMESH_GroupBase_i::GetListOfID()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetListOfID()
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
- SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
SMESHDS_GroupBase* aGroupDS = GetGroupDS();
if (aGroupDS)
{
- int aSize = aGroupDS->Extent();
+ smIdType aSize = aGroupDS->Extent();
aRes->length(aSize);
SMDS_ElemIteratorPtr it = aGroupDS->GetElements();
- for (int i = 0; it->more(); i++)
+ for (::smIdType i = 0; it->more(); i++)
aRes[i] = it->next()->GetID();
if ( 0 < aSize && aSize < 100 ) // for comfortable testing ;)
*/
//================================================================================
-CORBA::Long SMESH_GroupBase_i::GetNumberOfNodes()
+SMESH::smIdType SMESH_GroupBase_i::GetNumberOfNodes()
{
if ( GetType() == SMESH::NODE )
return Size();
*/
//================================================================================
-SMESH::long_array* SMESH_GroupBase_i::GetNodeIDs()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetNodeIDs()
{
if ( GetType() == SMESH::NODE )
return GetListOfID();
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
- SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
if ( SMESHDS_GroupBase* g = GetGroupDS())
{
std::set<const SMDS_MeshNode* > nodes;
if ( oldColor != aQColor )
{
aGroupDS->SetColor(aQColor);
- TPythonDump()<< SMESH::SMESH_GroupBase_var(_this())
- << ".SetColor( SALOMEDS.Color( "
- <<color.R<<", "<<color.G<<", "<<color.B<<" ))";
+ SMESH::TPythonDump()<< SMESH::SMESH_GroupBase_var(_this())
+ << ".SetColor( SALOMEDS.Color( "
+ <<color.R<<", "<<color.G<<", "<<color.B<<" ))";
}
}
}
*
*/
//=============================================================================
-CORBA::Long SMESH_GroupBase_i::GetColorNumber()
+CORBA::Long SMESH_GroupBase_i::GetColorNumber()
{
SMESHDS_GroupBase* aGroupDS = GetGroupDS();
if (aGroupDS)
if (aGroupDS)
{
aGroupDS->SetColorGroup(color);
- TPythonDump()<<SMESH::SMESH_GroupBase_var(_this())<<".SetColorNumber( "<<color<<" )";
+ SMESH::TPythonDump()<<SMESH::SMESH_GroupBase_var(_this())<<".SetColorNumber( "<<color<<" )";
}
return ;
}
//=============================================================================
/*
- * Returns number of mesh elements of each \a SMESH::EntityType
+ * Return number of mesh elements of each \a SMESH::EntityType
* Result array of number of elements per \a SMESH::EntityType
* Inherited from SMESH_IDSource
*/
//=============================================================================
-SMESH::long_array* SMESH_GroupBase_i::GetMeshInfo()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetMeshInfo()
{
if ( myPreMeshInfo )
return myPreMeshInfo->GetMeshInfo();
- SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
aRes->length(SMESH::Entity_Last);
for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
aRes[i] = 0;
//=============================================================================
/*
- * Returns number of mesh elements of each \a ElementType
+ * Return number of mesh elements of each \a ElementType
*/
//=============================================================================
-SMESH::long_array* SMESH_GroupBase_i::GetNbElementsByType()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetNbElementsByType()
{
- SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
aRes->length(SMESH::NB_ELEMENT_TYPES);
for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
aRes[ i ] = 0;
//=======================================================================
//function : GetIDs
-//purpose : Returns ids of members
+//purpose : Return ids of members
//=======================================================================
-SMESH::long_array* SMESH_GroupBase_i::GetIDs()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetIDs()
{
return GetListOfID();
}
//=======================================================================
//function : GetTypes
-//purpose : Returns types of elements it contains
+//purpose : Return types of elements it contains
//=======================================================================
SMESH::array_of_ElementType* SMESH_GroupBase_i::GetTypes()
//=======================================================================
//function : IsMeshInfoCorrect
-//purpose : * Returns false if GetMeshInfo() returns incorrect information that may
+//purpose : * Return false if GetMeshInfo() returns incorrect information that may
// * happen if mesh data is not yet fully loaded from the file of study.
//=======================================================================
//================================================================================
void SMESH_GroupOnFilter_i::SetFilter(SMESH::Filter_ptr theFilter)
- throw (SALOME::SALOME_Exception)
{
if ( myFilter->_is_equivalent( theFilter ))
return;
GetMeshServant()->GetGen()->HighLightInvalid( me, false );
- TPythonDump()<< me <<".SetFilter( "<< theFilter <<" )";
+ SMESH::TPythonDump()<< me <<".SetFilter( "<< theFilter <<" )";
}
//================================================================================
/*!
- * \brief Returns the filter defining group contents
+ * \brief Return the filter defining group contents
*/
//================================================================================
SMESH::Filter_ptr SMESH_GroupOnFilter_i::GetFilter()
{
SMESH::Filter_var f = myFilter;
- TPythonDump() << f << " = " << SMESH::SMESH_GroupOnFilter_var(_this()) << ".GetFilter()";
+ SMESH::TPythonDump() << f << " = " << SMESH::SMESH_GroupOnFilter_var(_this()) << ".GetFilter()";
return f._retn();
}
+//================================================================================
+/*!
+ * @return true if group contents is computed
+ */
+//================================================================================
+
+CORBA::Boolean SMESH_GroupOnFilter_i::IsUpToDate()
+{
+ if ( myPreMeshInfo )
+ return false;
+
+ if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
+ return grDS->IsUpToDate();
+
+ return false;
+}
+
+//=======================================================================
+//function : IsMeshInfoCorrect
+//purpose : Return false in two cases: 1) if mesh not loaded and GetMeshInfo() returns
+// incorrect information 2) mesh loaded but group contents is not computed
+//=======================================================================
+
+bool SMESH_GroupOnFilter_i::IsMeshInfoCorrect()
+{
+ return myPreMeshInfo ? myPreMeshInfo->IsMeshInfoCorrect() : IsUpToDate();
+}
+
//=======================================================================
//function : GetIDs
-//purpose : Returns ids of members
+//purpose : Return ids of members
//=======================================================================
-SMESH::long_array* SMESH_GroupOnFilter_i::GetListOfID()
+SMESH::smIdType_array* SMESH_GroupOnFilter_i::GetListOfID()
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
- SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
SMESHDS_GroupBase* aGroupDS = GetGroupDS();
if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
{
//=============================================================================
/*!
- * Returns statistic of mesh elements
+ * Return statistic of mesh elements
* Result array of number enityties
* Inherited from SMESH_IDSource
*/
//=============================================================================
-SMESH::long_array* SMESH_GroupOnFilter_i::GetMeshInfo()
+SMESH::smIdType_array* SMESH_GroupOnFilter_i::GetMeshInfo()
{
if ( myPreMeshInfo )
return myPreMeshInfo->GetMeshInfo();
- SMESH::long_array_var aRes = new SMESH::long_array();
+ SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
aRes->length(SMESH::Entity_Last);
for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
aRes[i] = 0;
if ( g->GetType() != SMDSAbs_Node )
{
- std::vector< int > nbElems = static_cast< SMESHDS_GroupOnFilter* >( g )->GetMeshInfo();
+ std::vector< smIdType > nbElems = static_cast< SMESHDS_GroupOnFilter* >( g )->GetMeshInfo();
for ( size_t i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
if ( i < nbElems.size() )
aRes[i] = nbElems[ i ];
}
// create a filter
- TPythonDump pd;
+ SMESH::TPythonDump pd;
SMESH::FilterManager_i* aFilterMgr = new SMESH::FilterManager_i();
filter = aFilterMgr->CreateFilter();
filter->SetCriteria( criteria.inout() );
*/
//================================================================================
-void SMESH_GroupOnFilter_i::OnBaseObjModified(NotifyerAndWaiter* filter, bool /*removed*/)
+void SMESH_GroupOnFilter_i::OnBaseObjModified(NotifyerAndWaiter* /*filter*/, bool /*removed*/)
{
if ( myPreMeshInfo )
myPreMeshInfo->FullLoadFromFile();
if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
grDS->SetPredicate( GetPredicate( myFilter )); // group resets its cache
}
+