-// 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
static int MYDEBUG = 0;
#endif
-static TCollection_AsciiString NotPublishedObjectName()
-{
- return "__NOT__Published__Object__";
-}
-
namespace SMESH
{
size_t TPythonDump::myCounter = 0;
+ const char theNotPublishedObjectName[] = "__NOT__Published__Object__";
+
+ TVar::TVar(CORBA::Double value):myVals(1) { myVals[0] = SMESH_Comment(value); }
+ TVar::TVar(CORBA::Long value):myVals(1) { myVals[0] = SMESH_Comment(value); }
+ TVar::TVar(CORBA::Short value):myVals(1) { myVals[0] = SMESH_Comment(value); }
+ TVar::TVar(const SMESH::double_array& value):myVals(value.length())
+ {
+ for ( size_t i = 0; i < value.length(); i++)
+ myVals[i] = SMESH_Comment(value[i]);
+ }
TPythonDump::
- TPythonDump()
+ TPythonDump():myVarsCounter(0)
{
++myCounter;
}
if(!aStudy->_is_nil() && !aCollection.IsEmpty()){
aSMESHGen->AddToPythonScript(aStudy->StudyId(),aCollection);
if(MYDEBUG) MESSAGE(aString);
+ aSMESHGen->UpdateParameters(""); // prevent misuse of already treated variables
}
}
}
+ TPythonDump& //!< to store a variable value
+ TPythonDump::
+ operator<<(const TVar& theVarValue)
+ {
+ if ( theVarValue.myVals.empty() ) return *this;
+
+ const std::vector< std::string >& varNames = SMESH_Gen_i::GetSMESHGen()->GetLastParameters();
+ if ( theVarValue.myVals.size() > 1 )
+ {
+ myStream << "[ ";
+ for ( size_t i = 1; i <= theVarValue.myVals.size(); ++i )
+ {
+ if ( myVarsCounter < varNames.size() && !varNames[ myVarsCounter ].empty() )
+ myStream << TVar::Quote() << varNames[ myVarsCounter ] << TVar::Quote();
+ else
+ myStream << theVarValue.myVals[i-1];
+ if ( i < theVarValue.myVals.size() )
+ myStream << ", ";
+ ++myVarsCounter;
+ }
+ myStream << " ]";
+ }
+ else
+ {
+ if ( myVarsCounter < varNames.size() && !varNames[ myVarsCounter ].empty() )
+ myStream << TVar::Quote() << varNames[ myVarsCounter ] << TVar::Quote();
+ else
+ myStream << theVarValue.myVals[0];
+ ++myVarsCounter;
+ }
+ return *this;
+ }
+
TPythonDump&
TPythonDump::
operator<<(long int theArg){
TPythonDump::
operator<<(SALOMEDS::SObject_ptr aSObject)
{
- if ( !aSObject->_is_nil() )
- myStream << aSObject->GetID();
- else
- myStream << NotPublishedObjectName();
+ if ( !aSObject->_is_nil() ) {
+ CORBA::String_var entry = aSObject->GetID();
+ myStream << entry.in();
+ }
+ else {
+ myStream << theNotPublishedObjectName;
+ }
return *this;
}
if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object
myStream << "smeshObj_" << size_t(theArg);
else
- myStream << NotPublishedObjectName();
+ myStream << theNotPublishedObjectName;
}
else
myStream << "None";
SMESH::ElementType type = types->length() ? types[0] : SMESH::ALL;
return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")";
}
- return *this;
+ return *this << theNotPublishedObjectName;
}
TPythonDump&
TPythonDump& TPythonDump::operator<<(const SMESH::AxisStruct & theAxis)
{
- myStream << "SMESH.AxisStruct( "
- << theAxis.x << ", "
- << theAxis.y << ", "
- << theAxis.z << ", "
- << theAxis.vx << ", "
- << theAxis.vy << ", "
- << theAxis.vz << " )";
+ *this << "SMESH.AxisStruct( "
+ << TVar( theAxis.x ) << ", "
+ << TVar( theAxis.y ) << ", "
+ << TVar( theAxis.z ) << ", "
+ << TVar( theAxis.vx ) << ", "
+ << TVar( theAxis.vy ) << ", "
+ << TVar( theAxis.vz ) << " )";
return *this;
}
TPythonDump& TPythonDump::operator<<(const SMESH::DirStruct & theDir)
{
const SMESH::PointStruct & P = theDir.PS;
- myStream << "SMESH.DirStruct( SMESH.PointStruct ( "
- << P.x << ", "
- << P.y << ", "
- << P.z << " ))";
+ *this << "SMESH.DirStruct( SMESH.PointStruct ( "
+ << TVar( P.x ) << ", "
+ << TVar( P.y ) << ", "
+ << TVar( P.z ) << " ))";
+ return *this;
+ }
+
+ TPythonDump& TPythonDump::operator<<(const SMESH::PointStruct & P)
+ {
+ *this << "SMESH.PointStruct ( "
+ << TVar( P.x ) << ", "
+ << TVar( P.y ) << ", "
+ << TVar( P.z ) << " )";
return *this;
}
DumpArray( theList, *this );
return *this;
}
+ const char* TPythonDump::NotPublishedObjectName()
+ {
+ return theNotPublishedObjectName;
+ }
TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" );
TCollection_AsciiString myLongStringEnd ( "TPythonDump::LongStringEnd" );
// Add trace of API methods calls and replace study entries by names
TCollection_AsciiString aScript;
- aScript += DumpPython_impl(aStudy, aMap, aMapNames,
- isPublished, isMultiFile, isValidScript, aSavedTrace);
+ aScript += DumpPython_impl(aStudy, aMap, aMapNames, isPublished, isMultiFile,
+ myIsHistoricalPythonDump, isValidScript, aSavedTrace);
int aLen = aScript.Length();
unsigned char* aBuffer = new unsigned char[aLen+1];
CORBA::Octet* anOctetBuf = (CORBA::Octet*)aBuffer;
Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
- bool hasNotPublishedObjects = aScript.Location( NotPublishedObjectName(), 1, aLen);
+ bool hasNotPublishedObjects = aScript.Location( SMESH::theNotPublishedObjectName, 1, aLen);
isValidScript = isValidScript && !hasNotPublishedObjects;
return aStreamFile._retn();
const TCollection_AsciiString allowedChars =
"qwertyuioplkjhgfdsazxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM0987654321_";
bool isValidName = true;
- int p=1; // replace not allowed chars with underscore
+ int nbUnderscore = 0;
+ int p=1; // replace not allowed chars by underscore
while (p <= aName.Length() &&
(p = aName.FirstLocationNotInSet(allowedChars, p, aName.Length())))
{
if ( p == 1 || p == aName.Length() || aName.Value(p-1) == '_')
- aName.Remove( p, 1 ); // remove double _ and from the start and the end
+ aName.Remove( p, 1 ); // remove double _ from the start and the end
else
- aName.SetValue(p, '_');
+ aName.SetValue(p, '_'), nbUnderscore++;
isValidName = false;
}
if ( aName.IsIntegerValue() ) { // aName must not start with a digit
aName.Insert( 1, 'a' );
isValidName = false;
}
+ // shorten names like CartesianParameters3D_400_400_400_1000000_1
+ if ( aName.Length() > 20 && nbUnderscore > 2 )
+ {
+ p = aName.Location( "_", 20, aName.Length());
+ if ( p > 1 )
+ aName.Trunc( p-1 );
+ }
return isValidName;
}
}
Resource_DataMapOfAsciiStringAsciiString& theNames,
bool isPublished,
bool isMultiFile,
+ bool isHistoricalDump,
bool& aValidScript,
const TCollection_AsciiString& theSavedTrace)
{
// Some objects are wrapped with python classes and
// Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod;
- aScript = SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod, theObjectNames );
+ std::set< TCollection_AsciiString > aRemovedObjIDs;
+ if ( !getenv("NO_2smeshpy_conversion"))
+ SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod,
+ theObjectNames, aRemovedObjIDs,
+ theStudy, isHistoricalDump );
+
+ // Replace characters used instead of quote marks to quote notebook variables
+ {
+ int pos = 1;
+ while (( pos = aScript.Location( 1, SMESH::TVar::Quote(), pos, aScript.Length() )))
+ aScript.SetValue( pos, '"' );
+ }
// Find entries to be replaced by names
Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aScript);
Standard_Integer aLen = aSeq->Length();
- if (aLen == 0)
+ if (aLen == 0 && isMultiFile)
return aScript;
// Replace entries by the names
Standard_Integer objectCounter = 0, aStart = 1, aScriptLength = aScript.Length();
TCollection_AsciiString anUpdatedScript, anEntry, aName, aBaseName("smeshObj_");
- // Collect names of GEOM objects to exclude same names for SMESH objects
+ // Collect names of GEOM objects to exclude same names of SMESH objects
GEOM::string_array_var aGeomNames = geom->GetAllDumpNames();
int ign = 0, nbgn = aGeomNames->length();
for (; ign < nbgn; ign++) {
do {
aName = aBaseName + (++objectCounter);
} while (theObjectNames.IsBound(aName));
- seqRemoved.Append(aName);
+ if ( !aRemovedObjIDs.count( anEntry ))
+ seqRemoved.Append(aName);
mapRemoved.Bind(anEntry, "1");
theObjectNames.Bind(anEntry, aName);
}
anUpdatedScript.Insert ( 1, initPart );
// add final part of aScript
- if (aSeq->Value(aLen) < aScriptLength)
+ if (aLen && aSeq->Value(aLen) < aScriptLength)
anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength);
// Remove removed objects
}
// Set object names
- anUpdatedScript += "\n\t## set object names";
-// anUpdatedScript += "\n\t\tsmeshgui = salome.ImportComponentGUI(\"SMESH\")";
-// anUpdatedScript += "\n\t\tsmeshgui.Init(theStudy._get_StudyId())";
-// anUpdatedScript += "\n";
- TCollection_AsciiString aGUIName;
+ TCollection_AsciiString aGUIName, aSetNameScriptPart;
Resource_DataMapOfAsciiStringAsciiString mapEntries;
for (Standard_Integer i = 1; i <= aLen; i += 2)
{
aName = geom->GetDumpName( anEntry.ToCString() );
if (aName.IsEmpty() && // Not a GEOM object
theNames.IsBound(anEntry) &&
+ !aRemovedObjIDs.count(anEntry) && // a command creating anEntry was erased
!mapEntries.IsBound(anEntry) && // Not yet processed
!mapRemoved.IsBound(anEntry)) // Was not removed
{
aName = theObjectNames.Find(anEntry);
aGUIName = theNames.Find(anEntry);
mapEntries.Bind(anEntry, aName);
- anUpdatedScript += helper + "\n\t" + aSMESHGen + ".SetName(" + aName;
+ aSetNameScriptPart += helper + "\n\t" + aSMESHGen + ".SetName(" + aName;
if ( anEntry2AccessorMethod.IsBound( anEntry ) )
- anUpdatedScript += helper + "." + anEntry2AccessorMethod( anEntry );
- anUpdatedScript += helper + ", '" + aGUIName + "')";
+ aSetNameScriptPart += helper + "." + anEntry2AccessorMethod( anEntry );
+ aSetNameScriptPart += helper + ", '" + aGUIName + "')";
}
}
-
- // Issue 0021249: removed (a similar block is dumped by SALOMEDSImpl_Study)
- //anUpdatedScript += "\n\tif salome.sg.hasDesktop():";
- //anUpdatedScript += "\n\t\tsalome.sg.updateObjBrowser(0)";
+ if ( !aSetNameScriptPart.IsEmpty() )
+ {
+ anUpdatedScript += "\n\t## set object names";
+ anUpdatedScript += aSetNameScriptPart;
+ }
// -----------------------------------------------------------------
// store visual properties of displayed objects