Salome HOME
Dump python extension.
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i_1.cxx
index e088deb942a9fe25068c4858b4cf226c7f9083f2..03b6ac9683fbbb27699ea0721d13c6ad237183d1 100644 (file)
 
 #ifdef _DEBUG_
 static int MYDEBUG = 0;
+static int VARIABLE_DEBUG = 0;
 #else
 static int MYDEBUG = 0;
+static int VARIABLE_DEBUG = 0;
 #endif
 
 //=============================================================================
@@ -864,35 +866,78 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
 }
 
 //=======================================================================
-//function : UpdateSObject
+//function : UpdateParameters
 //purpose  : 
 //=======================================================================
 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)) 
     return;
 
   SALOMEDS::SObject_var aSObj =  ObjectToSObject(aStudy,theObject);
-  if(aSObj->_is_nil())
+  if(aSObj->_is_nil())  
     return;
-
+  
   SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-  SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( theObject );
-
-  if ( !aHyp->_is_nil() ) {
-    CORBA::String_var objStr = aHyp->GetParameters();
-    TCollection_AsciiString aParams(theParameters);
-    if(aParams.Length()) {
-      SALOMEDS::GenericAttribute_var anAttr;
-      anAttr = aStudyBuilder->FindOrCreateAttribute( aSObj, "AttributeString");
-      SALOMEDS::AttributeString::_narrow(anAttr)->SetValue( aParams.ToCString() );
+  
+  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);
+
+  TCollection_AsciiString aNewParams;
+  TCollection_AsciiString aOldParameters(aStringAttr->Value());
+  TCollection_AsciiString anInputParams(ParseParameters(theParameters));
+  
+  if(!hasAttr)
+    aNewParams = anInputParams;
+  else 
+    aNewParams = aOldParameters+"|"+anInputParams;
+
+  if(VARIABLE_DEBUG)
+    {
+      cout<<"Input Parameters : "<<anInputParams<<endl;
+      cout<<"Old Parameters : "<<aOldParameters<<endl;
+      cout<<"New Parameters : "<<aNewParams<<endl;
     }
-    else
-      aStudyBuilder->RemoveAttribute(aSObj,"AttributeString");
-  }
+  
+  
+  aStringAttr->SetValue( aNewParams.ToCString() );
 }
 
+//=======================================================================
+//function : ParseParameters
+//purpose  : 
+//=======================================================================
+char* SMESH_Gen_i::ParseParameters(const char* theParameters)
+{
+  const char* aParameters = CORBA::string_dup(theParameters);
+  TCollection_AsciiString anInputParams;
+  SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
+  if( !aStudy->_is_nil() ) {
+    SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters);
+    for(int j=0;j<aSections->length();j++) {
+      SALOMEDS::ListOfStrings aVars= aSections[j];
+      for(int i=0;i<aVars.length();i++ ) {
+        anInputParams += aStudy->IsVariable(aVars[i].in()) ? 
+          TCollection_AsciiString(aVars[i].in()) : TCollection_AsciiString("");
+        if(i != aVars.length()-1)
+          anInputParams+=":";
+      }
+      if(j!=aSections->length()-1)
+        anInputParams+="|";
+    }
+  }
+  return CORBA::string_dup(anInputParams.ToCString());
+}
 
 //=======================================================================
 //function : GetParameters
@@ -904,12 +949,10 @@ char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject)
 
   SALOMEDS::Study_ptr aStudy = GetCurrentStudy();
   SALOMEDS::SObject_var aSObj =  ObjectToSObject(aStudy,theObject);
-  SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( theObject );
 
   if(!aStudy->_is_nil() && 
      !CORBA::is_nil(theObject) && 
-     !aSObj->_is_nil() && 
-     !aHyp->_is_nil()){
+     !aSObj->_is_nil()){
     
     SALOMEDS::GenericAttribute_var anAttr;
     if ( aSObj->FindAttribute(anAttr, "AttributeString")) {