0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups

fix filter processing
This commit is contained in:
eap 2011-10-24 13:10:19 +00:00
parent bbb7b25fa6
commit 5dda5df854

View File

@ -802,6 +802,18 @@ void _pyGen::AddObject( Handle(_pyObject)& theObj )
myObjects.insert( make_pair( theObj->GetID(), theObj )); myObjects.insert( make_pair( theObj->GetID(), theObj ));
} }
//================================================================================
/*!
* \brief Finds a _pyObject by ID
*/
//================================================================================
Handle(_pyObject) _pyGen::FindObject( const _pyID& theObjID ) const
{
std::map< _pyID, Handle(_pyObject) >::const_iterator id_obj = myObjects.find( theObjID );
return ( id_obj == myObjects.end() ) ? Handle(_pyObject)() : id_obj->second;
}
//================================================================================ //================================================================================
/*! /*!
* \brief Find out type of geom group * \brief Find out type of geom group
@ -970,6 +982,15 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
theCommand->SetMethod( "GroupOnFilter" ); theCommand->SetMethod( "GroupOnFilter" );
} }
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
else if ( method == "GetIdsFromFilter" )
{
// GetIdsFromFilter( aFilter0x4743dc0) -> GetIdsFromFilter( aFilter_1)
_pyID filterID = theCommand->GetArg(1);
Handle(_pyObject) filter = theGen->FindObject( filterID );
if ( !filter.IsNull() && filter->IsKind(STANDARD_TYPE(_pyFilter)))
filter->Process( theCommand );
}
// ----------------------------------------------------------------------
else if ( method == "CreateGroup" ) // CreateGroup() --> CreateEmptyGroup() else if ( method == "CreateGroup" ) // CreateGroup() --> CreateEmptyGroup()
{ {
theCommand->SetMethod( "CreateEmptyGroup" ); theCommand->SetMethod( "CreateEmptyGroup" );
@ -2706,6 +2727,7 @@ void _pySubMesh::Flush()
// move to be just after creator // move to be just after creator
myCreator->GetCreationCmd()->AddDependantCmd( GetCreationCmd() ); myCreator->GetCreationCmd()->AddDependantCmd( GetCreationCmd() );
} }
//================================================================================ //================================================================================
/*! /*!
* \brief To convert creation of a group by filter * \brief To convert creation of a group by filter
@ -2721,31 +2743,25 @@ void _pyGroup::Process( const Handle(_pyCommand)& theCommand)
if ( theCommand->GetMethod() == "AddFrom" ) if ( theCommand->GetMethod() == "AddFrom" )
{ {
_pyID idSource = theCommand->GetArg(1); _pyID idSource = theCommand->GetArg(1);
// check if idSource is a filter: find a command creating idSource, // check if idSource is a filter
// it should be "idSource = aFilterManager.CreateFilter()" or Handle(_pyObject) filter = theGen->FindObject( idSource );
// "idSource = smesh.GetFilterFromCriteria(aCriteria) if ( filter.IsNull() || !filter->IsKind(STANDARD_TYPE(_pyFilter)))
const list< Handle(_pyCommand) >& commands = theGen->GetCommands(); return;
list< Handle(_pyCommand) >::const_reverse_iterator cmdIt = commands.rbegin();
bool isFilter = false;
for ( ; cmdIt != commands.rend(); ++cmdIt )
if ( (*cmdIt)->GetResultValue() == idSource )
{
isFilter = ( (*cmdIt)->GetMethod() == "CreateFilter" ||
(*cmdIt)->GetMethod() == "GetFilterFromCriteria" );
break;
}
if ( !isFilter ) return;
// find aFilter.SetMesh(mesh) to clear it, it should be just before theCommand // find aFilter.SetMesh(mesh) to clear it, it should be just before theCommand
for ( cmdIt = commands.rbegin(); cmdIt != commands.rend(); ++cmdIt ) list< Handle(_pyCommand) >::reverse_iterator cmdIt = theGen->GetCommands().rbegin();
if ( *cmdIt == theCommand && (*cmdIt)->GetOrderNb() != 1 ) while ( *cmdIt != theCommand ) ++cmdIt;
while ( (*cmdIt)->GetOrderNb() != 1 )
{ {
const Handle(_pyCommand)& setMeshCmd = *(++cmdIt); const Handle(_pyCommand)& setMeshCmd = *(++cmdIt);
if ( setMeshCmd->GetObject() == idSource && if ((setMeshCmd->GetObject() == idSource ||
setMeshCmd->GetObject() == Handle(_pyFilter)::DownCast(filter)->GetNewID() )
&&
setMeshCmd->GetMethod() == "SetMesh") setMeshCmd->GetMethod() == "SetMesh")
{
setMeshCmd->Clear(); setMeshCmd->Clear();
break; break;
} }
}
// replace 3 commands by one // replace 3 commands by one
theCommand->Clear(); theCommand->Clear();
const Handle(_pyCommand)& makeGroupCmd = GetCreationCmd(); const Handle(_pyCommand)& makeGroupCmd = GetCreationCmd();
@ -2753,6 +2769,8 @@ void _pyGroup::Process( const Handle(_pyCommand)& theCommand)
makeGroupCmd->SetMethod( "MakeGroupByFilter" ); makeGroupCmd->SetMethod( "MakeGroupByFilter" );
makeGroupCmd->SetArg( 1, name ); makeGroupCmd->SetArg( 1, name );
makeGroupCmd->SetArg( 2, idSource ); makeGroupCmd->SetArg( 2, idSource );
// set new name of a filter
filter->Process( makeGroupCmd );
} }
} }
@ -2769,14 +2787,30 @@ _pyFilter::_pyFilter(const Handle(_pyCommand)& theCreationCmd, const _pyID& newI
//================================================================================ //================================================================================
/*! /*!
* \brief To convert creation of a filter by criteria * \brief To convert creation of a filter by criteria and
* to replace an old name by a new one
*/ */
//================================================================================ //================================================================================
void _pyFilter::Process( const Handle(_pyCommand)& theCommand) void _pyFilter::Process( const Handle(_pyCommand)& theCommand)
{ {
if ( theCommand->GetObject() == GetID() )
_pyObject::Process(theCommand); // count commands
if ( !myNewID.IsEmpty() ) if ( !myNewID.IsEmpty() )
{
if ( theCommand->GetObject() == GetID() )
theCommand->SetObject( myNewID ); theCommand->SetObject( myNewID );
else if ( theCommand->GetResultValue() == GetID() )
theCommand->SetResultValue( myNewID );
else
for ( int i = 1, nb = theCommand->GetNbArgs(); i <= nb; ++i )
if ( theCommand->GetArg( i ) == GetID() )
{
theCommand->SetArg( i, myNewID );
break;
}
}
// Convert the following set of commands into smesh.GetFilterFromCriteria(criteria) // Convert the following set of commands into smesh.GetFilterFromCriteria(criteria)
// aFilter0x2aaab0487080 = aFilterManager.CreateFilter() // aFilter0x2aaab0487080 = aFilterManager.CreateFilter()
@ -2810,6 +2844,6 @@ void _pyFilter::Process( const Handle(_pyCommand)& theCommand)
void _pyFilter::Flush() void _pyFilter::Flush()
{ {
if ( !myNewID.IsEmpty() && GetCreationCmd()->IsEmpty() ) if ( !myNewID.IsEmpty() && !GetCreationCmd()->IsEmpty() )
GetCreationCmd()->SetResultValue( myNewID ); GetCreationCmd()->SetResultValue( myNewID );
} }