From: rnv Date: Wed, 17 Sep 2008 10:31:27 +0000 (+0000) Subject: Fix for issue 19964 EDF SMESH 803( Bad dump script of revolutionned mesh with groups). X-Git-Tag: V5_1_0a1~3 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=6eb4c261736600c952fd2f73b4d87d5ef11f522d;p=modules%2Fsmesh.git Fix for issue 19964 EDF SMESH 803( Bad dump script of revolutionned mesh with groups). --- diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc index 342968ff7..bc7b78c89 100644 --- a/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc +++ b/doc/salome/gui/SMESH/input/tui_modifying_meshes.doc @@ -742,6 +742,7 @@ salome.sg.updateObjBrowser(1) \code import math +import SMESH import SMESH_mechanic @@ -750,7 +751,7 @@ smesh = SMESH_mechanic.smesh # create a group of faces to be revolved FacesRotate = [492, 493, 502, 503] -GroupRotate = mesh.CreateGroup(SMESH.FACE,"Group of faces (rotate)") +GroupRotate = mesh.CreateEmptyGroup(SMESH.FACE,"Group of faces (rotate)") GroupRotate.Add(FacesRotate) # define revolution angle and axis diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index 96724a917..cfa660a2c 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -893,6 +893,18 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand) sameMethods.Insert( names ); } + // names of SMESH_MeshEditor methods which differ from methods of class Mesh + // only last two arguments + static TStringSet diffLastTwoArgsMethods; + if (diffLastTwoArgsMethods.empty() ){ + const char * names[] = { + "MirrorMakeGroups","MirrorObjectMakeGroups", + "TranslateMakeGroups","TranslateObjectMakeGroups", + "RotateMakeGroups","RotateObjectMakeGroups", + ""};// <- mark of the end + diffLastTwoArgsMethods.Insert( names ); + } + if ( sameMethods.Contains( theCommand->GetMethod() )) { theCommand->SetObject( myMesh ); @@ -902,11 +914,32 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand) _pyMesh( new _pyCommand( theCommand->GetString(), 0 )); // for theGen->SetAccessorMethod() } else { - // editor creation command is needed only if any editor function is called - theGen->AddMeshAccessorMethod( theCommand ); // for *Object() - if ( !myCreationCmdStr.IsEmpty() ) { - GetCreationCmd()->GetString() = myCreationCmdStr; - myCreationCmdStr.Clear(); + + //Replace SMESH_MeshEditor "MakeGroups" functions on the Mesh + //functions with the flag "theMakeGroups = True" like: + //SMESH_MeshEditor.CmdMakeGroups => Mesh.Cmd(...,True) + int pos = theCommand->GetMethod().Search("MakeGroups"); + if( pos != -1) { + // 1. Remove "MakeGroups" from the Command + TCollection_AsciiString aMethod = theCommand->GetMethod(); + int nbArgsToAdd = diffLastTwoArgsMethods.Contains(aMethod) ? 2 : 1; + aMethod.Trunc(pos-1); + theCommand->SetMethod(aMethod); + + // 2. Set Mesh object instead SMESH_MeshEditor + theCommand->SetObject( myMesh ); + + // 3. And add last "True" argument + while(nbArgsToAdd--) + theCommand->SetArg(theCommand->GetNbArgs()+1,"True "); + } + else { + // editor creation command is needed only if any editor function is called + theGen->AddMeshAccessorMethod( theCommand ); // for *Object() + if ( !myCreationCmdStr.IsEmpty() ) { + GetCreationCmd()->GetString() = myCreationCmdStr; + myCreationCmdStr.Clear(); + } } } } diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx index 4a6f60417..d08e923e0 100644 --- a/src/SMESH_I/SMESH_DumpPython.cxx +++ b/src/SMESH_I/SMESH_DumpPython.cxx @@ -296,6 +296,24 @@ namespace SMESH return *this; } + TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList){ + if(theList && theList->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" ); diff --git a/src/SMESH_I/SMESH_MeshEditor_i.cxx b/src/SMESH_I/SMESH_MeshEditor_i.cxx index 064955be5..8e3093c91 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.cxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.cxx @@ -1429,21 +1429,24 @@ SMESH_MeshEditor_i::RotationSweepMakeGroups(const SMESH::long_array& theIDsOfEle CORBA::Long theNbOfSteps, CORBA::Double theTolerance) { + SMESH::ListOfGroups *aGroups = rotationSweep(theIDsOfElements, + theAxis, + theAngleInRadians, + theNbOfSteps, + theTolerance, + true); if ( !myPreviewMode ) { - TPythonDump() << "axis = " << theAxis; - TPythonDump() << this << ".RotationSweepMakeGroups( " - << theIDsOfElements - << ", axis, " - << theAngleInRadians << ", " - << theNbOfSteps << ", " - << theTolerance << " )"; + TPythonDump()<< "axis = " << theAxis; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump<< this << ".RotationSweepMakeGroups( " + << theIDsOfElements + << ", axis, " + << theAngleInRadians << ", " + << theNbOfSteps << ", " + << theTolerance << " )"; } - return rotationSweep(theIDsOfElements, - theAxis, - theAngleInRadians, - theNbOfSteps, - theTolerance, - true); + return aGroups; } //======================================================================= @@ -1487,22 +1490,25 @@ SMESH_MeshEditor_i::RotationSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr theO CORBA::Long theNbOfSteps, CORBA::Double theTolerance) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups *aGroups = rotationSweep(anElementsId, + theAxis, + theAngleInRadians, + theNbOfSteps, + theTolerance, + true); if ( !myPreviewMode ) { TPythonDump() << "axis = " << theAxis; - TPythonDump() << this << ".RotationSweepObjectMakeGroups( " - << theObject - << ", axis, " - << theAngleInRadians << ", " - << theNbOfSteps << ", " - << theTolerance << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump<< this << ".RotationSweepObjectMakeGroups( " + << theObject + << ", axis, " + << theAngleInRadians << ", " + << theNbOfSteps << ", " + << theTolerance << " )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return rotationSweep(anElementsId, - theAxis, - theAngleInRadians, - theNbOfSteps, - theTolerance, - true); + return aGroups; } @@ -1628,12 +1634,16 @@ SMESH_MeshEditor_i::ExtrusionSweepMakeGroups(const SMESH::long_array& theIDsOfEl const SMESH::DirStruct& theStepVector, CORBA::Long theNbOfSteps) { + SMESH::ListOfGroups* aGroups = extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, true ); + if ( !myPreviewMode ) { TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweepMakeGroups( " - << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".ExtrusionSweepMakeGroups( " + << theIDsOfElements << ", stepVector, " << theNbOfSteps << " )"; } - return extrusionSweep (theIDsOfElements, theStepVector, theNbOfSteps, true ); + return aGroups; } //======================================================================= //function : ExtrusionSweepObjectMakeGroups @@ -1645,13 +1655,17 @@ SMESH_MeshEditor_i::ExtrusionSweepObjectMakeGroups(SMESH::SMESH_IDSource_ptr the const SMESH::DirStruct& theStepVector, CORBA::Long theNbOfSteps) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups * aGroups = extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true ); + if ( !myPreviewMode ) { TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweepObjectMakeGroups( " - << theObject << ", stepVector, " << theNbOfSteps << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump<< this << ".ExtrusionSweepObjectMakeGroups( " + << theObject << ", stepVector, " << theNbOfSteps << " )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true ); + return aGroups; } //======================================================================= @@ -1664,13 +1678,16 @@ SMESH_MeshEditor_i::ExtrusionSweepObject1DMakeGroups(SMESH::SMESH_IDSource_ptr t const SMESH::DirStruct& theStepVector, CORBA::Long theNbOfSteps) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups * aGroups = extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true, SMDSAbs_Edge ); if ( !myPreviewMode ) { TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweepObject1DMakeGroups( " - << theObject << ", stepVector, " << theNbOfSteps << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".ExtrusionSweepObject1DMakeGroups( " + << theObject << ", stepVector, " << theNbOfSteps << " )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true, SMDSAbs_Edge ); + return aGroups; } //======================================================================= @@ -1683,13 +1700,16 @@ SMESH_MeshEditor_i::ExtrusionSweepObject2DMakeGroups(SMESH::SMESH_IDSource_ptr t const SMESH::DirStruct& theStepVector, CORBA::Long theNbOfSteps) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups * aGroups = extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true, SMDSAbs_Face ); if ( !myPreviewMode ) { TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".ExtrusionSweepObject2DMakeGroups( " - << theObject << ", stepVector, " << theNbOfSteps << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".ExtrusionSweepObject2DMakeGroups( " + << theObject << ", stepVector, " << theNbOfSteps << " )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return extrusionSweep (anElementsId, theStepVector, theNbOfSteps, true, SMDSAbs_Face ); + return aGroups; } @@ -1764,21 +1784,25 @@ SMESH_MeshEditor_i::AdvancedExtrusionMakeGroups(const SMESH::long_array& theIDsO CORBA::Long theExtrFlags, CORBA::Double theSewTolerance) { + SMESH::ListOfGroups * aGroups = advancedExtrusion( theIDsOfElements, + theStepVector, + theNbOfSteps, + theExtrFlags, + theSewTolerance, + true); + if ( !myPreviewMode ) { TPythonDump() << "stepVector = " << theStepVector; - TPythonDump() << this << ".AdvancedExtrusionMakeGroups(" - << theIDsOfElements - << ", stepVector, " - << theNbOfSteps << "," - << theExtrFlags << ", " - << theSewTolerance << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".AdvancedExtrusionMakeGroups(" + << theIDsOfElements + << ", stepVector, " + << theNbOfSteps << "," + << theExtrFlags << ", " + << theSewTolerance << " )"; } - return advancedExtrusion( theIDsOfElements, - theStepVector, - theNbOfSteps, - theExtrFlags, - theSewTolerance, - true); + return aGroups; } @@ -1990,6 +2014,16 @@ SMESH_MeshEditor_i::ExtrusionAlongPathMakeGroups(const SMESH::long_array& theI const SMESH::PointStruct& theRefPoint, SMESH::SMESH_MeshEditor::Extrusion_Error& Error) { + SMESH::ListOfGroups * aGroups = extrusionAlongPath( theIDsOfElements, + thePathMesh, + thePathShape, + theNodeStart, + theHasAngles, + theAngles, + theHasRefPoint, + theRefPoint, + true, + Error); if ( !myPreviewMode ) { TPythonDump() << "rotAngles = " << theAngles; @@ -2001,25 +2035,26 @@ SMESH_MeshEditor_i::ExtrusionAlongPathMakeGroups(const SMESH::long_array& theI else TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )"; - TPythonDump() << "groups = " << this << ".ExtrusionAlongPathMakeGroups( " - << theIDsOfElements << ", " - << thePathMesh << ", " - << thePathShape << ", " - << theNodeStart << ", " - << theHasAngles << ", " - << "rotAngles" << ", " - << theHasRefPoint << ", refPoint )"; + bool isDumpGroups = aGroups && aGroups->length() > 0; + TPythonDump aPythonDump; + if(isDumpGroups) { + aPythonDump << "("<GetIDs(); + SMESH::ListOfGroups * aGroups = extrusionAlongPath( anElementsId, + thePathMesh, + thePathShape, + theNodeStart, + theHasAngles, + theAngles, + theHasRefPoint, + theRefPoint, + true, + Error); + if ( !myPreviewMode ) { TPythonDump() << "rotAngles = " << theAngles; @@ -2048,27 +2095,27 @@ ExtrusionAlongPathObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject, << theRefPoint.z << " )"; else TPythonDump() << "refPoint = SMESH.PointStruct( 0,0,0 )"; + + bool isDumpGroups = aGroups && aGroups->length() > 0; + TPythonDump aPythonDump; + if(isDumpGroups) { + aPythonDump << "("<GetIDs(); - return extrusionAlongPath( anElementsId, - thePathMesh, - thePathShape, - theNodeStart, - theHasAngles, - theAngles, - theHasRefPoint, - theRefPoint, - true, - Error); + return aGroups; } //================================================================================ @@ -2238,13 +2285,16 @@ SMESH_MeshEditor_i::MirrorMakeGroups(const SMESH::long_array& theIDsO const SMESH::AxisStruct& theMirror, SMESH::SMESH_MeshEditor::MirrorType theMirrorType) { + SMESH::ListOfGroups * aGroups = mirror(theIDsOfElements, theMirror, theMirrorType, true, true); if ( !myPreviewMode ) { - TPythonDump() << this << ".MirrorMakeGroups( " - << theIDsOfElements << ", " - << theMirror << ", " - << mirrorTypeName(theMirrorType) << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".MirrorMakeGroups( " + << theIDsOfElements << ", " + << theMirror << ", " + << mirrorTypeName(theMirrorType) << " )"; } - return mirror(theIDsOfElements, theMirror, theMirrorType, true, true); + return aGroups; } //======================================================================= @@ -2257,14 +2307,17 @@ SMESH_MeshEditor_i::MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr t const SMESH::AxisStruct& theMirror, SMESH::SMESH_MeshEditor::MirrorType theMirrorType) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups * aGroups = mirror(anElementsId, theMirror, theMirrorType, true, true); if ( !myPreviewMode ) { - TPythonDump() << this << ".MirrorObjectMakeGroups( " - << theObject << ", " - << theMirror << ", " - << mirrorTypeName(theMirrorType) << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".MirrorObjectMakeGroups( " + << theObject << ", " + << theMirror << ", " + << mirrorTypeName(theMirrorType) << " )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return mirror(anElementsId, theMirror, theMirrorType, true, true); + return aGroups; } //======================================================================= @@ -2279,24 +2332,35 @@ SMESH_MeshEditor_i::MirrorMakeMesh(const SMESH::long_array& theIDsOfE CORBA::Boolean theCopyGroups, const char* theMeshName) { - TPythonDump pydump; // to prevent dump at mesh creation - - SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); - if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh )) - { - mirror(theIDsOfElements, theMirror, theMirrorType, - false, theCopyGroups, & mesh_i->GetImpl()); - mesh_i->CreateGroupServants(); + SMESH_Mesh_i* mesh_i; + SMESH::SMESH_Mesh_var mesh; + { // open new scope to dump "MakeMesh" command + // and then "GetGroups" using SMESH_Mesh::GetGroups() + + TPythonDump pydump; // to prevent dump at mesh creation + + mesh = makeMesh( theMeshName ); + mesh_i = SMESH::DownCast( mesh ); + if (mesh_i) { + mirror(theIDsOfElements, theMirror, theMirrorType, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } + + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".MirrorMakeMesh( " + << theIDsOfElements << ", " + << theMirror << ", " + << mirrorTypeName(theMirrorType) << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; + } } - if ( !myPreviewMode ) { - pydump << mesh << " = " << this << ".MirrorMakeMesh( " - << theIDsOfElements << ", " - << theMirror << ", " - << mirrorTypeName(theMirrorType) << ", " - << theCopyGroups << ", '" - << theMeshName << "' )"; - } + //dump "GetGroups" + if(!myPreviewMode && mesh_i) + mesh_i->GetGroups(); + return mesh._retn(); } @@ -2312,24 +2376,36 @@ SMESH_MeshEditor_i::MirrorObjectMakeMesh(SMESH::SMESH_IDSource_ptr the CORBA::Boolean theCopyGroups, const char* theMeshName) { - TPythonDump pydump; // to prevent dump at mesh creation + SMESH_Mesh_i* mesh_i; + SMESH::SMESH_Mesh_var mesh; + { // open new scope to dump "MakeMesh" command + // and then "GetGroups" using SMESH_Mesh::GetGroups() + + TPythonDump pydump; // to prevent dump at mesh creation + + mesh = makeMesh( theMeshName ); + mesh_i = SMESH::DownCast( mesh ); + if ( mesh_i ) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + mirror(anElementsId, theMirror, theMirrorType, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } - SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); - if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh )) - { - SMESH::long_array_var anElementsId = theObject->GetIDs(); - mirror(anElementsId, theMirror, theMirrorType, - false, theCopyGroups, & mesh_i->GetImpl()); - mesh_i->CreateGroupServants(); - } - if ( !myPreviewMode ) { - pydump << mesh << " = " << this << ".MirrorObjectMakeMesh( " - << theObject << ", " - << theMirror << ", " - << mirrorTypeName(theMirrorType) << ", " - << theCopyGroups << ", '" - << theMeshName << "' )"; - } + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".MirrorObjectMakeMesh( " + << theObject << ", " + << theMirror << ", " + << mirrorTypeName(theMirrorType) << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; + } + } + + //dump "GetGroups" + if(!myPreviewMode && mesh_i) + mesh_i->GetGroups(); + return mesh._retn(); } @@ -2417,13 +2493,16 @@ SMESH::ListOfGroups* SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElements, const SMESH::DirStruct& theVector) { + SMESH::ListOfGroups * aGroups = translate(theIDsOfElements,theVector,true,true); if ( !myPreviewMode ) { TPythonDump() << "vector = " << theVector; - TPythonDump() << this << ".TranslateMakeGroups( " - << theIDsOfElements - << ", vector )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".TranslateMakeGroups( " + << theIDsOfElements + << ", vector )"; } - return translate(theIDsOfElements,theVector,true,true); + return aGroups; } //======================================================================= @@ -2435,14 +2514,19 @@ SMESH::ListOfGroups* SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject, const SMESH::DirStruct& theVector) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups * aGroups = translate(anElementsId, theVector, true, true); + if ( !myPreviewMode ) { + TPythonDump() << "vector = " << theVector; - TPythonDump() << this << ".TranslateObjectMakeGroups( " - << theObject - << ", vector )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".TranslateObjectMakeGroups( " + << theObject + << ", vector )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return translate(anElementsId, theVector, true, true); + return aGroups; } //======================================================================= @@ -2456,21 +2540,36 @@ SMESH_MeshEditor_i::TranslateMakeMesh(const SMESH::long_array& theIDsOfElements, CORBA::Boolean theCopyGroups, const char* theMeshName) { - TPythonDump pydump; // to prevent dump at mesh creation - SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); + SMESH_Mesh_i* mesh_i; + SMESH::SMESH_Mesh_var mesh; + + { // open new scope to dump "MakeMesh" command + // and then "GetGroups" using SMESH_Mesh::GetGroups() - if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh )) { - translate(theIDsOfElements, theVector, - false, theCopyGroups, & mesh_i->GetImpl()); - mesh_i->CreateGroupServants(); - } - if ( !myPreviewMode ) { - pydump << mesh << " = " << this << ".TranslateMakeMesh( " - << theIDsOfElements << ", " - << theVector << ", " - << theCopyGroups << ", '" - << theMeshName << "' )"; + TPythonDump pydump; // to prevent dump at mesh creation + + mesh = makeMesh( theMeshName ); + mesh_i = SMESH::DownCast( mesh ); + + if ( mesh_i ) { + translate(theIDsOfElements, theVector, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } + + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".TranslateMakeMesh( " + << theIDsOfElements << ", " + << theVector << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; + } } + + //dump "GetGroups" + if(!myPreviewMode && mesh_i) + mesh_i->GetGroups(); + return mesh._retn(); } @@ -2485,22 +2584,34 @@ SMESH_MeshEditor_i::TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject, CORBA::Boolean theCopyGroups, const char* theMeshName) { - TPythonDump pydump; // to prevent dump at mesh creation - SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); - - if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh )) { - SMESH::long_array_var anElementsId = theObject->GetIDs(); - translate(anElementsId, theVector, - false, theCopyGroups, & mesh_i->GetImpl()); - mesh_i->CreateGroupServants(); - } - if ( !myPreviewMode ) { - pydump << mesh << " = " << this << ".TranslateObjectMakeMesh( " - << theObject << ", " - << theVector << ", " - << theCopyGroups << ", '" - << theMeshName << "' )"; + SMESH_Mesh_i* mesh_i; + SMESH::SMESH_Mesh_var mesh; + { // open new scope to dump "MakeMesh" command + // and then "GetGroups" using SMESH_Mesh::GetGroups() + + TPythonDump pydump; // to prevent dump at mesh creation + mesh = makeMesh( theMeshName ); + mesh_i = SMESH::DownCast( mesh ); + + if ( mesh_i ) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + translate(anElementsId, theVector, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".TranslateObjectMakeMesh( " + << theObject << ", " + << theVector << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; + } } + + //dump "GetGroups" + if(!myPreviewMode && mesh_i) + mesh_i->GetGroups(); + return mesh._retn(); } @@ -2599,14 +2710,17 @@ SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::long_array& theIDsOfElements, const SMESH::AxisStruct& theAxis, CORBA::Double theAngle) { + SMESH::ListOfGroups * aGroups = rotate(theIDsOfElements,theAxis,theAngle,true,true); if ( !myPreviewMode ) { TPythonDump() << "axis = " << theAxis; - TPythonDump() << this << ".RotateMakeGroups( " - << theIDsOfElements - << ", axis, " - << theAngle << " )"; + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".RotateMakeGroups( " + << theIDsOfElements + << ", axis, " + << theAngle << " )"; } - return rotate(theIDsOfElements,theAxis,theAngle,true,true); + return aGroups; } //======================================================================= @@ -2619,15 +2733,19 @@ SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject, const SMESH::AxisStruct& theAxis, CORBA::Double theAngle) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + SMESH::ListOfGroups * aGroups = rotate(anElementsId,theAxis,theAngle,true,true); + if ( !myPreviewMode ) { TPythonDump() << "axis = " << theAxis; - TPythonDump() << this << ".RotateObjectMakeGroups( " + TPythonDump aPythonDump; + DumpGroupsList(aPythonDump,aGroups); + aPythonDump << this << ".RotateObjectMakeGroups( " << theObject << ", axis, " << theAngle << " )"; } - SMESH::long_array_var anElementsId = theObject->GetIDs(); - return rotate(anElementsId,theAxis,theAngle,true,true); + return aGroups; } //======================================================================= @@ -2642,22 +2760,36 @@ SMESH_MeshEditor_i::RotateMakeMesh(const SMESH::long_array& theIDsOfElements, CORBA::Boolean theCopyGroups, const char* theMeshName) { - TPythonDump pydump; // to prevent dump at mesh creation - SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); + SMESH::SMESH_Mesh_var mesh; + SMESH_Mesh_i* mesh_i; - if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh )) { - rotate(theIDsOfElements, theAxis, theAngleInRadians, - false, theCopyGroups, & mesh_i->GetImpl()); - mesh_i->CreateGroupServants(); - } - if ( !myPreviewMode ) { - pydump << mesh << " = " << this << ".RotateMakeMesh( " - << theIDsOfElements << ", " - << theAxis << ", " - << theAngleInRadians << ", " - << theCopyGroups << ", '" - << theMeshName << "' )"; + { // open new scope to dump "MakeMesh" command + // and then "GetGroups" using SMESH_Mesh::GetGroups() + + TPythonDump pydump; // to prevent dump at mesh creation + + mesh = makeMesh( theMeshName ); + mesh_i = SMESH::DownCast( mesh ); + + if ( mesh_i ) { + rotate(theIDsOfElements, theAxis, theAngleInRadians, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".RotateMakeMesh( " + << theIDsOfElements << ", " + << theAxis << ", " + << theAngleInRadians << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; + } } + + //dump "GetGroups" + if(!myPreviewMode && mesh_i) + mesh_i->GetGroups(); + return mesh._retn(); } @@ -2673,23 +2805,36 @@ SMESH_MeshEditor_i::RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr theObject, CORBA::Boolean theCopyGroups, const char* theMeshName) { - TPythonDump pydump; // to prevent dump at mesh creation - SMESH::SMESH_Mesh_var mesh = makeMesh( theMeshName ); - - if ( SMESH_Mesh_i* mesh_i = SMESH::DownCast( mesh )) { - SMESH::long_array_var anElementsId = theObject->GetIDs(); - rotate(anElementsId, theAxis, theAngleInRadians, - false, theCopyGroups, & mesh_i->GetImpl()); - mesh_i->CreateGroupServants(); - } - if ( !myPreviewMode ) { - pydump << mesh << " = " << this << ".RotateObjectMakeMesh( " - << theObject << ", " - << theAxis << ", " - << theAngleInRadians << ", " - << theCopyGroups << ", '" - << theMeshName << "' )"; + SMESH::SMESH_Mesh_var mesh; + SMESH_Mesh_i* mesh_i; + + {// open new scope to dump "MakeMesh" command + // and then "GetGroups" using SMESH_Mesh::GetGroups() + + TPythonDump pydump; // to prevent dump at mesh creation + mesh = makeMesh( theMeshName ); + mesh_i = SMESH::DownCast( mesh ); + + if (mesh_i ) { + SMESH::long_array_var anElementsId = theObject->GetIDs(); + rotate(anElementsId, theAxis, theAngleInRadians, + false, theCopyGroups, & mesh_i->GetImpl()); + mesh_i->CreateGroupServants(); + } + if ( !myPreviewMode ) { + pydump << mesh << " = " << this << ".RotateObjectMakeMesh( " + << theObject << ", " + << theAxis << ", " + << theAngleInRadians << ", " + << theCopyGroups << ", '" + << theMeshName << "' )"; + } } + + //dump "GetGroups" + if(!myPreviewMode && mesh_i) + mesh_i->GetGroups(); + return mesh._retn(); } @@ -3454,3 +3599,16 @@ SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::makeMesh(const char* theMeshName) return mesh._retn(); } + +//======================================================================= +//function : DumpGroupsList +//purpose : +//======================================================================= +void SMESH_MeshEditor_i::DumpGroupsList(TPythonDump & theDumpPython, + const SMESH::ListOfGroups * theGroupList) +{ + bool isDumpGroupList = theGroupList && theGroupList->length() > 0; + if(isDumpGroupList) { + theDumpPython << theGroupList << " = "; + } +} diff --git a/src/SMESH_I/SMESH_MeshEditor_i.hxx b/src/SMESH_I/SMESH_MeshEditor_i.hxx index 85d7b6cfd..f2e6201cd 100644 --- a/src/SMESH_I/SMESH_MeshEditor_i.hxx +++ b/src/SMESH_I/SMESH_MeshEditor_i.hxx @@ -35,7 +35,7 @@ #include CORBA_SERVER_HEADER(SMESH_MeshEditor) #include "SMESH_Mesh.hxx" - +#include "SMESH_PythonDump.hxx" #include class SMESH_MeshEditor; @@ -486,6 +486,9 @@ private: //!< private methods ::SMESH_Mesh* TargetMesh=0); SMESH::SMESH_Mesh_ptr makeMesh(const char* theMeshName); + + void DumpGroupsList(SMESH::TPythonDump & theDumpPython, + const SMESH::ListOfGroups * theGroupList); private: //!< fields diff --git a/src/SMESH_I/SMESH_PythonDump.hxx b/src/SMESH_I/SMESH_PythonDump.hxx index 518e1be92..e801d44af 100644 --- a/src/SMESH_I/SMESH_PythonDump.hxx +++ b/src/SMESH_I/SMESH_PythonDump.hxx @@ -147,6 +147,9 @@ namespace SMESH TPythonDump& operator<<(const TCollection_AsciiString & theArg); + TPythonDump& + operator<<(const SMESH::ListOfGroups * theList); + static char* SMESHGenName() { return "smeshgen"; } static char* MeshEditorName() { return "mesh_editor"; }