Salome HOME
Update copyright information
[modules/smesh.git] / src / SMESH_I / SMESH_Gen_i_1.cxx
index 1fd5f54150aee1b9d616deaae8175d1d567d6a25..a7567450f5f94174f07ecd5a6e5969494e33b712 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2011  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -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
 
 //=============================================================================
@@ -698,10 +697,18 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy
 
       // Add new group to corresponding sub-tree
       SMESH::array_of_ElementType_var elemTypes = theGroup->GetTypes();
-      const int isEmpty = ( elemTypes->length() == 0 );
+      int isEmpty = ( elemTypes->length() == 0 );
       std::string pm[2] = { "ICON_SMESH_TREE_GROUP", "ICON_SMESH_TREE_MESH_WARN" };
       if ( SMESH::DownCast< SMESH_GroupOnFilter_i* > ( theGroup ))
+      {
         pm[0] = "ICON_SMESH_TREE_GROUP_ON_FILTER";
+      }
+      else if ( SMESH::DownCast< SMESH_Group_i* > ( theGroup ))
+      {
+        SMESH::array_of_ElementType_var allElemTypes = theMesh->GetTypes();
+        for ( size_t i =0; i < allElemTypes->length() && isEmpty; ++i )
+          isEmpty = ( allElemTypes[i] != theGroup->GetType() );
+      }
       aGroupSO = publish (theStudy, theGroup, aRootSO, 0, pm[isEmpty].c_str() );
     }
     if ( aGroupSO->_is_nil() )
@@ -902,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)) 
-    return;
-
-  SALOMEDS::SObject_var aSObj =  ObjectToSObject(aStudy,theObject);
-  if(aSObj->_is_nil())  
+  if ( aStudy->_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)
 {