X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_DumpPython.cxx;h=1c89668462f37d19fcc48e15fdc5e0fd8ce37f19;hp=a8e4205b26c4121d3ce52d0d8ec3b5349216e31c;hb=4b5fd249abfca52265832f10435f18f5bb9c69ae;hpb=2de294b09ac8b9ace071a01db9cb4e235f1eadbb diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index a8e4205b2..1c8966846 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -1,31 +1,29 @@ -// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2011 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // +// File : SMESH_DumpPython.cxx +// Created : Thu Mar 24 17:17:59 2005 +// Author : Julia DOROVSKIKH +// Module : SMESH -// File : SMESH_Gen_i_DumpPython.cxx -// Created : Thu Mar 24 17:17:59 2005 -// Author : Julia DOROVSKIKH -// Module : SMESH -// $Header : $ -// #include "SMESH_PythonDump.hxx" #include "SMESH_Gen_i.hxx" #include "SMESH_Filter_i.hxx" @@ -73,42 +71,42 @@ namespace SMESH } } - TPythonDump& + TPythonDump& TPythonDump:: operator<<(long int theArg){ myStream<GetCurrentStudy(); SALOMEDS::SObject_var aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg); - if(!aSObject->_is_nil() || CORBA::is_nil( theArg )) + if(!aSObject->_is_nil()) return *this << aSObject; - SMESH::long_array_var anElementsId = theArg->GetIDs(); SMESH::SMESH_Mesh_var mesh = theArg->GetMesh(); - SMESH::array_of_ElementType_var types = theArg->GetTypes(); - SMESH::ElementType type = types->length() ? types[0] : SMESH::ALL; - return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")"; + if ( !theArg->_is_equivalent( mesh )) + { + SMESH::long_array_var anElementsId = theArg->GetIDs(); + SMESH::array_of_ElementType_var types = theArg->GetTypes(); + SMESH::ElementType type = types->length() ? types[0] : SMESH::ALL; + return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")"; + } + return *this; } - TPythonDump& + TPythonDump& TPythonDump:: operator<<(SMESH::FilterLibrary_i* theArg) { @@ -246,7 +250,7 @@ namespace SMESH return *this; } - TPythonDump& + TPythonDump& TPythonDump:: operator<<(SMESH::FilterManager_i* theArg) { @@ -254,7 +258,7 @@ namespace SMESH return *this; } - TPythonDump& + TPythonDump& TPythonDump:: operator<<(SMESH::Filter_i* theArg) { @@ -262,7 +266,7 @@ namespace SMESH return *this; } - TPythonDump& + TPythonDump& TPythonDump:: operator<<(SMESH::Functor_i* theArg) { @@ -316,7 +320,7 @@ namespace SMESH return *this; } - TPythonDump& + TPythonDump& TPythonDump:: operator<<(SMESH::Measurements_i* theArg) { @@ -378,6 +382,11 @@ namespace SMESH DumpArray( theList, *this ); return *this; } + TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList) + { + DumpArray( *theList, *this ); + return *this; + } TPythonDump& TPythonDump::operator<<(const SMESH::ListOfIDSources& theList) { DumpArray( theList, *this ); @@ -390,7 +399,7 @@ namespace SMESH //================================================================================ /*! * \brief Return marker of long string literal beginning - * \param type - a name of functionality producing the string literal + * \param type - a name of functionality producing the string literal * \retval TCollection_AsciiString - the marker string to be written into * a raw python script */ @@ -426,7 +435,7 @@ namespace SMESH * \param theLongString - the retrieved literal * \param theStringType - a name of functionality produced the literal * \retval bool - true if a string literal found - * + * * The literal is removed from theText; theFrom points position right after * the removed literal */ @@ -480,11 +489,31 @@ namespace SMESH } //======================================================================= -//function : DumpPython +//function : RemoveTabulation //purpose : //======================================================================= +void RemoveTabulation( TCollection_AsciiString& theScript ) +{ + std::string aString( theScript.ToCString() ); + std::string::size_type aPos = 0; + while( aPos < aString.length() ) + { + aPos = aString.find( "\n\t", aPos ); + if( aPos == std::string::npos ) + break; + aString.replace( aPos, 2, "\n" ); + aPos++; + } + theScript = aString.c_str(); +} + +//======================================================================= +//function : DumpPython +//purpose : +//======================================================================= Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy, CORBA::Boolean isPublished, + CORBA::Boolean isMultiFile, CORBA::Boolean& isValidScript) { SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(theStudy); @@ -525,19 +554,19 @@ 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; aScript += DumpPython_impl(aStudy, aMap, aMapNames, - isPublished, isValidScript, aSavedTrace); + isPublished, isMultiFile, isValidScript, aSavedTrace); - int aLen = aScript.Length(); + int aLen = aScript.Length(); unsigned char* aBuffer = new unsigned char[aLen+1]; strcpy((char*)aBuffer, aScript.ToCString()); CORBA::Octet* anOctetBuf = (CORBA::Octet*)aBuffer; - Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1); + Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1); bool hasNotPublishedObjects = aScript.Location( NotPublishedObjectName(), 1, aLen); isValidScript = isValidScript && !hasNotPublishedObjects; - return aStreamFile._retn(); + return aStreamFile._retn(); } //============================================================================= @@ -568,7 +597,7 @@ void SMESH_Gen_i::RemoveLastFromPythonScript (int theStudyID) //======================================================================= //function : SavePython -//purpose : +//purpose : //======================================================================= void SMESH_Gen_i::SavePython (SALOMEDS::Study_ptr theStudy) { @@ -621,10 +650,10 @@ Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theStri int c = (int)arr[i]; j = i+1; if ( isdigit( c )) { //Is digit? - + isFound = Standard_False; while((j < aLen) && ( isdigit(c) || c == ':' )) { //Check if it is an entry - c = (int)arr[j++]; + c = (int)arr[j++]; if(c == ':') isFound = Standard_True; } @@ -685,10 +714,11 @@ namespace { */ //============================================================================= TCollection_AsciiString SMESH_Gen_i::DumpPython_impl - (SALOMEDS::Study_ptr theStudy, + (SALOMEDS::Study_ptr theStudy, Resource_DataMapOfAsciiStringAsciiString& theObjectNames, Resource_DataMapOfAsciiStringAsciiString& theNames, - bool isPublished, + bool isPublished, + bool isMultiFile, bool& aValidScript, const TCollection_AsciiString& theSavedTrace) { @@ -700,7 +730,9 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl TCollection_AsciiString anOldGen( SMESH::TPythonDump::SMESHGenName() ); TCollection_AsciiString aScript; - aScript = "def RebuildData(theStudy):\n\t"; + if( isMultiFile ) + aScript += "def RebuildData(theStudy):"; + aScript += "\n\t"; aScript += helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()\n\t"; aScript += helper + "aMeasurements = " + aSMESHGen + ".CreateMeasurements()\n\t"; if ( isPublished ) @@ -824,14 +856,16 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl } // set initial part of aSript - TCollection_AsciiString initPart = "import salome, SMESH, SALOMEDS\n"; - initPart += helper + "import " + aSmeshpy + "\n\n"; - if ( importGeom ) + TCollection_AsciiString initPart = "import "; + if ( isMultiFile ) + initPart += helper + "salome, "; + initPart += aSmeshpy + ", SMESH, SALOMEDS\n"; + if ( importGeom && isMultiFile ) { - initPart += ("## import GEOM dump file ## \n" + initPart += ("\n## import GEOM dump file ## \n" "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"); + "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",__name__)+\" import *\")\n"); } anUpdatedScript.Insert ( 1, initPart ); @@ -839,37 +873,6 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl if (aSeq->Value(aLen) < aScriptLength) anUpdatedScript += aScript.SubString(aSeq->Value(aLen) + 1, aScriptLength); - // Set colors - 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(); - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( SObjectToObject( aSObj ) ); - // mesh auto color - if( !CORBA::is_nil(aMesh) && aMesh->GetAutoColor() ) - { - CORBA::String_var anEntry = aSObj->GetID(); - anUpdatedScript += - SMESH_Comment("\n\t") << theObjectNames(anEntry.inout()) << ".SetAutoColor(1)"; - } - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( SObjectToObject(aSObj)); - if( !CORBA::is_nil(aGroup) ) - { - SALOMEDS::Color aColor = aGroup->GetColor(); - if ( aColor.R >= 0 || aColor.G >= 0 || aColor.B >= 0 ) - { - CORBA::String_var anEntry = aSObj->GetID(); - anUpdatedScript += SMESH_Comment("\n\t") - << theObjectNames(anEntry.inout()) << ".SetColor(SALOMEDS.Color(" - << aColor.R <<", "<< aColor.G <<", "<< aColor.B <<" ))"; - } - } - } - } - // Remove removed objects if ( seqRemoved.Length() > 0 ) { anUpdatedScript += "\n\t## some objects were removed"; @@ -911,8 +914,10 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl anUpdatedScript += helper + ", '" + aGUIName + "')"; } } - anUpdatedScript += "\n\tif salome.sg.hasDesktop():"; - anUpdatedScript += "\n\t\tsalome.sg.updateObjBrowser(0)"; + + // Issue 0021249: removed (a similar block is dumped by SALOMEDSImpl_Study) + //anUpdatedScript += "\n\tif salome.sg.hasDesktop():"; + //anUpdatedScript += "\n\t\tsalome.sg.updateObjBrowser(0)"; // ----------------------------------------------------------------- // store visual properties of displayed objects @@ -928,7 +933,13 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl CORBA::string_free(script); } } - anUpdatedScript += "\n\n\tpass\n"; + + if( isMultiFile ) + anUpdatedScript += "\n\tpass"; + anUpdatedScript += "\n"; + + if( !isMultiFile ) // remove unnecessary tabulation + RemoveTabulation( anUpdatedScript ); // ----------------------------------------------------------------- // put string literals describing patterns into separate functions @@ -968,7 +979,18 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl do functionName = aFunctionType + "_" + ( nb++ ) + "()"; while ( !functionNameSet.insert( functionName.ToCString() ).second ); - anUpdatedScript += helper + "\n\ndef " + functionName + aLongString; // define function + // define function + TCollection_AsciiString funDef = helper + "def " + functionName + aLongString; + if ( isMultiFile ) + { + anUpdatedScript += helper + "\n\n" + funDef; + } + else + { + funDef += "\n\n"; + anUpdatedScript.Insert( 1, funDef); + where += funDef.Length(); + } } anUpdatedScript.InsertBefore( where, functionName ); // call function }