From: eap Date: Fri, 23 Nov 2007 11:02:12 +0000 (+0000) Subject: PAL16617 (Modification/Transformation operations with copy don't create a new mesh) X-Git-Tag: V3_2_9rc2~14 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=2499c37bf155cda2dfcc760b7f112e0414168cfe;p=modules%2Fsmesh.git PAL16617 (Modification/Transformation operations with copy don't create a new mesh) merge with V_4 --- diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index be6628faf..0f313fb86 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -32,11 +32,16 @@ #include "SMESH_2smeshpy.hxx" -#include "SMESH_Gen_i.hxx" #include "utilities.h" #include "SMESH_PythonDump.hxx" #include "Resource_DataMapOfAsciiStringAsciiString.hxx" +#include "SMESH_Gen_i.hxx" +/* SALOME headers that include CORBA headers that include windows.h + * that defines GetObject symbol as GetObjectA should stand before SALOME headers + * that declare methods named GetObject - to apply the same rules of GetObject renaming + * and thus to avoid mess with GetObject symbol on Windows */ + IMPLEMENT_STANDARD_HANDLE (_pyObject ,Standard_Transient); IMPLEMENT_STANDARD_HANDLE (_pyCommand ,Standard_Transient); IMPLEMENT_STANDARD_HANDLE (_pyGen ,_pyObject); @@ -76,6 +81,7 @@ static TCollection_AsciiString theEmptyString; #undef DUMP_CONVERSION #endif + namespace { //================================================================================ @@ -245,7 +251,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand AddMeshAccessorMethod( aCommand ); // Add access to a wrapped algorithm - AddAlgoAccessorMethod( aCommand ); // ??? what if algo won't be wrapped at all ??? + // AddAlgoAccessorMethod( aCommand ); // ??? what if algo won't be wrapped at all ??? // PAL12227. PythonDump was not updated at proper time; result is // aCriteria.append(SMESH.Filter.Criterion(17,26,0,'L1',26,25,1e-07,SMESH.EDGE,-1)) @@ -282,16 +288,26 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand ) // Concatenate( [mesh1, ...], ... ) // CreateHypothesis( theHypType, theLibName ) // Compute( mesh, geom ) - // mesh creation if ( theCommand->GetMethod() == "CreateMesh" || - theCommand->GetMethod() == "CreateEmptyMesh" ) + theCommand->GetMethod() == "CreateEmptyMesh" || + theCommand->GetMethod() == "CreateMeshesFromUNV" || + theCommand->GetMethod() == "CreateMeshesFromSTL") { Handle(_pyMesh) mesh = new _pyMesh( theCommand ); myMeshes.insert( make_pair( mesh->GetID(), mesh )); return; } + if(theCommand->GetMethod() == "CreateMeshesFromMED") + { + for(int ind = 0;indGetNbResultValues();ind++) + { + Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue(ind)); + myMeshes.insert( make_pair( theCommand->GetResultValue(ind), mesh )); + } + } + // CreateHypothesis() if ( theCommand->GetMethod() == "CreateHypothesis" ) { @@ -371,7 +387,7 @@ void _pyGen::Flush() //================================================================================ /*! - * \brief Add access method to mesh that is an object or an argument + * \brief Add access method to mesh that is an argument * \param theCmd - command to add access method * \retval bool - true if added */ @@ -584,12 +600,32 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd): { // convert my creation command Handle(_pyCommand) creationCmd = GetCreationCmd(); - creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() ); - creationCmd->SetMethod( "Mesh" ); + TCollection_AsciiString str = creationCmd->GetMethod(); + + creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() ); + if(str != "CreateMeshesFromUNV" && + str != "CreateMeshesFromMED" && + str != "CreateMeshesFromSTL") + creationCmd->SetMethod( "Mesh" ); theGen->SetAccessorMethod( GetID(), "GetMesh()" ); } +//================================================================================ +/*! + * \brief + * \param theCreationCmd - + */ +//================================================================================ +_pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd, const TCollection_AsciiString& id): + _pyObject(theCreationCmd), myHasEditor(false) +{ + // convert my creation command + Handle(_pyCommand) creationCmd = GetCreationCmd(); + creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() ); + theGen->SetAccessorMethod( id, "GetMesh()" ); +} + //================================================================================ /*! * \brief Convert a IDL API command of SMESH::Mesh to a method call of python Mesh @@ -671,7 +707,7 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand ) } } Handle(_pyHypothesis) hyp = theGen->FindHyp( hypID ); - if ( ! hasAddCmd ) { // hypo addition already wrapped + if ( ! hasAddCmd && hypID.Length() != 0 ) { // hypo addition already wrapped // RemoveHypothesis(geom, hyp) --> RemoveHypothesis( hyp, geom=0 ) _pyID geom = theCommand->GetArg( 1 ); theCommand->RemoveArgs(); @@ -849,12 +885,20 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand) "MergeElements","MergeEqualElements","SewFreeBorders","SewConformFreeBorders", "SewBorderToSide","SewSideElements","ChangeElemNodes","GetLastCreatedNodes", "GetLastCreatedElems", - "" }; // <- mark of end + "MirrorMakeMesh","MirrorObjectMakeMesh","TranslateMakeMesh", + "TranslateObjectMakeMesh","RotateMakeMesh","RotateObjectMakeMesh", + "" }; // <- mark of the end sameMethods.Insert( names ); } + //theGen->AddMeshAccessorMethod( theCommand ); // for *Object() if ( sameMethods.Contains( theCommand->GetMethod() )) { theCommand->SetObject( myMesh ); + + // meshes made by *MakeMesh() methods are not wrapped by _pyMesh, + // so let _pyMesh care of it (TMP?) + if ( theCommand->GetMethod().Search("MakeMesh") != -1 ) + _pyMesh( new _pyCommand( theCommand->GetString(), 0 )); // for theGen->SetAccessorMethod() } else { // editor creation command is needed only if any editor function is called @@ -1557,6 +1601,54 @@ const TCollection_AsciiString & _pyCommand::GetResultValue() return myRes; } +//================================================================================ +/*! + * \brief Return number of python command result value ResultValue = Obj.Meth() + * \retval const int + */ +//================================================================================ + +const int _pyCommand::GetNbResultValues() +{ + int begPos = 1; + int Nb=0; + int endPos = myString.Location( "=", 1, Length() ); + TCollection_AsciiString str = ""; + while ( begPos < endPos) { + str = GetWord( myString, begPos, true ); + begPos = begPos+ str.Length(); + Nb++; + } + return (Nb-1); +} + + +//================================================================================ +/*! + * \brief Return substring of python command looking like + * ResultValue1 , ResultValue1,... = Obj.Meth() with res index + * \retval const TCollection_AsciiString & - ResultValue with res index substring + */ +//================================================================================ +const TCollection_AsciiString & _pyCommand::GetResultValue(int res) +{ + int begPos = 1; + int Nb=0; + int endPos = myString.Location( "=", 1, Length() ); + while ( begPos < endPos) { + myRes = GetWord( myString, begPos, true ); + begPos = begPos + myRes.Length(); + Nb++; + if(res == Nb){ + myRes.RemoveAll('[');myRes.RemoveAll(']'); + return myRes; + } + if(Nb>res) + break; + } + return theEmptyString; +} + //================================================================================ /*! * \brief Return substring of python command looking like ResVal = Object.Meth() diff --git a/src/SMESH_I/SMESH_2smeshpy.hxx b/src/SMESH_I/SMESH_2smeshpy.hxx index a09a84cd6..cb8586f01 100644 --- a/src/SMESH_I/SMESH_2smeshpy.hxx +++ b/src/SMESH_I/SMESH_2smeshpy.hxx @@ -111,6 +111,8 @@ public: bool IsEmpty() const { return myString.IsEmpty(); } TCollection_AsciiString GetIndentation(); const TCollection_AsciiString & GetResultValue(); + const int GetNbResultValues(); + const TCollection_AsciiString & GetResultValue(int res); const TCollection_AsciiString & GetObject(); const TCollection_AsciiString & GetMethod(); const TCollection_AsciiString & GetArg( int index ); @@ -210,6 +212,7 @@ class _pyMesh: public _pyObject bool myHasEditor; public: _pyMesh(const Handle(_pyCommand) theCreationCmd); + _pyMesh(const Handle(_pyCommand) theCreationCmd, const TCollection_AsciiString &); const _pyID& GetGeom() { return GetCreationCmd()->GetArg(1); } void Process( const Handle(_pyCommand)& theCommand); void Flush(); @@ -219,6 +222,7 @@ private: static void AddMeshAccess( const Handle(_pyCommand)& theCommand ) { theCommand->SetObject( theCommand->GetObject() + "." _pyMesh_ACCESS_METHOD ); } + //friend class _pyMeshEditor; DEFINE_STANDARD_RTTI (_pyMesh) }; #undef _pyMesh_ACCESS_METHOD