2019-02-14 16:55:47 +05:00
// Copyright (C) 2007-2019 CEA/DEN, EDF R&D, OPEN CASCADE
2005-12-05 21:31:55 +05:00
//
2012-08-09 16:03:55 +06:00
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
2005-12-05 21:31:55 +05:00
//
2012-08-09 16:03:55 +06:00
// 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
2014-02-20 18:25:37 +06:00
// version 2.1 of the License, or (at your option) any later version.
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
// 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.
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
// 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
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
2009-02-17 10:27:49 +05:00
//
2012-08-09 16:03:55 +06:00
// File : SMESH_DumpPython.cxx
// Created : Thu Mar 24 17:17:59 2005
// Author : Julia DOROVSKIKH
// Module : SMESH
2005-06-07 19:22:20 +06:00
# include "SMESH_PythonDump.hxx"
2013-02-12 20:37:44 +06:00
# include "SMESH_2smeshpy.hxx"
# include "SMESH_Comment.hxx"
2005-06-07 19:22:20 +06:00
# include "SMESH_Filter_i.hxx"
2013-02-12 20:37:44 +06:00
# include "SMESH_Gen_i.hxx"
2006-05-06 14:51:48 +06:00
# include "SMESH_MeshEditor_i.hxx"
2013-02-12 20:37:44 +06:00
2019-11-08 18:33:07 +05:00
# include <Basics_Utils.hxx>
2013-02-12 20:37:44 +06:00
# include <SALOMEDS_wrap.hxx>
2005-06-07 19:22:20 +06:00
2013-09-19 18:34:44 +06:00
# include <LDOMParser.hxx>
# include <Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString.hxx>
2005-06-07 19:22:20 +06:00
# include <TColStd_HSequenceOfInteger.hxx>
# include <TCollection_AsciiString.hxx>
# ifdef _DEBUG_
static int MYDEBUG = 0 ;
# else
static int MYDEBUG = 0 ;
# endif
2013-09-19 18:34:44 +06:00
# include "SMESH_TryCatch.hxx"
2005-06-07 19:22:20 +06:00
namespace SMESH
{
size_t TPythonDump : : myCounter = 0 ;
2013-03-15 20:59:29 +06:00
const char theNotPublishedObjectName [ ] = " __NOT__Published__Object__ " ;
2005-06-07 19:22:20 +06:00
2016-08-24 19:04:22 +05:00
TVar : : TVar ( CORBA : : Double value ) : myVals ( 1 ) , myIsList ( false ) { myVals [ 0 ] = SMESH_Comment ( value ) ; }
TVar : : TVar ( CORBA : : Long value ) : myVals ( 1 ) , myIsList ( false ) { myVals [ 0 ] = SMESH_Comment ( value ) ; }
TVar : : TVar ( CORBA : : Short value ) : myVals ( 1 ) , myIsList ( false ) { myVals [ 0 ] = SMESH_Comment ( value ) ; }
TVar : : TVar ( const SMESH : : double_array & value ) : myVals ( value . length ( ) ) , myIsList ( true )
2012-08-09 16:03:55 +06:00
{
for ( size_t i = 0 ; i < value . length ( ) ; i + + )
myVals [ i ] = SMESH_Comment ( value [ i ] ) ;
}
2005-06-07 19:22:20 +06:00
TPythonDump : :
2012-08-09 16:03:55 +06:00
TPythonDump ( ) : myVarsCounter ( 0 )
2005-06-07 19:22:20 +06:00
{
+ + myCounter ;
}
TPythonDump : :
~ TPythonDump ( )
{
if ( - - myCounter = = 0 ) {
SMESH_Gen_i * aSMESHGen = SMESH_Gen_i : : GetSMESHGen ( ) ;
2009-02-17 10:27:49 +05:00
std : : string aString = myStream . str ( ) ;
TCollection_AsciiString aCollection ( Standard_CString ( aString . c_str ( ) ) ) ;
2017-06-13 15:01:10 +05:00
if ( ! aCollection . IsEmpty ( ) )
2013-04-01 19:05:47 +06:00
{
const std : : string & objEntry = SMESH_Gen_i : : GetSMESHGen ( ) - > GetLastObjEntry ( ) ;
if ( ! objEntry . empty ( ) )
aCollection + = ( TVar : : ObjPrefix ( ) + objEntry ) . c_str ( ) ;
2017-06-13 15:01:10 +05:00
aSMESHGen - > AddToPythonScript ( aCollection ) ;
2012-08-09 16:03:55 +06:00
if ( MYDEBUG ) MESSAGE ( aString ) ;
2013-04-01 19:05:47 +06:00
// prevent misuse of already treated variables
aSMESHGen - > UpdateParameters ( CORBA : : Object_var ( ) . in ( ) , " " ) ;
2005-06-07 19:22:20 +06:00
}
}
}
2013-04-01 19:05:47 +06:00
TPythonDump & //!< store a variable value. Write either a value or '$varID$'
2012-08-09 16:03:55 +06:00
TPythonDump : :
operator < < ( const TVar & theVarValue )
{
2013-04-01 19:05:47 +06:00
const std : : vector < int > & varIDs = SMESH_Gen_i : : GetSMESHGen ( ) - > GetLastParamIndices ( ) ;
2016-08-24 19:04:22 +05:00
if ( theVarValue . myIsList )
2012-08-09 16:03:55 +06:00
{
myStream < < " [ " ;
for ( size_t i = 1 ; i < = theVarValue . myVals . size ( ) ; + + i )
{
2015-11-19 16:29:23 +05:00
if ( myVarsCounter < ( int ) varIDs . size ( ) & & varIDs [ myVarsCounter ] > = 0 )
2013-04-01 19:05:47 +06:00
myStream < < TVar : : Quote ( ) < < varIDs [ myVarsCounter ] < < TVar : : Quote ( ) ;
2012-08-09 16:03:55 +06:00
else
myStream < < theVarValue . myVals [ i - 1 ] ;
if ( i < theVarValue . myVals . size ( ) )
myStream < < " , " ;
+ + myVarsCounter ;
}
myStream < < " ] " ;
}
else
{
2015-11-19 16:29:23 +05:00
if ( myVarsCounter < ( int ) varIDs . size ( ) & & varIDs [ myVarsCounter ] > = 0 )
2013-04-01 19:05:47 +06:00
myStream < < TVar : : Quote ( ) < < varIDs [ myVarsCounter ] < < TVar : : Quote ( ) ;
2012-08-09 16:03:55 +06:00
else
myStream < < theVarValue . myVals [ 0 ] ;
+ + myVarsCounter ;
}
return * this ;
}
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( long int theArg ) {
myStream < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( int theArg ) {
myStream < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( double theArg ) {
myStream < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( float theArg ) {
myStream < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( const void * theArg ) {
myStream < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( const char * theArg ) {
2005-12-15 13:34:25 +05:00
if ( theArg )
myStream < < theArg ;
2005-06-07 19:22:20 +06:00
return * this ;
}
2016-11-03 20:55:09 +05:00
TPythonDump &
TPythonDump : :
operator < < ( const std : : string & theArg ) {
myStream < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( const SMESH : : ElementType & theArg )
{
myStream < < " SMESH. " ;
switch ( theArg ) {
2012-08-09 16:03:55 +06:00
case ALL : myStream < < " ALL " ; break ;
case NODE : myStream < < " NODE " ; break ;
case EDGE : myStream < < " EDGE " ; break ;
case FACE : myStream < < " FACE " ; break ;
case VOLUME : myStream < < " VOLUME " ; break ;
case ELEM0D : myStream < < " ELEM0D " ; break ;
case BALL : myStream < < " BALL " ; break ;
default : myStream < < " __UNKNOWN__ElementType: " < < theArg ;
}
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 ;
case Geom_BALL : myStream < < " Geom_BALL " ; break ;
default : myStream < < " __UNKNOWN__GeometryType: " < < theArg ;
2005-06-07 19:22:20 +06:00
}
return * this ;
}
2013-03-06 19:57:01 +06:00
TPythonDump &
TPythonDump : :
operator < < ( const SMESH : : EntityType & theArg )
{
myStream < < " SMESH. " ;
switch ( theArg ) {
case Entity_0D : myStream < < " Entity_0D " ; break ;
case Entity_Edge : myStream < < " Entity_Edge " ; break ;
case Entity_Quad_Edge : myStream < < " Entity_Quad_Edge " ; break ;
case Entity_Triangle : myStream < < " Entity_Triangle " ; break ;
case Entity_Quad_Triangle : myStream < < " Entity_Quad_Triangle " ; break ;
2013-05-16 22:45:34 +06:00
case Entity_BiQuad_Triangle : myStream < < " Entity_BiQuad_Triangle " ; break ;
2013-03-06 19:57:01 +06:00
case Entity_Quadrangle : myStream < < " Entity_Quadrangle " ; break ;
case Entity_Quad_Quadrangle : myStream < < " Entity_Quad_Quadrangle " ; break ;
case Entity_BiQuad_Quadrangle : myStream < < " Entity_BiQuad_Quadrangle " ; break ;
case Entity_Polygon : myStream < < " Entity_Polygon " ; break ;
case Entity_Quad_Polygon : myStream < < " Entity_Quad_Polygon " ; break ;
case Entity_Tetra : myStream < < " Entity_Tetra " ; break ;
case Entity_Quad_Tetra : myStream < < " Entity_Quad_Tetra " ; break ;
case Entity_Pyramid : myStream < < " Entity_Pyramid " ; break ;
case Entity_Quad_Pyramid : myStream < < " Entity_Quad_Pyramid " ; break ;
case Entity_Hexa : myStream < < " Entity_Hexa " ; break ;
case Entity_Quad_Hexa : myStream < < " Entity_Quad_Hexa " ; break ;
case Entity_TriQuad_Hexa : myStream < < " Entity_TriQuad_Hexa " ; break ;
case Entity_Penta : myStream < < " Entity_Penta " ; break ;
case Entity_Quad_Penta : myStream < < " Entity_Quad_Penta " ; break ;
2017-09-07 17:04:57 +05:00
case Entity_BiQuad_Penta : myStream < < " Entity_BiQuad_Penta " ; break ;
2013-03-06 19:57:01 +06:00
case Entity_Hexagonal_Prism : myStream < < " Entity_Hexagonal_Prism " ; break ;
case Entity_Polyhedra : myStream < < " Entity_Polyhedra " ; break ;
case Entity_Quad_Polyhedra : myStream < < " Entity_Quad_Polyhedra " ; break ;
case Entity_Ball : myStream < < " Entity_Ball " ; break ;
case Entity_Last : myStream < < " Entity_Last " ; break ;
default : myStream < < " __UNKNOWN__EntityType: " < < theArg ;
}
return * this ;
}
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-12-15 13:34:25 +05:00
TPythonDump : : operator < < ( const SMESH : : long_array & theArg )
2005-06-07 19:22:20 +06:00
{
2012-08-09 16:03:55 +06:00
DumpArray ( theArg , * this ) ;
2005-06-07 19:22:20 +06:00
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-12-15 13:34:25 +05:00
TPythonDump : : operator < < ( const SMESH : : double_array & theArg )
{
2012-08-09 16:03:55 +06:00
DumpArray ( theArg , * this ) ;
2005-12-15 13:34:25 +05:00
return * this ;
}
2014-01-15 15:41:17 +06:00
TPythonDump &
TPythonDump : : operator < < ( const SMESH : : nodes_array & theArg )
{
DumpArray ( theArg , * this ) ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
TPythonDump : : operator < < ( const SMESH : : string_array & theArray )
{
myStream < < " [ " ;
2015-11-19 16:29:23 +05:00
for ( CORBA : : ULong i = 1 ; i < = theArray . length ( ) ; i + + ) {
2012-08-09 16:03:55 +06:00
myStream < < " ' " < < theArray [ i - 1 ] < < " ' " ;
if ( i < theArray . length ( ) )
myStream < < " , " ;
}
myStream < < " ] " ;
return * this ;
}
TPythonDump &
2005-12-15 13:34:25 +05:00
TPythonDump : :
operator < < ( SALOMEDS : : SObject_ptr aSObject )
{
2013-02-12 20:37:44 +06:00
if ( ! aSObject - > _is_nil ( ) ) {
CORBA : : String_var entry = aSObject - > GetID ( ) ;
myStream < < entry . in ( ) ;
}
else {
2013-03-15 20:59:29 +06:00
myStream < < theNotPublishedObjectName ;
2013-02-12 20:37:44 +06:00
}
2005-12-15 13:34:25 +05:00
return * this ;
}
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( CORBA : : Object_ptr theArg )
{
2013-02-12 20:37:44 +06:00
SMESH_Gen_i * aSMESHGen = SMESH_Gen_i : : GetSMESHGen ( ) ;
2017-06-13 15:01:10 +05:00
SALOMEDS : : SObject_wrap aSObject = SMESH_Gen_i : : ObjectToSObject ( theArg ) ;
2005-12-15 13:34:25 +05:00
if ( ! aSObject - > _is_nil ( ) ) {
2012-08-09 16:03:55 +06:00
CORBA : : String_var id = aSObject - > GetID ( ) ;
myStream < < id ;
2005-12-15 13:34:25 +05:00
} else if ( ! CORBA : : is_nil ( theArg ) ) {
2005-06-07 19:22:20 +06:00
if ( aSMESHGen - > CanPublishInStudy ( theArg ) ) // not published SMESH object
2006-05-06 14:51:48 +06:00
myStream < < " smeshObj_ " < < size_t ( theArg ) ;
2005-06-07 19:22:20 +06:00
else
2013-03-15 20:59:29 +06:00
myStream < < theNotPublishedObjectName ;
2005-06-07 19:22:20 +06:00
}
2005-12-15 13:34:25 +05:00
else
myStream < < " None " ;
2005-06-07 19:22:20 +06:00
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
TPythonDump : :
operator < < ( SMESH : : SMESH_Hypothesis_ptr theArg )
{
2017-06-13 15:01:10 +05:00
SALOMEDS : : SObject_wrap aSObject = SMESH_Gen_i : : ObjectToSObject ( theArg ) ;
2012-08-09 16:03:55 +06:00
if ( aSObject - > _is_nil ( ) & & ! CORBA : : is_nil ( theArg ) )
myStream < < " hyp_ " < < theArg - > GetId ( ) ;
else
2013-04-01 19:05:47 +06:00
* this < < aSObject ;
2012-08-09 16:03:55 +06:00
return * this ;
}
TPythonDump &
TPythonDump : :
operator < < ( SMESH : : SMESH_IDSource_ptr theArg )
{
if ( CORBA : : is_nil ( theArg ) )
return * this < < " None " ;
2017-06-13 15:01:10 +05:00
SALOMEDS : : SObject_wrap aSObject = SMESH_Gen_i : : ObjectToSObject ( theArg ) ;
2012-08-09 16:03:55 +06:00
if ( ! aSObject - > _is_nil ( ) )
2013-02-12 20:37:44 +06:00
{
2012-08-09 16:03:55 +06:00
return * this < < aSObject ;
2013-02-12 20:37:44 +06:00
}
2012-08-09 16:03:55 +06:00
if ( SMESH : : Filter_i * filter = SMESH : : DownCast < SMESH : : Filter_i * > ( theArg ) )
2013-02-12 20:37:44 +06:00
{
2012-08-09 16:03:55 +06:00
return * this < < filter ;
2013-02-12 20:37:44 +06:00
}
if ( SMESH_MeshEditor_i : : IsTemporaryIDSource ( theArg ) )
2012-08-09 16:03:55 +06:00
{
2013-02-12 20:37:44 +06:00
SMESH : : SMESH_Mesh_var mesh = theArg - > GetMesh ( ) ;
SMESH : : long_array_var anElementsId = theArg - > GetIDs ( ) ;
SMESH : : array_of_ElementType_var types = theArg - > GetTypes ( ) ;
2013-09-19 18:34:44 +06:00
SMESH : : ElementType type = types - > length ( ) ? types [ 0 ] : SMESH : : ALL ;
2017-06-13 15:01:10 +05:00
SALOMEDS : : SObject_wrap meshSO = SMESH_Gen_i : : ObjectToSObject ( mesh ) ;
2013-09-19 18:34:44 +06:00
if ( meshSO - > _is_nil ( ) ) // don't waste memory for dumping not published objects
return * this < < mesh < < " .GetIDSource([], " < < type < < " ) " ;
else
return * this < < mesh < < " .GetIDSource( " < < anElementsId < < " , " < < type < < " ) " ;
2012-08-09 16:03:55 +06:00
}
2013-03-15 20:59:29 +06:00
return * this < < theNotPublishedObjectName ;
2012-08-09 16:03:55 +06:00
}
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( SMESH : : FilterLibrary_i * theArg )
{
myStream < < " aFilterLibrary " < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( SMESH : : FilterManager_i * theArg )
{
myStream < < " aFilterManager " ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( SMESH : : Filter_i * theArg )
{
myStream < < " aFilter " < < theArg ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
2005-06-07 19:22:20 +06:00
TPythonDump : :
operator < < ( SMESH : : Functor_i * theArg )
{
2005-12-15 13:34:25 +05:00
if ( theArg ) {
FunctorType aFunctorType = theArg - > GetFunctorType ( ) ;
2013-05-16 22:45:34 +06:00
switch ( aFunctorType ) {
case FT_AspectRatio : myStream < < " aAspectRatio " ; break ;
case FT_AspectRatio3D : myStream < < " aAspectRatio3D " ; break ;
2012-08-09 16:03:55 +06:00
case FT_Warping : myStream < < " aWarping " ; break ;
case FT_MinimumAngle : myStream < < " aMinimumAngle " ; break ;
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_MaxElementLength2D : myStream < < " aMaxElementLength2D " ; break ;
case FT_MaxElementLength3D : myStream < < " aMaxElementLength3D " ; 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 ;
2013-05-16 22:45:34 +06:00
case FT_EqualNodes : myStream < < " aEqualNodes " ; break ;
case FT_EqualEdges : myStream < < " aEqualEdges " ; break ;
case FT_EqualFaces : myStream < < " aEqualFaces " ; break ;
case FT_EqualVolumes : myStream < < " aEqualVolumes " ; break ;
2012-08-09 16:03:55 +06:00
case FT_MultiConnection : myStream < < " aMultiConnection " ; break ;
case FT_MultiConnection2D : myStream < < " aMultiConnection2D " ; break ;
case FT_Length : myStream < < " aLength " ; break ;
case FT_Length2D : myStream < < " aLength2D " ; break ;
2019-01-28 17:04:53 +05:00
case FT_Length3D : myStream < < " aLength3D " ; break ;
2017-10-12 21:52:03 +05:00
case FT_Deflection2D : myStream < < " aDeflection2D " ; break ;
2016-08-11 18:44:16 +05:00
case FT_NodeConnectivityNumber : myStream < < " aNodeConnectivityNumber " ; break ;
2015-04-14 17:39:28 +05:00
case FT_BelongToMeshGroup : myStream < < " aBelongToMeshGroup " ; break ;
2012-08-09 16:03:55 +06:00
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_BareBorderVolume : myStream < < " aBareBorderVolume " ; break ;
case FT_BareBorderFace : myStream < < " aBareBorderFace " ; break ;
case FT_OverConstrainedVolume : myStream < < " aOverConstrainedVolume " ; break ;
case FT_OverConstrainedFace : myStream < < " aOverConstrainedFace " ; break ;
case FT_LinearOrQuadratic : myStream < < " aLinearOrQuadratic " ; break ;
case FT_GroupColor : myStream < < " aGroupColor " ; break ;
2013-05-16 22:45:34 +06:00
case FT_ElemGeomType : myStream < < " aElemGeomType " ; break ;
case FT_EntityType : myStream < < " aEntityType " ; break ;
case FT_CoplanarFaces : myStream < < " aCoplanarFaces " ; break ;
case FT_BallDiameter : myStream < < " aBallDiameter " ; break ;
case FT_ConnectedElements : myStream < < " aConnectedElements " ; break ;
2012-08-09 16:03:55 +06:00
case FT_LessThan : myStream < < " aLessThan " ; break ;
case FT_MoreThan : myStream < < " aMoreThan " ; break ;
2013-05-16 22:45:34 +06:00
case FT_EqualTo : myStream < < " aEqualTo " ; break ;
2012-08-09 16:03:55 +06:00
case FT_LogicalNOT : myStream < < " aLogicalNOT " ; break ;
case FT_LogicalAND : myStream < < " aLogicalAND " ; break ;
case FT_LogicalOR : myStream < < " aLogicalOR " ; break ;
2016-08-11 18:44:16 +05:00
case FT_Undefined : myStream < < " anUndefined " ; break ;
//default: -- commented to have a compilation warning
2005-12-15 13:34:25 +05:00
}
myStream < < theArg ;
}
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump &
TPythonDump : :
operator < < ( SMESH : : Measurements_i * theArg )
{
myStream < < " aMeasurements " ;
return * this ;
}
2005-12-15 13:34:25 +05:00
TPythonDump & TPythonDump : : operator < < ( SMESH_Gen_i * theArg )
{
myStream < < SMESHGenName ( ) ; return * this ;
}
TPythonDump & TPythonDump : : operator < < ( SMESH_MeshEditor_i * theArg )
{
2006-05-06 14:51:48 +06:00
myStream < < MeshEditorName ( ) < < " _ " < < ( theArg ? theArg - > GetMeshId ( ) : - 1 ) ; return * this ;
2005-12-15 13:34:25 +05:00
}
TPythonDump & TPythonDump : : operator < < ( const TCollection_AsciiString & theStr )
{
myStream < < theStr ; return * this ;
}
TPythonDump & TPythonDump : : operator < < ( const SMESH : : AxisStruct & theAxis )
{
2012-08-09 16:03:55 +06:00
* this < < " SMESH.AxisStruct( "
< < TVar ( theAxis . x ) < < " , "
< < TVar ( theAxis . y ) < < " , "
< < TVar ( theAxis . z ) < < " , "
< < TVar ( theAxis . vx ) < < " , "
< < TVar ( theAxis . vy ) < < " , "
< < TVar ( theAxis . vz ) < < " ) " ;
2005-12-15 13:34:25 +05:00
return * this ;
}
TPythonDump & TPythonDump : : operator < < ( const SMESH : : DirStruct & theDir )
{
const SMESH : : PointStruct & P = theDir . PS ;
2012-08-09 16:03:55 +06:00
* this < < " SMESH.DirStruct( SMESH.PointStruct ( "
< < TVar ( P . x ) < < " , "
< < TVar ( P . y ) < < " , "
< < TVar ( P . z ) < < " )) " ;
2005-06-07 19:22:20 +06:00
return * this ;
}
2006-05-06 14:51:48 +06:00
2012-08-09 16:03:55 +06:00
TPythonDump & TPythonDump : : operator < < ( const SMESH : : PointStruct & P )
{
* this < < " SMESH.PointStruct ( "
< < TVar ( P . x ) < < " , "
< < TVar ( P . y ) < < " , "
< < TVar ( P . z ) < < " ) " ;
return * this ;
}
TPythonDump & TPythonDump : : operator < < ( const SMESH : : ListOfGroups & theList )
{
DumpArray ( theList , * this ) ;
return * this ;
}
TPythonDump & TPythonDump : : operator < < ( const SMESH : : ListOfGroups * theList )
{
DumpArray ( * theList , * this ) ;
return * this ;
}
2014-01-15 15:41:17 +06:00
TPythonDump & TPythonDump : : operator < < ( const GEOM : : ListOfGO & theList )
{
DumpArray ( theList , * this ) ;
return * this ;
}
2014-03-05 19:42:42 +06:00
TPythonDump & TPythonDump : : operator < < ( const GEOM : : ListOfGBO & theList )
{
DumpArray ( theList , * this ) ;
return * this ;
}
2012-08-09 16:03:55 +06:00
TPythonDump & TPythonDump : : operator < < ( const SMESH : : ListOfIDSources & theList )
{
DumpArray ( theList , * this ) ;
2009-02-17 10:27:49 +05:00
return * this ;
}
2018-09-18 00:24:36 +05:00
TPythonDump & TPythonDump : : operator < < ( const SMESH : : submesh_array & theList )
{
DumpArray ( theList , * this ) ;
return * this ;
}
TPythonDump & TPythonDump : : operator < < ( const SMESH : : ListOfHypothesis & theList )
{
DumpArray ( theList , * this ) ;
return * this ;
}
2015-09-18 19:10:34 +05:00
TPythonDump & TPythonDump : : operator < < ( const SMESH : : CoincidentFreeBorders & theCFB )
{
// dump CoincidentFreeBorders as a list of lists, each enclosed list
// contains node IDs of a group of coincident free borders where
// each consequent triple of IDs describe a free border: (n1, n2, nLast)
// For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes
// two groups of coincident free borders, each group including two borders
myStream < < " [ " ;
for ( CORBA : : ULong i = 0 ; i < theCFB . coincidentGroups . length ( ) ; + + i )
{
const SMESH : : FreeBordersGroup & aGRP = theCFB . coincidentGroups [ i ] ;
if ( i ) myStream < < " , " ;
myStream < < " [ " ;
for ( CORBA : : ULong iP = 0 ; iP < aGRP . length ( ) ; + + iP )
{
const SMESH : : FreeBorderPart & aPART = aGRP [ iP ] ;
2015-11-19 16:29:23 +05:00
if ( 0 < = aPART . border & & aPART . border < ( CORBA : : Long ) theCFB . borders . length ( ) )
2015-09-18 19:10:34 +05:00
{
if ( iP ) myStream < < " , " ;
const SMESH : : FreeBorder & aBRD = theCFB . borders [ aPART . border ] ;
myStream < < aBRD . nodeIDs [ aPART . node1 ] < < " , " ;
myStream < < aBRD . nodeIDs [ aPART . node2 ] < < " , " ;
myStream < < aBRD . nodeIDs [ aPART . nodeLast ] ;
}
}
myStream < < " ] " ;
}
myStream < < " ] " ;
return * this ;
}
2013-03-15 20:59:29 +06:00
const char * TPythonDump : : NotPublishedObjectName ( )
{
return theNotPublishedObjectName ;
}
2009-02-17 10:27:49 +05:00
2006-05-06 14:51:48 +06:00
TCollection_AsciiString myLongStringStart ( " TPythonDump::LongStringStart " ) ;
TCollection_AsciiString myLongStringEnd ( " TPythonDump::LongStringEnd " ) ;
//================================================================================
/*!
2012-08-09 16:03:55 +06:00
* \ brief Return marker of long string literal beginning
* \ param type - a name of functionality producing the string literal
* \ retval TCollection_AsciiString - the marker string to be written into
* a raw python script
2006-05-06 14:51:48 +06:00
*/
//================================================================================
TCollection_AsciiString TPythonDump : : LongStringStart ( const char * type )
{
return
myLongStringStart +
( Standard_Integer ) strlen ( type ) +
" " +
( char * ) type ;
}
//================================================================================
/*!
* \ brief Return marker of long string literal end
* \ retval TCollection_AsciiString - the marker string to be written into
* a raw python script
*/
//================================================================================
TCollection_AsciiString TPythonDump : : LongStringEnd ( )
{
return myLongStringEnd ;
}
//================================================================================
/*!
* \ brief Cut out a long string literal from a string
* \ param theText - text possibly containing string literals
* \ param theFrom - position in the text to search from
* \ param theLongString - the retrieved literal
* \ param theStringType - a name of functionality produced the literal
* \ retval bool - true if a string literal found
2012-08-09 16:03:55 +06:00
*
2006-05-06 14:51:48 +06:00
* The literal is removed from theText ; theFrom points position right after
* the removed literal
*/
//================================================================================
bool TPythonDump : : CutoutLongString ( TCollection_AsciiString & theText ,
int & theFrom ,
TCollection_AsciiString & theLongString ,
TCollection_AsciiString & theStringType )
{
if ( theFrom < 1 | | theFrom > theText . Length ( ) )
return false ;
// ...script \ beg marker \ \ type \ literal \ end marker \ script...
// "theText myLongStringStart7 Pattern!!! SALOME Mesh Pattern file myLongStringEndtextEnd"
// 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
// 0 1 2 3 4 5 6 7 8
theFrom = theText . Location ( myLongStringStart , theFrom , theText . Length ( ) ) ; // = 09
if ( ! theFrom )
return false ;
// find where literal begins
int literalBeg = theFrom + myLongStringStart . Length ( ) ; // = 26
2009-02-17 10:27:49 +05:00
char * typeLenStr = ( char * ) theText . ToCString ( ) + literalBeg - 1 ; // = "7 Pattern!!! SALO...."
2006-05-06 14:51:48 +06:00
int typeLen = atoi ( typeLenStr ) ; // = 7
while ( * typeLenStr ! = ' ' ) { // look for ' ' after typeLen
literalBeg + + ; // 26 -> 27
typeLenStr + + ;
}
literalBeg + = typeLen + 1 ; // = 35
if ( literalBeg > theText . Length ( ) )
return false ;
// where literal ends (i.e. end marker begins)
int literalEnd = theText . Location ( myLongStringEnd , literalBeg , theText . Length ( ) ) ; // = 64
if ( ! literalEnd )
literalEnd = theText . Length ( ) ;
// literal
theLongString = theText . SubString ( literalBeg , literalEnd - 1 ) ; // "!!! SALOME Mesh Pattern file "
// type
theStringType = theText . SubString ( literalBeg - typeLen , literalBeg - 1 ) ; // "Pattern"
// cut off literal
literalEnd + = myLongStringEnd . Length ( ) ; // = 79
TCollection_AsciiString textEnd = theText . SubString ( literalEnd , theText . Length ( ) ) ; // "textE..."
theText = theText . SubString ( 1 , theFrom - 1 ) + textEnd ;
return true ;
}
2013-09-19 18:34:44 +06:00
void printException ( const char * text )
{
# ifdef _DEBUG_
cout < < " Exception in SMESH_Gen_i::DumpPython(): " < < text < < endl ;
# endif
}
2005-06-07 19:22:20 +06:00
//=======================================================================
2012-08-09 16:03:55 +06:00
//function : RemoveTabulation
2005-06-07 19:22:20 +06:00
//purpose :
//=======================================================================
2018-08-01 20:41:11 +05:00
void RemoveTabulation ( TCollection_AsciiString & theScript )
2012-08-09 16:03:55 +06:00
{
2018-08-01 20:41:11 +05:00
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 ( ) ;
2012-08-09 16:03:55 +06:00
}
}
//=======================================================================
//function : DumpPython
//purpose :
//=======================================================================
2018-08-01 20:41:11 +05:00
Engines : : TMPFile * SMESH_Gen_i : : DumpPython ( CORBA : : Boolean isPublished ,
CORBA : : Boolean isMultiFile ,
2005-06-07 19:22:20 +06:00
CORBA : : Boolean & isValidScript )
{
2019-11-08 18:33:07 +05:00
// localizing
Kernel_Utils : : Localizer loc ;
2017-06-13 15:01:10 +05:00
SALOMEDS : : Study_var aStudy = getStudyServant ( ) ;
2005-06-07 19:22:20 +06:00
if ( CORBA : : is_nil ( aStudy ) )
return new Engines : : TMPFile ( 0 ) ;
2013-02-12 20:37:44 +06:00
CORBA : : String_var compDataType = ComponentDataType ( ) ;
SALOMEDS : : SObject_wrap aSO = aStudy - > FindComponent ( compDataType . in ( ) ) ;
2005-06-07 19:22:20 +06:00
if ( CORBA : : is_nil ( aSO ) )
return new Engines : : TMPFile ( 0 ) ;
// Map study entries to object names
Resource_DataMapOfAsciiStringAsciiString aMap ;
Resource_DataMapOfAsciiStringAsciiString aMapNames ;
2013-02-12 20:37:44 +06:00
SALOMEDS : : ChildIterator_wrap Itr = aStudy - > NewChildIterator ( aSO ) ;
2005-06-07 19:22:20 +06:00
for ( Itr - > InitEx ( true ) ; Itr - > More ( ) ; Itr - > Next ( ) ) {
2013-02-12 20:37:44 +06:00
SALOMEDS : : SObject_wrap aValue = Itr - > Value ( ) ;
2005-06-07 19:22:20 +06:00
CORBA : : String_var anID = aValue - > GetID ( ) ;
CORBA : : String_var aName = aValue - > GetName ( ) ;
TCollection_AsciiString aGUIName ( ( char * ) aName . in ( ) ) ;
2013-09-19 18:34:44 +06:00
TCollection_AsciiString anEntry ( ( char * ) anID . in ( ) ) ;
2005-06-07 19:22:20 +06:00
if ( aGUIName . Length ( ) > 0 ) {
2013-09-19 18:34:44 +06:00
aMapNames . Bind ( anEntry , aGUIName ) ;
aMap . Bind ( anEntry , aGUIName ) ;
2005-06-07 19:22:20 +06:00
}
}
// Get trace of restored study
SALOMEDS : : StudyBuilder_var aStudyBuilder = aStudy - > NewBuilder ( ) ;
2013-02-12 20:37:44 +06:00
SALOMEDS : : GenericAttribute_wrap anAttr =
2005-06-07 19:22:20 +06:00
aStudyBuilder - > FindOrCreateAttribute ( aSO , " AttributePythonObject " ) ;
2013-02-12 20:37:44 +06:00
SALOMEDS : : AttributePythonObject_var pyAttr =
SALOMEDS : : AttributePythonObject : : _narrow ( anAttr ) ;
CORBA : : String_var oldValue = pyAttr - > GetObject ( ) ;
TCollection_AsciiString aSavedTrace ( oldValue . in ( ) ) ;
2005-06-07 19:22:20 +06:00
// Add trace of API methods calls and replace study entries by names
2012-08-09 16:03:55 +06:00
TCollection_AsciiString aScript ;
2017-06-13 15:01:10 +05:00
aScript + = DumpPython_impl ( aMap , aMapNames , isPublished , isMultiFile ,
2012-08-09 16:03:55 +06:00
myIsHistoricalPythonDump , isValidScript , aSavedTrace ) ;
2005-06-07 19:22:20 +06:00
2012-08-09 16:03:55 +06:00
int aLen = aScript . Length ( ) ;
2005-06-07 19:22:20 +06:00
unsigned char * aBuffer = new unsigned char [ aLen + 1 ] ;
strcpy ( ( char * ) aBuffer , aScript . ToCString ( ) ) ;
CORBA : : Octet * anOctetBuf = ( CORBA : : Octet * ) aBuffer ;
2012-08-09 16:03:55 +06:00
Engines : : TMPFile_var aStreamFile = new Engines : : TMPFile ( aLen + 1 , aLen + 1 , anOctetBuf , 1 ) ;
2005-06-07 19:22:20 +06:00
2013-03-15 20:59:29 +06:00
bool hasNotPublishedObjects = aScript . Location ( SMESH : : theNotPublishedObjectName , 1 , aLen ) ;
2005-06-07 19:22:20 +06:00
isValidScript = isValidScript & & ! hasNotPublishedObjects ;
2012-08-09 16:03:55 +06:00
return aStreamFile . _retn ( ) ;
2005-06-07 19:22:20 +06:00
}
//=============================================================================
/*!
* AddToPythonScript
*/
//=============================================================================
2017-06-13 15:01:10 +05:00
void SMESH_Gen_i : : AddToPythonScript ( const TCollection_AsciiString & theString )
2005-06-07 19:22:20 +06:00
{
2017-06-13 15:01:10 +05:00
if ( myPythonScript . IsNull ( ) ) {
myPythonScript = new TColStd_HSequenceOfAsciiString ;
2005-06-07 19:22:20 +06:00
}
2017-06-13 15:01:10 +05:00
myPythonScript - > Append ( theString ) ;
2005-06-07 19:22:20 +06:00
}
//=============================================================================
/*!
* RemoveLastFromPythonScript
*/
//=============================================================================
2017-06-13 15:01:10 +05:00
void SMESH_Gen_i : : RemoveLastFromPythonScript ( )
2005-06-07 19:22:20 +06:00
{
2017-06-13 15:01:10 +05:00
if ( ! myPythonScript . IsNull ( ) ) {
int aLen = myPythonScript - > Length ( ) ;
myPythonScript - > Remove ( aLen ) ;
2005-06-07 19:22:20 +06:00
}
}
//=======================================================================
//function : SavePython
2012-08-09 16:03:55 +06:00
//purpose :
2005-06-07 19:22:20 +06:00
//=======================================================================
2017-06-13 15:01:10 +05:00
void SMESH_Gen_i : : SavePython ( )
2005-06-07 19:22:20 +06:00
{
// Dump trace of API methods calls
2017-06-13 15:01:10 +05:00
TCollection_AsciiString aScript = GetNewPythonLines ( ) ;
2005-06-07 19:22:20 +06:00
// Check contents of PythonObject attribute
2013-02-12 20:37:44 +06:00
CORBA : : String_var compDataType = ComponentDataType ( ) ;
2017-06-13 15:01:10 +05:00
SALOMEDS : : SObject_wrap aSO = getStudyServant ( ) - > FindComponent ( compDataType . in ( ) ) ;
SALOMEDS : : StudyBuilder_var aStudyBuilder = getStudyServant ( ) - > NewBuilder ( ) ;
2013-02-12 20:37:44 +06:00
SALOMEDS : : GenericAttribute_wrap anAttr =
2005-06-07 19:22:20 +06:00
aStudyBuilder - > FindOrCreateAttribute ( aSO , " AttributePythonObject " ) ;
2013-02-12 20:37:44 +06:00
SALOMEDS : : AttributePythonObject_var pyAttr =
SALOMEDS : : AttributePythonObject : : _narrow ( anAttr ) ;
CORBA : : String_var oldValue = pyAttr - > GetObject ( ) ;
TCollection_AsciiString oldScript ( oldValue . in ( ) ) ;
2005-06-07 19:22:20 +06:00
if ( oldScript . Length ( ) > 0 ) {
oldScript + = " \n " ;
oldScript + = aScript ;
} else {
oldScript = aScript ;
}
// Store in PythonObject attribute
2013-02-12 20:37:44 +06:00
pyAttr - > SetObject ( oldScript . ToCString ( ) , 1 ) ;
2005-06-07 19:22:20 +06:00
// Clean trace of API methods calls
2017-06-13 15:01:10 +05:00
CleanPythonTrace ( ) ;
2005-06-07 19:22:20 +06:00
}
// impl
//=============================================================================
/*!
* FindEntries : Returns a sequence of start / end positions of entries in the string
*/
//=============================================================================
Handle ( TColStd_HSequenceOfInteger ) FindEntries ( TCollection_AsciiString & theString )
{
Handle ( TColStd_HSequenceOfInteger ) aSeq = new TColStd_HSequenceOfInteger ;
Standard_Integer aLen = theString . Length ( ) ;
Standard_Boolean isFound = Standard_False ;
2009-02-17 10:27:49 +05:00
char * arr = ( char * ) theString . ToCString ( ) ;
2005-06-07 19:22:20 +06:00
Standard_Integer i = 0 , j ;
while ( i < aLen ) {
int c = ( int ) arr [ i ] ;
j = i + 1 ;
2005-12-15 13:34:25 +05:00
if ( isdigit ( c ) ) { //Is digit?
2012-08-09 16:03:55 +06:00
2005-06-07 19:22:20 +06:00
isFound = Standard_False ;
2005-12-15 13:34:25 +05:00
while ( ( j < aLen ) & & ( isdigit ( c ) | | c = = ' : ' ) ) { //Check if it is an entry
2012-08-09 16:03:55 +06:00
c = ( int ) arr [ j + + ] ;
if ( c = = ' : ' ) isFound = Standard_True ;
2005-06-07 19:22:20 +06:00
}
if ( isFound ) {
int prev = ( i < 1 ) ? 0 : ( int ) arr [ i - 1 ] ;
2005-12-15 13:34:25 +05:00
// to distinguish from a sketcher command:
// last char should be a digit, not ":",
2005-06-07 19:22:20 +06:00
// previous char should not be '"'.
2005-12-15 13:34:25 +05:00
if ( arr [ j - 2 ] ! = ' : ' & & prev ! = ' " ' ) {
2005-06-07 19:22:20 +06:00
aSeq - > Append ( i + 1 ) ; // +1 because AsciiString starts from 1
aSeq - > Append ( j - 1 ) ;
}
}
}
i = j ;
}
return aSeq ;
}
2006-05-06 14:51:48 +06:00
namespace {
//================================================================================
/*!
* \ brief Make a string be a valid python name
* \ param aName - a string to fix
* \ retval bool - true if aName was not modified
*/
//================================================================================
2013-09-19 18:34:44 +06:00
bool fixPythonName ( TCollection_AsciiString & aName )
2006-05-06 14:51:48 +06:00
{
bool isValidName = true ;
2012-08-09 16:03:55 +06:00
int nbUnderscore = 0 ;
2013-09-19 18:34:44 +06:00
int p ;
2018-07-27 20:44:09 +05:00
// replace not allowed chars by underscore
const char * name = aName . ToCString ( ) ;
for ( p = 0 ; name [ p ] ; + + p ) {
if ( ! isalnum ( name [ p ] ) & & name [ p ] ! = ' _ ' )
{
if ( p = = 0 | | p + 1 = = aName . Length ( ) | | name [ p - 1 ] = = ' _ ' )
{
aName . Remove ( p + 1 , 1 ) ; // remove __ and _ from the start and the end
- - p ;
name = aName . ToCString ( ) ;
}
else
{
aName . SetValue ( p + 1 , ' _ ' ) ;
nbUnderscore + + ;
}
isValidName = false ;
}
}
2013-09-19 18:34:44 +06:00
// aName must not start with a digit
if ( aName . IsIntegerValue ( ) ) {
2006-05-06 14:51:48 +06:00
aName . Insert ( 1 , ' a ' ) ;
isValidName = false ;
}
2012-08-09 16:03:55 +06:00
// shorten names like CartesianParameters3D_400_400_400_1000000_1
2013-02-12 20:37:44 +06:00
const int nbAllowedUnderscore = 3 ; /* changed from 2 to 3 by an user request
posted to SALOME Forum */
if ( aName . Length ( ) > 20 & & nbUnderscore > nbAllowedUnderscore )
2012-08-09 16:03:55 +06:00
{
p = aName . Location ( " _ " , 20 , aName . Length ( ) ) ;
if ( p > 1 )
aName . Trunc ( p - 1 ) ;
}
2006-05-06 14:51:48 +06:00
return isValidName ;
}
2013-08-07 17:10:47 +06:00
//================================================================================
/*!
* \ brief Return Python module names of available plug - ins .
*/
//================================================================================
std : : vector < std : : string > getPluginNames ( )
{
std : : vector < std : : string > pluginNames ;
std : : vector < std : : string > xmlPaths = SMESH_Gen : : GetPluginXMLPaths ( ) ;
LDOMParser xmlParser ;
for ( size_t i = 0 ; i < xmlPaths . size ( ) ; + + i )
{
bool error = xmlParser . parse ( xmlPaths [ i ] . c_str ( ) ) ;
if ( error )
{
TCollection_AsciiString data ;
INFOS ( xmlParser . GetError ( data ) ) ;
continue ;
}
// <meshers-group name="Standard Meshers"
// resources="StdMeshers"
// idl-module="StdMeshers"
// server-lib="StdMeshersEngine"
// gui-lib="StdMeshersGUI">
LDOM_Document xmlDoc = xmlParser . getDocument ( ) ;
LDOM_NodeList nodeList = xmlDoc . getElementsByTagName ( " meshers-group " ) ;
for ( int i = 0 ; i < nodeList . getLength ( ) ; + + i )
{
LDOM_Node node = nodeList . item ( i ) ;
LDOM_Element & elem = ( LDOM_Element & ) node ;
LDOMString idlModule = elem . getAttribute ( " idl-module " ) ;
if ( strlen ( idlModule . GetString ( ) ) > 0 )
pluginNames . push_back ( idlModule . GetString ( ) ) ;
}
}
return pluginNames ;
}
2006-05-06 14:51:48 +06:00
}
2013-09-19 18:34:44 +06:00
//================================================================================
2005-06-07 19:22:20 +06:00
/*!
2019-08-27 16:48:19 +05:00
* \ brief Creates a Dump Python script
2013-09-19 18:34:44 +06:00
* \ param [ in , out ] theObjectNames - map of an entry to a study and python name
* \ param [ in ] theNames - - map of an entry to a study name
* \ param [ in ] isPublished - \ c true if dump of object publication in study is needed
* \ param [ in ] isMultiFile - \ c true if dump of each module goes to a separate file
* \ param [ in ] isHistoricalDump - \ c true if removed object should be dumped
* \ param [ out ] aValidScript - returns \ c true if the returned script seems valid
* \ param [ in , out ] theSavedTrace - the dump stored in the study . It ' s cleared to
* decrease memory usage .
* \ return TCollection_AsciiString - the result dump script .
2005-06-07 19:22:20 +06:00
*/
2013-09-19 18:34:44 +06:00
//================================================================================
2005-06-07 19:22:20 +06:00
TCollection_AsciiString SMESH_Gen_i : : DumpPython_impl
2017-06-13 15:01:10 +05:00
( Resource_DataMapOfAsciiStringAsciiString & theObjectNames ,
2005-06-07 19:22:20 +06:00
Resource_DataMapOfAsciiStringAsciiString & theNames ,
2013-02-12 20:37:44 +06:00
bool isPublished ,
bool isMultiFile ,
bool isHistoricalDump ,
bool & aValidScript ,
2013-09-19 18:34:44 +06:00
TCollection_AsciiString & theSavedTrace )
2005-06-07 19:22:20 +06:00
{
2013-09-19 18:34:44 +06:00
SMESH_TRY ;
const TCollection_AsciiString aSmeshpy ( SMESH_2smeshpy : : SmeshpyName ( ) ) ;
const TCollection_AsciiString aSMESHGen ( SMESH_2smeshpy : : GenName ( ) ) ;
const TCollection_AsciiString anOldGen ( SMESH : : TPythonDump : : SMESHGenName ( ) ) ;
const TCollection_AsciiString helper ; // to comfortably append C strings to TCollection_AsciiString
const TCollection_AsciiString tab ( isMultiFile ? " \t " : " " ) , nt = helper + " \n " + tab ;
2019-02-12 19:09:03 +05:00
TCollection_AsciiString optionalComment ;
2013-09-19 18:34:44 +06:00
std : : list < TCollection_AsciiString > lines ; // lines of a script
std : : list < TCollection_AsciiString > : : iterator linesIt ;
2018-08-01 20:41:11 +05:00
lines . push_back ( aSMESHGen + " = smeshBuilder.New() " ) ;
2019-02-12 19:09:03 +05:00
if ( isPublished )
2019-03-28 20:22:44 +05:00
optionalComment = " # " ;
2019-02-12 19:09:03 +05:00
lines . push_back ( optionalComment + aSMESHGen + " .SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations: " ) ;
2019-03-28 20:22:44 +05:00
lines . push_back ( " # multiples meshes built in parallel, complex and numerous mesh edition (performance) \n " ) ;
2013-10-09 22:25:36 +06:00
lines . push_back ( helper + " aFilterManager = " + aSMESHGen + " .CreateFilterManager() " ) ;
lines . push_back ( helper + " aMeasurements = " + aSMESHGen + " .CreateMeasurements() " ) ;
2013-09-19 18:34:44 +06:00
// Treat dump trace of restored study
if ( theSavedTrace . Length ( ) > 0 )
{
linesIt = - - lines . end ( ) ;
// Split theSavedTrace into lines
int from = 1 , end = theSavedTrace . Length ( ) , to ;
while ( from < end & & ( to = theSavedTrace . Location ( " \n " , from , end ) ) )
{
if ( theSavedTrace . ToCString ( ) [ from - 1 ] = = ' \t ' )
+ + from ;
if ( to ! = from )
lines . push_back ( theSavedTrace . SubString ( from , to - 1 ) ) ;
from = to + 1 ;
}
2017-03-02 21:51:35 +05:00
// For the conversion of IDL API calls -> smeshBuilder.py API, "smesh" standing for SMESH_Gen
2005-12-15 13:34:25 +05:00
// was replaces with "smeshgen" (==TPythonDump::SMESHGenName()).
2013-04-04 13:08:19 +06:00
// Change "smesh" -> "smeshgen" in the trace saved before passage to smeshBuilder.py API
2005-12-15 13:34:25 +05:00
bool isNewVersion =
theSavedTrace . Location ( anOldGen + " . " , 1 , theSavedTrace . Length ( ) ) ;
2013-09-19 18:34:44 +06:00
theSavedTrace . Clear ( ) ;
if ( ! isNewVersion )
{
const TCollection_AsciiString aSmeshCall ( " smesh. " ) , gen ( " gen " ) ;
int beg , end , from ;
for ( + + linesIt ; linesIt ! = lines . end ( ) ; + + linesIt )
{
TCollection_AsciiString & aSavedLine = * linesIt ;
end = aSavedLine . Length ( ) , from = 1 ;
while ( from < end & & ( beg = aSavedLine . Location ( aSmeshCall , from , end ) ) )
{
char charBefore = ( beg = = 1 ) ? ' ' : aSavedLine . Value ( beg - 1 ) ;
if ( isspace ( charBefore ) | | charBefore = = ' = ' ) { // "smesh." is not a part of a long word
aSavedLine . Insert ( beg + aSmeshCall . Length ( ) - 1 , gen ) ; // "smesh" -> "smeshgen"
end + = gen . Length ( ) ;
}
from = beg + aSmeshCall . Length ( ) ;
2005-12-15 13:34:25 +05:00
}
}
}
2005-06-07 19:22:20 +06:00
}
2013-09-19 18:34:44 +06:00
// Add new dump trace of API methods calls to script lines
2017-06-13 15:01:10 +05:00
if ( ! myPythonScript . IsNull ( ) )
2013-08-07 17:10:47 +06:00
{
2017-06-13 15:01:10 +05:00
Handle ( TColStd_HSequenceOfAsciiString ) aPythonScript = myPythonScript ;
2013-09-19 18:34:44 +06:00
Standard_Integer istr , aLen = aPythonScript - > Length ( ) ;
for ( istr = 1 ; istr < = aLen ; istr + + )
lines . push_back ( aPythonScript - > Value ( istr ) ) ;
2013-08-07 17:10:47 +06:00
}
2013-04-04 13:08:19 +06:00
// Convert IDL API calls into smeshBuilder.py API.
2005-12-15 13:34:25 +05:00
// Some objects are wrapped with python classes and
// Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod ;
2013-03-15 20:59:29 +06:00
std : : set < TCollection_AsciiString > aRemovedObjIDs ;
2012-08-09 16:03:55 +06:00
if ( ! getenv ( " NO_2smeshpy_conversion " ) )
2013-09-19 18:34:44 +06:00
SMESH_2smeshpy : : ConvertScript ( lines , anEntry2AccessorMethod ,
2013-09-12 17:11:52 +06:00
theObjectNames , aRemovedObjIDs ,
2017-06-13 15:01:10 +05:00
isHistoricalDump ) ;
2012-08-09 16:03:55 +06:00
2013-09-19 18:34:44 +06:00
bool importGeom = false ;
GEOM : : GEOM_Gen_ptr geom = GetGeomEngine ( ) ;
2012-08-09 16:03:55 +06:00
{
2013-09-19 18:34:44 +06:00
// Add names of GEOM objects to theObjectNames to exclude same names of SMESH objects
GEOM : : string_array_var aGeomNames = geom - > GetAllDumpNames ( ) ;
int ign = 0 , nbgn = aGeomNames - > length ( ) ;
for ( ; ign < nbgn ; ign + + ) {
TCollection_AsciiString aName = aGeomNames [ ign ] . in ( ) ;
theObjectNames . Bind ( aName , " 1 " ) ;
}
2012-08-09 16:03:55 +06:00
}
2005-12-15 13:34:25 +05:00
2013-09-19 18:34:44 +06:00
TCollection_AsciiString anUpdatedScript ;
2005-06-07 19:22:20 +06:00
Resource_DataMapOfAsciiStringAsciiString mapRemoved ;
2013-09-19 18:34:44 +06:00
Resource_DataMapOfAsciiStringAsciiString mapEntries ; // names and entries present in anUpdatedScript
Standard_Integer objectCounter = 0 ;
TCollection_AsciiString anEntry , aName , aGUIName , aBaseName ( " smeshObj_ " ) ;
2005-06-07 19:22:20 +06:00
2013-09-19 18:34:44 +06:00
// Treat every script line and add it to anUpdatedScript
for ( linesIt = lines . begin ( ) ; linesIt ! = lines . end ( ) ; + + linesIt )
{
TCollection_AsciiString & aLine = * linesIt ;
anUpdatedScript + = tab ;
{
//Replace characters used instead of quote marks to quote notebook variables
int pos = 1 ;
while ( ( pos = aLine . Location ( 1 , SMESH : : TVar : : Quote ( ) , pos , aLine . Length ( ) ) ) )
aLine . SetValue ( pos , ' " ' ) ;
}
// Find entries to be replaced by names
Handle ( TColStd_HSequenceOfInteger ) aSeq = FindEntries ( aLine ) ;
const Standard_Integer aSeqLen = aSeq - > Length ( ) ;
Standard_Integer aStart = 1 ;
for ( Standard_Integer i = 1 ; i < = aSeqLen ; i + = 2 )
{
if ( aStart < aSeq - > Value ( i ) )
anUpdatedScript + = aLine . SubString ( aStart , aSeq - > Value ( i ) - 1 ) ; // line part before i-th entry
anEntry = aLine . SubString ( aSeq - > Value ( i ) , aSeq - > Value ( i + 1 ) ) ;
// is a GEOM object?
CORBA : : String_var geomName = geom - > GetDumpName ( anEntry . ToCString ( ) ) ;
2013-09-20 21:35:08 +06:00
if ( ! geomName . in ( ) | | ! geomName . in ( ) [ 0 ] ) {
2013-09-19 18:34:44 +06:00
// is a SMESH object
if ( theObjectNames . IsBound ( anEntry ) ) {
// The Object is in Study
aName = theObjectNames . Find ( anEntry ) ;
// check validity of aName
bool isValidName = fixPythonName ( aName ) ;
if ( theObjectNames . IsBound ( aName ) & & anEntry ! = theObjectNames ( aName ) ) {
// diff objects have same name - make a new name by appending a digit
TCollection_AsciiString aName2 ;
Standard_Integer i = 0 ;
do {
aName2 = aName + " _ " + + + i ;
} while ( theObjectNames . IsBound ( aName2 ) & & anEntry ! = theObjectNames ( aName2 ) ) ;
aName = aName2 ;
isValidName = false ;
}
if ( ! isValidName )
theObjectNames ( anEntry ) = aName ;
if ( aLine . Value ( 1 ) ! = ' # ' )
mapEntries . Bind ( anEntry , aName ) ;
}
else
{
// Removed Object
2005-06-07 19:22:20 +06:00
do {
2013-09-19 18:34:44 +06:00
aName = aBaseName + ( + + objectCounter ) ;
} while ( theObjectNames . IsBound ( aName ) ) ;
if ( ! aRemovedObjIDs . count ( anEntry ) & & aLine . Value ( 1 ) ! = ' # ' )
mapRemoved . Bind ( anEntry , aName ) ;
theObjectNames . Bind ( anEntry , aName ) ;
2005-06-07 19:22:20 +06:00
}
2013-09-19 18:34:44 +06:00
theObjectNames . Bind ( aName , anEntry ) ; // to detect same name of diff objects
2005-06-07 19:22:20 +06:00
}
2013-09-19 18:34:44 +06:00
else
{
aName = geomName . in ( ) ;
importGeom = true ;
}
anUpdatedScript + = aName ;
aStart = aSeq - > Value ( i + 1 ) + 1 ;
} // loop on entries within aLine
if ( aSeqLen = = 0 )
anUpdatedScript + = aLine ;
else if ( aSeq - > Value ( aSeqLen ) < aLine . Length ( ) )
anUpdatedScript + = aLine . SubString ( aSeq - > Value ( aSeqLen ) + 1 , aLine . Length ( ) ) ;
anUpdatedScript + = ' \n ' ;
2005-06-07 19:22:20 +06:00
}
2013-09-19 18:34:44 +06:00
// Make an initial part of aSript
2012-08-09 16:03:55 +06:00
TCollection_AsciiString initPart = " import " ;
if ( isMultiFile )
2013-09-19 18:34:44 +06:00
initPart + = " salome, " ;
2013-04-04 13:08:19 +06:00
initPart + = " SMESH, SALOMEDS \n " ;
initPart + = " from salome.smesh import smeshBuilder \n " ;
2012-08-09 16:03:55 +06:00
if ( importGeom & & isMultiFile )
2005-06-07 19:22:20 +06:00
{
2012-08-09 16:03:55 +06:00
initPart + = ( " \n ## import GEOM dump file ## \n "
2015-12-01 18:28:08 +05:00
" import string, os, sys, re, inspect \n "
" thisFile = inspect.getfile( inspect.currentframe() ) \n "
" thisModule = os.path.splitext( os.path.basename( thisFile ))[0] \n "
" sys.path.insert( 0, os.path.dirname( thisFile )) \n "
" exec( \" from \" +re.sub( \" SMESH$ \" , \" GEOM \" ,thisModule)+ \" import * \" ) \n \n " ) ;
2005-06-07 19:22:20 +06:00
}
2013-09-19 18:34:44 +06:00
// import python files corresponding to plugins if they are used in anUpdatedScript
{
2018-07-17 18:21:24 +05:00
//TCollection_AsciiString importStr;
2013-09-19 18:34:44 +06:00
std : : vector < std : : string > pluginNames = getPluginNames ( ) ;
for ( size_t i = 0 ; i < pluginNames . size ( ) ; + + i )
{
// Convert access to plugin members:
2018-07-17 18:21:24 +05:00
// e.g. StdMeshers.QUAD_REDUCED -> smeshBuilder.QUAD_REDUCED
2013-09-19 18:34:44 +06:00
TCollection_AsciiString pluginAccess = ( pluginNames [ i ] + " . " ) . c_str ( ) ;
int iFrom = 1 , iPos ;
while ( ( iPos = anUpdatedScript . Location ( pluginAccess , iFrom , anUpdatedScript . Length ( ) ) ) )
{
2018-07-17 18:21:24 +05:00
//anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
anUpdatedScript . Remove ( iPos , pluginNames [ i ] . size ( ) ) ;
anUpdatedScript . Insert ( iPos , " smeshBuilder " ) ;
iFrom = iPos - pluginNames [ i ] . size ( ) + 12 ;
2013-09-19 18:34:44 +06:00
}
// if any plugin member is used, import the plugin
2018-07-17 18:21:24 +05:00
// if ( iFrom > 1 )
// importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
// " import " + pluginNames[i].c_str() +"Builder" );
2013-09-19 18:34:44 +06:00
}
2018-07-17 18:21:24 +05:00
// if ( !importStr.IsEmpty() )
// initPart += importStr + "\n";
2005-12-15 13:34:25 +05:00
}
2013-09-19 18:34:44 +06:00
2015-12-01 18:28:08 +05:00
if ( isMultiFile )
2017-06-13 15:01:10 +05:00
initPart + = " def RebuildData(): " ;
2013-09-19 18:34:44 +06:00
initPart + = " \n " ;
anUpdatedScript . Prepend ( initPart ) ;
// Make a final part of aScript
// Dump object removal
TCollection_AsciiString removeObjPart ;
if ( ! mapRemoved . IsEmpty ( ) ) {
removeObjPart + = nt + " ## some objects were removed " ;
2017-06-13 15:01:10 +05:00
removeObjPart + = nt + " aStudyBuilder = salome.myStudy.NewBuilder() " ;
2013-09-19 18:34:44 +06:00
Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapRemovedIt ;
for ( mapRemovedIt . Initialize ( mapRemoved ) ; mapRemovedIt . More ( ) ; mapRemovedIt . Next ( ) ) {
aName = mapRemovedIt . Value ( ) ; // python name
anEntry = mapRemovedIt . Key ( ) ;
2017-06-13 15:01:10 +05:00
removeObjPart + = nt + " SO = salome.myStudy.FindObjectIOR(salome.myStudy.ConvertObjectToIOR( " ;
2013-09-19 18:34:44 +06:00
removeObjPart + = aName ;
// for object wrapped by class of smeshBuilder.py
if ( anEntry2AccessorMethod . IsBound ( anEntry ) )
removeObjPart + = helper + " . " + anEntry2AccessorMethod ( anEntry ) ;
removeObjPart + = helper + " )) " + nt + " if SO: aStudyBuilder.RemoveObjectWithChildren(SO) " ;
}
2005-06-07 19:22:20 +06:00
}
// Set object names
2013-09-19 18:34:44 +06:00
TCollection_AsciiString setNamePart ;
Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapEntriesIt ;
for ( mapEntriesIt . Initialize ( mapEntries ) ; mapEntriesIt . More ( ) ; mapEntriesIt . Next ( ) )
2005-12-15 13:34:25 +05:00
{
2013-09-19 18:34:44 +06:00
anEntry = mapEntriesIt . Key ( ) ;
aName = mapEntriesIt . Value ( ) ; // python name
if ( theNames . IsBound ( anEntry ) )
2005-12-15 13:34:25 +05:00
{
2005-06-07 19:22:20 +06:00
aGUIName = theNames . Find ( anEntry ) ;
2014-07-17 16:11:52 +06:00
aGUIName . RemoveAll ( ' \' ' ) ; // remove a quote from a name (issue 22360)
2013-09-19 18:34:44 +06:00
setNamePart + = nt + aSMESHGen + " .SetName( " + aName ;
2005-12-15 13:34:25 +05:00
if ( anEntry2AccessorMethod . IsBound ( anEntry ) )
2013-09-19 18:34:44 +06:00
setNamePart + = helper + " . " + anEntry2AccessorMethod ( anEntry ) ;
setNamePart + = helper + " , ' " + aGUIName + " ') " ;
2005-06-07 19:22:20 +06:00
}
}
2013-09-19 18:34:44 +06:00
if ( ! setNamePart . IsEmpty ( ) )
2013-07-02 18:02:33 +06:00
{
2013-09-19 18:34:44 +06:00
setNamePart . Insert ( 1 , nt + " ## Set names of Mesh objects " ) ;
2013-07-02 18:02:33 +06:00
}
2009-02-17 10:27:49 +05:00
2013-09-19 18:34:44 +06:00
// Store visual properties of displayed objects
2005-06-07 19:22:20 +06:00
2013-09-19 18:34:44 +06:00
TCollection_AsciiString visualPropertiesPart ;
2009-02-17 10:27:49 +05:00
if ( isPublished )
{
//Output the script that sets up the visual parameters.
2013-02-12 20:37:44 +06:00
CORBA : : String_var compDataType = ComponentDataType ( ) ;
2017-06-13 15:01:10 +05:00
CORBA : : String_var script = getStudyServant ( ) - > GetDefaultScript ( compDataType . in ( ) , tab . ToCString ( ) ) ;
2013-09-20 21:35:08 +06:00
if ( script . in ( ) & & script . in ( ) [ 0 ] ) {
2013-09-19 18:34:44 +06:00
visualPropertiesPart + = nt + " ### Store presentation parameters of displayed objects \n " ;
visualPropertiesPart + = script . in ( ) ;
2009-02-17 10:27:49 +05:00
}
}
2012-08-09 16:03:55 +06:00
2013-09-19 18:34:44 +06:00
anUpdatedScript + = removeObjPart + ' \n ' + setNamePart + ' \n ' + visualPropertiesPart ;
2015-12-01 18:28:08 +05:00
if ( isMultiFile )
{
anUpdatedScript + =
" \n \t pass "
" \n "
" \n if __name__ == '__main__': "
" \n \t SMESH_RebuildData = RebuildData "
" \n \t exec('import '+re.sub('SMESH$','GEOM',thisModule)+' as GEOM_dump') "
2017-06-13 15:01:10 +05:00
" \n \t GEOM_dump.RebuildData() "
2015-12-01 18:28:08 +05:00
" \n \t exec('from '+re.sub('SMESH$','GEOM',thisModule)+' import * ') "
2017-06-13 15:01:10 +05:00
" \n \t SMESH_RebuildData() " ;
2015-12-01 18:28:08 +05:00
}
2012-08-09 16:03:55 +06:00
anUpdatedScript + = " \n " ;
2013-09-19 18:34:44 +06:00
// no need now as we use 'tab' and 'nt' variables depending on isMultiFile
// if( !isMultiFile ) // remove unnecessary tabulation
// RemoveTabulation( anUpdatedScript );
2005-06-07 19:22:20 +06:00
2006-05-06 14:51:48 +06:00
// -----------------------------------------------------------------
// put string literals describing patterns into separate functions
// -----------------------------------------------------------------
TCollection_AsciiString aLongString , aFunctionType ;
int where = 1 ;
2016-02-15 17:08:20 +05:00
std : : set < std : : string > functionNameSet ;
2006-05-06 14:51:48 +06:00
while ( SMESH : : TPythonDump : : CutoutLongString ( anUpdatedScript , where , aLongString , aFunctionType ) )
{
// make a python string literal
aLongString . Prepend ( " : \n \t return ''' \n " ) ;
aLongString + = " \n \t ''' \n \t pass \n " ;
TCollection_AsciiString functionName ;
// check if the function returning this literal is already defined
int posAlready = anUpdatedScript . Location ( aLongString , where , anUpdatedScript . Length ( ) ) ;
if ( posAlready ) // already defined
{
// find the function name
int functBeg = posAlready ;
2017-12-28 16:28:17 +05:00
char * script = ( char * ) anUpdatedScript . ToCString ( ) + posAlready - 1 ; // look at ":" after "def function()"
2006-05-06 14:51:48 +06:00
while ( * script ! = ' ' ) {
script - - ;
functBeg - - ;
}
functBeg + + ; // do not take ' '
posAlready - - ; // do not take ':'
functionName = anUpdatedScript . SubString ( functBeg , posAlready ) ;
}
else // not defined yet
{
// find a unique function name
fixPythonName ( aFunctionType ) ;
Standard_Integer nb = 0 ;
do functionName = aFunctionType + " _ " + ( nb + + ) + " () " ;
while ( ! functionNameSet . insert ( functionName . ToCString ( ) ) . second ) ;
2012-08-09 16:03:55 +06:00
// 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 ( ) ;
}
2006-05-06 14:51:48 +06:00
}
anUpdatedScript . InsertBefore ( where , functionName ) ; // call function
}
2005-06-07 19:22:20 +06:00
aValidScript = true ;
return anUpdatedScript ;
2013-09-19 18:34:44 +06:00
SMESH_CATCH ( SMESH : : printException ) ;
aValidScript = false ;
return " " ;
2005-06-07 19:22:20 +06:00
}
//=============================================================================
/*!
* GetNewPythonLines
*/
//=============================================================================
2017-06-13 15:01:10 +05:00
TCollection_AsciiString SMESH_Gen_i : : GetNewPythonLines ( )
2005-06-07 19:22:20 +06:00
{
TCollection_AsciiString aScript ;
// Dump trace of API methods calls
2017-06-13 15:01:10 +05:00
if ( ! myPythonScript . IsNull ( ) ) {
Handle ( TColStd_HSequenceOfAsciiString ) aPythonScript = myPythonScript ;
2005-06-07 19:22:20 +06:00
Standard_Integer istr , aLen = aPythonScript - > Length ( ) ;
for ( istr = 1 ; istr < = aLen ; istr + + ) {
2013-09-19 18:34:44 +06:00
aScript + = " \n " ;
2005-06-07 19:22:20 +06:00
aScript + = aPythonScript - > Value ( istr ) ;
}
aScript + = " \n " ;
}
return aScript ;
}
//=============================================================================
/*!
* CleanPythonTrace
*/
//=============================================================================
2017-06-13 15:01:10 +05:00
void SMESH_Gen_i : : CleanPythonTrace ( )
2005-06-07 19:22:20 +06:00
{
TCollection_AsciiString aScript ;
// Clean trace of API methods calls
2017-06-13 15:01:10 +05:00
if ( ! myPythonScript . IsNull ( ) ) {
myPythonScript - > Clear ( ) ;
2005-06-07 19:22:20 +06:00
}
}