Salome HOME
0021308: Remove hard-coded dependency of the external mesh plugins from the SMESH...
authoreap <eap@opencascade.com>
Wed, 7 Mar 2012 14:52:53 +0000 (14:52 +0000)
committereap <eap@opencascade.com>
Wed, 7 Mar 2012 14:52:53 +0000 (14:52 +0000)
  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
src/SMESH_I/SMESH_Gen_i_1.cxx

index 857a9270aa0e04a52cf09b543c2625a71664643d..bd0a5ec9091c2e3433b07622ed1dbf5c13313e64 100644 (file)
@@ -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;
 };
 
 
index 900534d11c705f957bfaa7a9726ccbebdd4d42e2..cb6df20e4e8ce50dff090026fee16c512c6a1e15 100644 (file)
@@ -23,7 +23,6 @@
 //  Created   : Thu Oct 21 17:24:06 2004
 //  Author    : Edward AGAPOV (eap)
 //  Module    : SMESH
-//  $Header   : $
 
 #include "SMESH_Gen_i.hxx"
 
 
 #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 : "<<theParameters<<endl;
   SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
-  if(aStudy->_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 "<<hasAttr<<endl;
-
-  SALOMEDS::GenericAttribute_var anAttr;
-  anAttr = aStudyBuilder->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 : "<<anInputParams<<endl;
-    cout<<"Old Parameters : "<<aOldParameters<<endl;
-    cout<<"New Parameters : "<<aNewParams<<endl;
+    ++pos;
   }
-
-  aStringAttr->SetValue( aNewParams.ToCString() );
+  return;
+
+  // OLD VARIANT
+
+  // if(VARIABLE_DEBUG)
+  //   cout<<"UpdateParameters : "<<theParameters<<endl;
+  // //SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
+  // if(aStudy->_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 "<<hasAttr<<endl;
+
+  // SALOMEDS::GenericAttribute_var anAttr;
+  // anAttr = aStudyBuilder->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 : "<<anInputParams<<endl;
+  //   cout<<"Old Parameters : "<<aOldParameters<<endl;
+  //   cout<<"New Parameters : "<<aNewParams<<endl;
+  // }
+
+  // aStringAttr->SetValue( aNewParams.ToCString() );
 }
 
 //=======================================================================
 //function : ParseParameters
-//purpose  : 
+//purpose  : Replace variables by their values
 //=======================================================================
 char* SMESH_Gen_i::ParseParameters(const char* theParameters)
 {