Salome HOME
Bug IPAL8742. Add comments into generated files of DumpPython
authoreap <eap@opencascade.com>
Fri, 6 May 2005 06:59:17 +0000 (06:59 +0000)
committereap <eap@opencascade.com>
Fri, 6 May 2005 06:59:17 +0000 (06:59 +0000)
Bug IPAL8749. Make DumpPython() fail if a not published GEOM object encounters.
Bug IPAL8752. Import GEOM script only if necessary
Bug IPAL8747. Do not produce py names starting with digit

src/SMESH_I/SMESH_DumpPython.cxx

index 26eb938c1ed7ae0fbe12421b6cb4b7a5cffaaf3d..fde48b872de1b50be27548ba3e2e535220ffa47e 100644 (file)
@@ -7,16 +7,23 @@
 #include "SMESH_PythonDump.hxx"
 #include "SMESH_Gen_i.hxx"
 #include "SMESH_Filter_i.hxx"
+#include "SALOMEDSImpl_Study.hxx"
 
 #include <TColStd_HSequenceOfInteger.hxx>
 #include <TCollection_AsciiString.hxx>
 
+
 #ifdef _DEBUG_
 static int MYDEBUG = 0;
 #else
 static int MYDEBUG = 0;
 #endif
 
+static TCollection_AsciiString NotPublishedObjectName()
+{
+  return "__NOT__Published__Object__";
+}
+
 namespace SMESH
 {
 
@@ -130,16 +137,20 @@ namespace SMESH
   TPythonDump::
   operator<<(CORBA::Object_ptr theArg)
   {
-    CORBA::String_var aString("None");
+    TCollection_AsciiString aString("None");
     SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
     SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy();
     SALOMEDS::SObject_var aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
     if(!aSObject->_is_nil()){
       aString = aSObject->GetID();
     }else if(!CORBA::is_nil(theArg)){
-      aString = SMESH_Gen_i::GetORB()->object_to_string(theArg);
+      aString = "smeshObj_";
+      if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object
+        aString += (int) theArg;
+      else
+        aString = NotPublishedObjectName();
     }
-    myStream<<aString.in();
+    myStream<<aString.ToCString();
     return *this;
   }
 
@@ -305,9 +316,9 @@ Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy,
   TCollection_AsciiString aSavedTrace (oldValue);
 
   // Add trace of API methods calls and replace study entries by names
-  bool aValidScript;
-  TCollection_AsciiString aScript = DumpPython_impl
-    (aStudy->StudyId(), aMap, aMapNames, isPublished, aValidScript, aSavedTrace);
+  TCollection_AsciiString aScript =
+    SALOMEDSImpl_Study::GetDumpStudyComment("SMESH") + "\n\n" +
+      DumpPython_impl(aStudy->StudyId(), aMap, aMapNames, isPublished, isValidScript, aSavedTrace);
 
   int aLen = aScript.Length(); 
   unsigned char* aBuffer = new unsigned char[aLen+1];
@@ -315,7 +326,9 @@ Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy,
 
   CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
   Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1); 
-  isValidScript = aValidScript;
+
+  bool hasNotPublishedObjects = aScript.Location( NotPublishedObjectName(), 1, aLen);
+  isValidScript = isValidScript && !hasNotPublishedObjects;
 
   return aStreamFile._retn(); 
 }
@@ -368,16 +381,20 @@ void SMESH_Gen_i::AddToCurrentPyScript (const TCollection_AsciiString& theString
 TCollection_AsciiString& SMESH_Gen_i::AddObject(TCollection_AsciiString& theStr,
                                                 CORBA::Object_ptr        theObject)
 {
+  TCollection_AsciiString aString("None");
   SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-  SALOMEDS::SObject_var aSO =
+  SALOMEDS::SObject_var aSObject =
     aSMESHGen->ObjectToSObject(aSMESHGen->GetCurrentStudy(), theObject);
-  if ( !aSO->_is_nil() )
-    theStr += aSO->GetID();
-  else if ( !CORBA::is_nil( theObject ) )
-    theStr += GetORB()->object_to_string( theObject );
-  else
-    theStr += "None";
-
+  if ( !aSObject->_is_nil() ) {
+    aString = aSObject->GetID();
+  } else if ( !CORBA::is_nil( theObject )) {
+    aString = "smeshObj_";
+    if ( aSMESHGen->CanPublishInStudy( theObject )) // not published SMESH object
+      aString += (int) theObject;
+    else
+      aString = NotPublishedObjectName();
+  }
+  theStr += aString;
   return theStr;
 }
 
@@ -474,19 +491,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
                          const TCollection_AsciiString& theSavedTrace)
 {
   TCollection_AsciiString aScript;
-  aScript += "import salome\n";
-  aScript += "import geompy\n\n";
-  aScript += "import SMESH\n";
-  aScript += "import StdMeshers\n\n";
-  aScript += "#import GEOM module\n";
-  aScript += "import string\n";
-  aScript += "import os\n";
-  aScript += "import sys\n";
-  aScript += "import re\n";
-  aScript += "sys.path.append( os.path.dirname(__file__) )\n";
-  aScript += "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",__name__)+\" import *\")\n\n";
-  
-  aScript += "def RebuildData(theStudy):";
+  aScript = "def RebuildData(theStudy):";
   aScript += "\n\tsmesh = salome.lcc.FindOrLoadComponent(\"FactoryServer\", \"SMESH\")";
   aScript += "\n\taFilterManager = smesh.CreateFilterManager()";
   if ( isPublished )
@@ -529,6 +534,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
     theObjectNames.Bind(aName, "1");
   }
 
+  bool importGeom = false;
   for (Standard_Integer i = 1; i <= aLen; i += 2) {
     anUpdatedScript += aScript.SubString(aStart, aSeq->Value(i) - 1);
     anEntry = aScript.SubString(aSeq->Value(i), aSeq->Value(i + 1));
@@ -539,6 +545,8 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
       if (theObjectNames.IsBound(anEntry)) {
         // The Object is in Study
         aName = theObjectNames.Find(anEntry);
+        if ( aName.IsIntegerValue() ) // aName must not start with a digit
+          aName.Insert( 1, 'a' );
         if (theObjectNames.IsBound(aName) && anEntry != theObjectNames(aName)) {
           // diff objects have same name - make a new name
           TCollection_AsciiString aName2;
@@ -560,11 +568,24 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
       }
       theObjectNames.Bind(aName, anEntry); // to detect same name of diff objects
     }
-
+    else
+    {
+      importGeom = true;
+    }
     anUpdatedScript += aName;
     aStart = aSeq->Value(i + 1) + 1;
   }
 
+  // set initial part of aSript
+  TCollection_AsciiString initPart = "import salome, SMESH, StdMeshers\n\n";
+  if ( importGeom )
+  {
+    initPart += ("import string, os, sys, re\n"
+                 "sys.path.insert( 0, os.path.dirname(__file__) )\n"
+                 "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",__name__)+\" import *\")\n\n");
+  }
+  anUpdatedScript.Insert ( 1, initPart );
+
   // add final part of aScript
   if (aSeq->Value(aLen) < aScriptLength)
     anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength);