From f5efe8066bf950115dc8e92201c0d4e35b7040b2 Mon Sep 17 00:00:00 2001 From: eap Date: Wed, 7 Mar 2012 14:52:53 +0000 Subject: [PATCH] 0021308: Remove hard-coded dependency of the external mesh plugins from the SMESH module Store names of variables set via UpdateParameters() in myLastParameters field - void UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters); + void UpdateParameters(/*CORBA::Object_ptr theObject,*/ const char* theParameters); + const std::vector< std::string >& GetLastParameters() const { return myLastParameters; } + std::vector< std::string > myLastParameters; --- src/SMESH_I/SMESH_Gen_i.hxx | 5 +- src/SMESH_I/SMESH_Gen_i_1.cxx | 151 ++++++++++++++++++++-------------- 2 files changed, 92 insertions(+), 64 deletions(-) diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 857a9270a..bd0a5ec90 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -556,10 +556,10 @@ public: */ SALOMEDS::SObject_ptr GetAlgoSO(const ::SMESH_Algo* algo); - void UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters); + void UpdateParameters(/*CORBA::Object_ptr theObject,*/ const char* theParameters); char* GetParameters(CORBA::Object_ptr theObject); char* ParseParameters(const char* theParameters); - + const std::vector< std::string >& GetLastParameters() const { return myLastParameters; } private: // Create hypothesis of given type @@ -602,6 +602,7 @@ private: // Dump Python: trace of API methods calls std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts; bool myIsHistoricalPythonDump; + std::vector< std::string > myLastParameters; }; diff --git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx index 900534d11..cb6df20e4 100644 --- a/src/SMESH_I/SMESH_Gen_i_1.cxx +++ b/src/SMESH_I/SMESH_Gen_i_1.cxx @@ -23,7 +23,6 @@ // Created : Thu Oct 21 17:24:06 2004 // Author : Edward AGAPOV (eap) // Module : SMESH -// $Header : $ #include "SMESH_Gen_i.hxx" @@ -42,10 +41,10 @@ #ifdef _DEBUG_ static int MYDEBUG = 0; -static int VARIABLE_DEBUG = 0; +//static int VARIABLE_DEBUG = 0; #else static int MYDEBUG = 0; -static int VARIABLE_DEBUG = 0; +//static int VARIABLE_DEBUG = 0; #endif //============================================================================= @@ -910,76 +909,104 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr theStudy //function : UpdateParameters //purpose : //======================================================================= -void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters) +void SMESH_Gen_i::UpdateParameters(/*CORBA::Object_ptr theObject,*/ const char* theParameters) { - - if(VARIABLE_DEBUG) - cout<<"UpdateParameters : "<_is_nil() || CORBA::is_nil(theObject)) + if ( aStudy->_is_nil() ) return; - - SALOMEDS::SObject_var aSObj = ObjectToSObject(aStudy,theObject); - if(aSObj->_is_nil()) - return; - - SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); - - SALOMEDS::GenericAttribute_var aFindAttr; - bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString"); - if(VARIABLE_DEBUG) - cout<<"Find Attribute "<FindOrCreateAttribute( aSObj, "AttributeString"); - SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr); - - CORBA::String_var oldparVar = aStringAttr->Value(); - CORBA::String_var inpparVar = ParseParameters(theParameters); - TCollection_AsciiString aNewParams; - TCollection_AsciiString aOldParameters(oldparVar.inout()); - TCollection_AsciiString anInputParams(inpparVar.inout()); - if(!hasAttr) - aNewParams = anInputParams; - else + myLastParameters.clear(); + int pos = 0, prevPos = 0, len = strlen( theParameters ); + //if ( len == 0 ) return; + while ( pos <= len ) + { + if ( pos == len || theParameters[pos] == ':' ) { - int pos = aOldParameters.SearchFromEnd("|"); - if(pos==-1) pos = 0; - TCollection_AsciiString previousParamFull(aOldParameters.Split(pos)); - TCollection_AsciiString previousParam(previousParamFull); - TCollection_AsciiString theRepet("1"); - pos = previousParam.SearchFromEnd(";*="); - if(pos >= 0) - { - theRepet = previousParam.Split(pos+2); - pos = pos-1; - if(pos==-1) pos = 0; - previousParam.Split(pos); - } - if(previousParam == anInputParams) - { - theRepet = theRepet.IntegerValue()+1; - aNewParams = aOldParameters + previousParam + ";*=" + theRepet; - } + if ( prevPos < pos ) + { + string val(theParameters + prevPos, theParameters + pos ); + if ( !aStudy->IsVariable( val.c_str() )) + val.clear(); + myLastParameters.push_back( val ); + } else - { - aNewParams = aOldParameters + previousParamFull + "|" + anInputParams; - } + { + myLastParameters.push_back(""); + } + prevPos = pos+1; } - - if(VARIABLE_DEBUG) - { - cout<<"Input Parameters : "<SetValue( aNewParams.ToCString() ); + return; + + // OLD VARIANT + + // if(VARIABLE_DEBUG) + // cout<<"UpdateParameters : "<_is_nil() || CORBA::is_nil(theObject)) + // return; + + // SALOMEDS::SObject_var aSObj = ObjectToSObject(aStudy,theObject); + // if(aSObj->_is_nil()) + // return; + + // SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder(); + + // SALOMEDS::GenericAttribute_var aFindAttr; + // bool hasAttr = aSObj->FindAttribute(aFindAttr, "AttributeString"); + // if(VARIABLE_DEBUG) + // cout<<"Find Attribute "<FindOrCreateAttribute( aSObj, "AttributeString"); + // SALOMEDS::AttributeString_var aStringAttr = SALOMEDS::AttributeString::_narrow(anAttr); + + // CORBA::String_var oldparVar = aStringAttr->Value(); + // CORBA::String_var inpparVar = ParseParameters(theParameters); + // TCollection_AsciiString aNewParams; + // TCollection_AsciiString aOldParameters(oldparVar.inout()); + // TCollection_AsciiString anInputParams(inpparVar.inout()); + // if(!hasAttr) + // aNewParams = anInputParams; + // else + // { + // int pos = aOldParameters.SearchFromEnd("|"); + // if(pos==-1) pos = 0; + // TCollection_AsciiString previousParamFull(aOldParameters.Split(pos)); + // TCollection_AsciiString previousParam(previousParamFull); + // TCollection_AsciiString theRepet("1"); + // pos = previousParam.SearchFromEnd(";*="); + // if(pos >= 0) + // { + // theRepet = previousParam.Split(pos+2); + // pos = pos-1; + // if(pos==-1) pos = 0; + // previousParam.Split(pos); + // } + // if(previousParam == anInputParams) + // { + // theRepet = theRepet.IntegerValue()+1; + // aNewParams = aOldParameters + previousParam + ";*=" + theRepet; + // } + // else + // { + // aNewParams = aOldParameters + previousParamFull + "|" + anInputParams; + // } + // } + + // if(VARIABLE_DEBUG) + // { + // cout<<"Input Parameters : "<SetValue( aNewParams.ToCString() ); } //======================================================================= //function : ParseParameters -//purpose : +//purpose : Replace variables by their values //======================================================================= char* SMESH_Gen_i::ParseParameters(const char* theParameters) { -- 2.39.2