mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-11-15 18:18:34 +05:00
0021014: EDF 1583 SMESH: Improvement of the Python Dump for the creation of groups
fix filter processing
This commit is contained in:
parent
bbb7b25fa6
commit
5dda5df854
@ -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 );
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user