0021375: EDF 1671 SMESH: Dump study of current state

Fix non-historical treating of hypo methods setting different parameters via one method
    by passing parameter names like e.g. SetOption("size", "0.2") -
    mangle method name by appending a 1st textual arg
This commit is contained in:
eap 2012-02-17 15:59:58 +00:00
parent 4ad6a5b19b
commit d632c0f379

View File

@ -1808,8 +1808,8 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
if( pos != -1) if( pos != -1)
{ {
isPyMeshMethod = true; isPyMeshMethod = true;
bool is0DmethId = ( method == "ExtrusionSweepMakeGroups0D" ), bool is0DmethId = ( method == "ExtrusionSweepMakeGroups0D" );
is0DmethObj =( method == "ExtrusionSweepObject0DMakeGroups"); bool is0DmethObj = ( method == "ExtrusionSweepObject0DMakeGroups");
// 1. Remove "MakeGroups" from the Command // 1. Remove "MakeGroups" from the Command
TCollection_AsciiString aMethod = theCommand->GetMethod(); TCollection_AsciiString aMethod = theCommand->GetMethod();
@ -2288,7 +2288,8 @@ bool _pyHypothesis::Addition2Creation( const Handle(_pyCommand)& theCmd,
void _pyHypothesis::Process( const Handle(_pyCommand)& theCommand) void _pyHypothesis::Process( const Handle(_pyCommand)& theCommand)
{ {
ASSERT( !myIsAlgo ); ASSERT( !myIsAlgo );
rememberCmdOfParameter( theCommand ); if ( !theGen->IsToKeepAllCommands() )
rememberCmdOfParameter( theCommand );
// set args // set args
int nbArgs = 0; int nbArgs = 0;
for ( int i = 1; i <= myArgMethods.Length(); ++i ) { for ( int i = 1; i <= myArgMethods.Length(); ++i ) {
@ -2487,23 +2488,35 @@ bool _pyHypothesis::GetReferredMeshesAndGeom( list< Handle(_pyMesh) >& meshes )
void _pyHypothesis::rememberCmdOfParameter( const Handle(_pyCommand) & theCommand ) void _pyHypothesis::rememberCmdOfParameter( const Handle(_pyCommand) & theCommand )
{ {
// not to clear commands setting different parameters via one method // parameters are discriminated by method name
TCollection_AsciiString method = theCommand->GetMethod();
// discriminate commands setting different parameters via one method
// by passing parameter names like e.g. SetOption("size", "0.2") // by passing parameter names like e.g. SetOption("size", "0.2")
int quotePos = theCommand->GetString().FirstLocationInSet( "'\"", 1, theCommand->Length() ); if ( theCommand->GetString().FirstLocationInSet( "'\"", 1, theCommand->Length() ) &&
if ( !quotePos ) theCommand->GetNbArgs() > 1 )
{ {
// parameters are discriminated by method name // mangle method by appending a 1st textual arg (what if it's a variable name?!!!)
list< Handle(_pyCommand)>& cmds = myMeth2Commands[ theCommand->GetMethod() ]; for ( int iArg = 1; iArg <= theCommand->GetNbArgs(); ++iArg )
if ( !cmds.empty() && !isCmdUsedForCompute( cmds.back() ))
{ {
cmds.back()->Clear(); // previous parameter value has not been used const TCollection_AsciiString& arg = theCommand->GetArg( iArg );
cmds.back() = theCommand; if ( arg.Value(1) != '\"' && arg.Value(1) != '\'' ) continue;
} if ( !isalpha( arg.Value(2))) continue;
else method += arg;
{ break;
cmds.push_back( theCommand );
} }
} }
// parameters are discriminated by method name
list< Handle(_pyCommand)>& cmds = myMeth2Commands[ theCommand->GetMethod() ];
if ( !cmds.empty() && !isCmdUsedForCompute( cmds.back() ))
{
cmds.back()->Clear(); // previous parameter value has not been used
cmds.back() = theCommand;
}
else
{
cmds.push_back( theCommand );
}
} }
//================================================================================ //================================================================================