Salome HOME
Fix for issue 19964 EDF SMESH 803( Bad dump script of revolutionned mesh with groups).
[modules/smesh.git] / src / SMESH_I / SMESH_DumpPython.cxx
index e1079ebc7c43c54594303b4afef3a6e8923d8e9b..d08e923e031c3633c494c32e8260386967dbd53f 100644 (file)
@@ -296,6 +296,24 @@ namespace SMESH
     return *this;
   }
 
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList){
+    if(theList && theList->length() > 0 ) {
+      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+      SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy();
+      myStream << "[";
+      int aListLen = theList->length();
+      for(int i = 0 ; i < aListLen; i++){
+        SALOMEDS::SObject_var aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,(*theList)[i]);
+        if(!aSObject->_is_nil()) {
+          myStream << aSObject->GetID();
+          i < (aListLen - 1) ? myStream<<", " : myStream<<"]";
+        }
+        
+      }
+    }
+    return *this;
+  }
+
   TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" );
   TCollection_AsciiString myLongStringEnd  ( "TPythonDump::LongStringEnd" );
 
@@ -363,7 +381,7 @@ namespace SMESH
 
     // find where literal begins
     int literalBeg = theFrom + myLongStringStart.Length(); // = 26
-    char* typeLenStr = theText.ToCString() + literalBeg - 1; // = "7 Pattern!!! SALO...."
+    char* typeLenStr = (char*) theText.ToCString() + literalBeg - 1; // = "7 Pattern!!! SALO...."
     int typeLen = atoi ( typeLenStr ); // = 7
     while ( *typeLenStr != ' ' ) { // look for ' ' after typeLen
       literalBeg++; // 26 -> 27
@@ -437,7 +455,7 @@ Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy,
   // Add trace of API methods calls and replace study entries by names
   TCollection_AsciiString aScript =
     "### This file is generated by SALOME automatically by dump python functionality of SMESH component\n\n";
-  aScript += DumpPython_impl(aStudy->StudyId(), aMap, aMapNames,
+  aScript += DumpPython_impl(aStudy, aMap, aMapNames,
                              isPublished, isValidScript, aSavedTrace);
 
   int aLen = aScript.Length(); 
@@ -527,7 +545,7 @@ Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theStri
   Standard_Integer aLen = theString.Length();
   Standard_Boolean isFound = Standard_False;
 
-  char* arr = theString.ToCString();
+  char* arr = (char*) theString.ToCString();
   Standard_Integer i = 0, j;
 
   while(i < aLen) {
@@ -598,13 +616,15 @@ namespace {
  */
 //=============================================================================
 TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
-                        (int theStudyID
+                        (SALOMEDS::Study_ptr theStudy
                          Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
                          Resource_DataMapOfAsciiStringAsciiString& theNames,
                          bool isPublished, 
                          bool& aValidScript,
                          const TCollection_AsciiString& theSavedTrace)
 {
+  int aStudyID = theStudy->StudyId();
+
   TCollection_AsciiString helper; // to comfortably concatenate C strings
   TCollection_AsciiString aSmeshpy( SMESH_2smeshpy::SmeshpyName() );
   TCollection_AsciiString aSMESHGen( SMESH_2smeshpy::GenName() );
@@ -655,7 +675,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
   }
 
   // Dump trace of API methods calls
-  TCollection_AsciiString aNewLines = GetNewPythonLines(theStudyID);
+  TCollection_AsciiString aNewLines = GetNewPythonLines(aStudyID);
   if (aNewLines.Length() > 0) {
     aScript += helper + "\n" + aNewLines;
   }
@@ -749,6 +769,52 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
   if (aSeq->Value(aLen) < aScriptLength)
     anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength);
 
+
+  //SMESH_Gen_i* aSMESHGenI = SMESH_Gen_i::GetSMESHGen();
+  if( !CORBA::is_nil(theStudy) )
+  {
+    SALOMEDS::SObject_var aComp = theStudy->FindComponent(ComponentDataType());
+    if( !CORBA::is_nil(aComp) )
+    {
+      SALOMEDS::ChildIterator_var Itr = theStudy->NewChildIterator(aComp);
+      for( Itr->InitEx(true); Itr->More(); Itr->Next() )
+      {
+       SALOMEDS::SObject_var aSObj = Itr->Value();
+       CORBA::String_var aName = aSObj->GetName();
+
+       SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( SMESH_Gen_i::SObjectToObject( aSObj ) );
+       if( !CORBA::is_nil(aMesh) )
+       {
+         bool isAutoColor = aMesh->GetAutoColor();
+         if( isAutoColor )
+         {
+           anUpdatedScript += "\n\t";
+           anUpdatedScript += (char*)aName.in();
+           anUpdatedScript += ".SetAutoColor(1)";
+         }
+       }
+       SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SMESH_Gen_i::SObjectToObject( aSObj ) );
+       if( !CORBA::is_nil(aGroup) )
+       {
+         SALOMEDS::Color aColor = aGroup->GetColor();
+         if ( aColor.R > 0 || aColor.G > 0 || aColor.B > 0 )
+         {
+           anUpdatedScript += "\n\t";
+           anUpdatedScript += (char*)aName.in();
+           anUpdatedScript += ".SetColor(SALOMEDS.Color(";
+           anUpdatedScript += aColor.R;
+           anUpdatedScript += ",";
+           anUpdatedScript += aColor.G;
+           anUpdatedScript += ",";
+           anUpdatedScript += aColor.B;
+           anUpdatedScript += "))";
+         }
+       }
+      }
+    }
+  }
+
   // Remove removed objects
   if ( seqRemoved.Length() > 0 ) {
     anUpdatedScript += "\n\t## some objects were removed";
@@ -794,6 +860,21 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
   }
   anUpdatedScript += "\n\n\t\tsalome.sg.updateObjBrowser(0)";
 
+  // -----------------------------------------------------------------
+  // store visual properties of displayed objects
+  // -----------------------------------------------------------------
+
+  if (isPublished)
+  {
+    //Output the script that sets up the visual parameters.
+    char* script = theStudy->GetDefaultScript(ComponentDataType(), "\t");
+    if (script && strlen(script) > 0) {
+      anUpdatedScript += "\n\n\t### Store presentation parameters of displayed objects\n";
+      anUpdatedScript += script;
+      CORBA::string_free(script);
+    }
+  }
+
   anUpdatedScript += "\n\n\tpass\n";
 
   // -----------------------------------------------------------------
@@ -817,7 +898,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
     {
       // find the function name
       int functBeg = posAlready;
-      char* script = anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def fuction()"
+      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def fuction()"
       while ( *script != ' ' ) {
         script--;
         functBeg--;