X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_DumpPython.cxx;h=07ab0f69585566d5d63083966d1949ce8c6d6cb3;hb=686a8645643ba74ea3be5646b8fc7b35a70c297d;hp=d640a6489c3b6989abc49d93991b0017b0bd4595;hpb=57b43b4d010e2d0a1529d3c131bbb9d416e63258;p=modules%2Fsmesh.git diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index d640a6489..07ab0f695 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -1,28 +1,30 @@ -// Copyright (C) 2005 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 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. +// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// See http://www.salome-platform.org/ +// 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. +// +// 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 // // 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" @@ -31,6 +33,7 @@ #include #include +#include #ifdef _DEBUG_ @@ -59,10 +62,10 @@ namespace SMESH { if(--myCounter == 0){ SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen(); + std::string aString = myStream.str(); + TCollection_AsciiString aCollection(Standard_CString(aString.c_str())); SALOMEDS::Study_ptr aStudy = aSMESHGen->GetCurrentStudy(); - if(!aStudy->_is_nil()){ - std::string aString = myStream.str(); - TCollection_AsciiString aCollection(Standard_CString(aString.c_str())); + if(!aStudy->_is_nil() && !aCollection.IsEmpty()){ aSMESHGen->AddToPythonScript(aStudy->StudyId(),aCollection); if(MYDEBUG) MESSAGE(aString); } @@ -127,6 +130,26 @@ namespace SMESH return *this; } + TPythonDump& + TPythonDump:: + operator<<(const SMESH::GeometryType& theArg) + { + myStream<<"SMESH."; + switch(theArg){ + case Geom_POINT: myStream<<"Geom_POINT"; break; + case Geom_EDGE: myStream<<"Geom_EDGE"; break; + case Geom_TRIANGLE: myStream<<"Geom_TRIANGLE"; break; + case Geom_QUADRANGLE: myStream<<"Geom_QUADRANGLE"; break; + case Geom_POLYGON: myStream<<"Geom_POLYGON"; break; + case Geom_TETRA: myStream<<"Geom_TETRA"; break; + case Geom_PYRAMID: myStream<<"Geom_PYRAMID"; break; + case Geom_HEXA: myStream<<"Geom_HEXA"; break; + case Geom_PENTA: myStream<<"Geom_PENTA"; break; + case Geom_POLYHEDRA: myStream<<"Geom_POLYHEDRA"; break; + } + return *this; + } + template void DumpArray(const TArray& theArray, std::ostringstream & theStream) { @@ -222,8 +245,11 @@ namespace SMESH case FT_Taper: myStream<< "aTaper"; break; case FT_Skew: myStream<< "aSkew"; break; case FT_Area: myStream<< "aArea"; break; + case FT_Volume3D: myStream<< "aVolume3D"; break; case FT_FreeBorders: myStream<< "aFreeBorders"; break; case FT_FreeEdges: myStream<< "aFreeEdges"; break; + case FT_FreeNodes: myStream<< "aFreeNodes"; break; + case FT_FreeFaces: myStream<< "aFreeFaces"; break; case FT_MultiConnection: myStream<< "aMultiConnection"; break; case FT_MultiConnection2D:myStream<< "aMultiConnection2D";break; case FT_Length: myStream<< "aLength"; break; @@ -231,16 +257,21 @@ namespace SMESH case FT_BelongToGeom: myStream<< "aBelongToGeom"; break; case FT_BelongToPlane: myStream<< "aBelongToPlane"; break; case FT_BelongToCylinder: myStream<< "aBelongToCylinder"; break; + case FT_BelongToGenSurface:myStream<<"aBelongToGenSurface";break; case FT_LyingOnGeom: myStream<< "aLyingOnGeom"; break; case FT_RangeOfIds: myStream<< "aRangeOfIds"; break; case FT_BadOrientedVolume:myStream<< "aBadOrientedVolume";break; + case FT_LinearOrQuadratic:myStream<< "aLinearOrQuadratic";break; + case FT_GroupColor: myStream<< "aGroupColor"; break; + case FT_ElemGeomType: myStream<< "anElemGeomType"; break; case FT_LessThan: myStream<< "aLessThan"; break; case FT_MoreThan: myStream<< "aMoreThan"; break; case FT_EqualTo: myStream<< "anEqualTo"; break; case FT_LogicalNOT: myStream<< "aLogicalNOT"; break; case FT_LogicalAND: myStream<< "aLogicalAND"; break; case FT_LogicalOR: myStream<< "aLogicalOR"; break; - case FT_Undefined: myStream<< "anUndefined"; break; + case FT_Undefined: + default: myStream<< "anUndefined"; break; } myStream<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" ); @@ -362,7 +411,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 @@ -436,7 +485,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(); @@ -526,7 +575,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) { @@ -597,13 +646,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() ); @@ -654,7 +705,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; } @@ -663,7 +714,7 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl // Some objects are wrapped with python classes and // Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod; - aScript = SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod ); + aScript = SMESH_2smeshpy::ConvertScript( aScript, anEntry2AccessorMethod, theObjectNames ); // Find entries to be replaced by names Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aScript); @@ -748,6 +799,37 @@ 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"; @@ -765,8 +847,6 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl // Set object names anUpdatedScript += "\n\t## set object names"; - anUpdatedScript += helper + " \n\tisGUIMode = " + isPublished; - anUpdatedScript += "\n\tif isGUIMode and salome.sg.hasDesktop():"; // anUpdatedScript += "\n\t\tsmeshgui = salome.ImportComponentGUI(\"SMESH\")"; // anUpdatedScript += "\n\t\tsmeshgui.Init(theStudy._get_StudyId())"; // anUpdatedScript += "\n"; @@ -785,14 +865,29 @@ TCollection_AsciiString SMESH_Gen_i::DumpPython_impl aName = theObjectNames.Find(anEntry); aGUIName = theNames.Find(anEntry); mapEntries.Bind(anEntry, aName); - anUpdatedScript += helper + "\n\t\t" + aSmeshpy + ".SetName(" + aName; + anUpdatedScript += helper + "\n\t" + aSMESHGen + ".SetName(" + aName; if ( anEntry2AccessorMethod.IsBound( anEntry ) ) anUpdatedScript += helper + "." + anEntry2AccessorMethod( anEntry ); anUpdatedScript += helper + ", '" + aGUIName + "')"; } } - anUpdatedScript += "\n\n\t\tsalome.sg.updateObjBrowser(0)"; + anUpdatedScript += "\n\tif salome.sg.hasDesktop():"; + anUpdatedScript += "\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"; // ----------------------------------------------------------------- @@ -816,7 +911,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--;