From c111d3b52022abe32107b0b3737c2a6ff4137164 Mon Sep 17 00:00:00 2001 From: apo Date: Tue, 22 Mar 2005 12:50:34 +0000 Subject: [PATCH] [Bug PAL7444] display mesh takes a lot of more memory in 2.1.0 than in 2.0.0. --- src/SMESH_I/Makefile.in | 5 +++-- src/SMESH_I/SMESH_Gen_i.cxx | 29 +++++++++++++++++++++++++++++ src/SMESH_I/SMESH_Gen_i.hxx | 10 +++++++++- src/SMESH_I/SMESH_Mesh_i.hxx | 4 +++- 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/SMESH_I/Makefile.in b/src/SMESH_I/Makefile.in index 700a10d33..3c7b1fcd9 100644 --- a/src/SMESH_I/Makefile.in +++ b/src/SMESH_I/Makefile.in @@ -45,7 +45,7 @@ EXPORT_HEADERS= \ SMESH_subMesh_i.hxx \ SMESH_Mesh_i.hxx \ SMESH_Hypothesis_i.hxx \ - SMESH.hxx + SMESH.hxx SMESH_Base.hxx SMESH_Factory.hxx EXPORT_PYSCRIPTS = smeshpy.py @@ -69,7 +69,8 @@ LIB_SRC = \ SMESH_3D_Algo_i.cxx \ SMESH_Filter_i.cxx \ SMESH_Group_i.cxx \ - SMESH_Pattern_i.cxx + SMESH_Pattern_i.cxx \ + SMESH_DumpPython.cxx LIB_SERVER_IDL = SMESH_Gen.idl SMESH_Hypothesis.idl SMESH_Mesh.idl \ SALOME_Component.idl SALOME_Exception.idl \ diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index db273b203..8cb0c86c1 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -418,6 +418,7 @@ void SMESH_Gen_i::SetCurrentStudy( SALOMEDS::Study_ptr theStudy ) if ( myStudyContextMap.find( studyId ) == myStudyContextMap.end() ) { myStudyContextMap[ studyId ] = new StudyContext; } + SetStudyID(studyId); // set current study for geom engine /* if ( !CORBA::is_nil( GetGeomEngine() ) ) @@ -490,6 +491,9 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObj throw ( SALOME::SALOME_Exception ) { Unexpect aCatch(SALOME_SalomeException); + using namespace SMESH; + FactoryHandler aFactory; + if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMesh" ); // create mesh SMESH::SMESH_Mesh_var mesh = this->createMesh(); @@ -500,6 +504,15 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObj // publish mesh in the study if ( CanPublishInStudy( mesh ) ) PublishMesh( myCurrentStudy, mesh.in() ); + + CORBA::String_var anEntry = theShapeObject->GetEntry(); + aFactory->Register(TInvocationID(TResultCont(1,meshServant->GetID()), + GetID(), + "SMESH_Mesh", + "CreateMesh", + TArgumentCont(), + anEntry.in())); + return mesh._retn(); } @@ -542,6 +555,9 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, throw ( SALOME::SALOME_Exception ) { Unexpect aCatch(SALOME_SalomeException); + using namespace SMESH; + FactoryHandler aFactory; + if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromMED" ); // Retrieve mesh names from the file @@ -554,6 +570,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, theStatus = (SMESH::DriverMED_ReadStatus)aStatus; if(theStatus == SMESH::DRS_OK){ aResult->length( aNames.size() ); + TResultCont aResultCont; int i = 0; // Iterate through all meshes and create mesh objects @@ -574,7 +591,15 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, theStatus = status1; aResult[i++] = SMESH::SMESH_Mesh::_duplicate( mesh ); + + aResultCont.push_back(meshServant->GetID()); } + aFactory->Register(TInvocationID(aResultCont, + GetID(), + "SMESH_Mesh", + "CreateMeshesFromMED", + TArgumentCont(1,std::string(theFileName)), + "")); } return aResult._retn(); } @@ -778,6 +803,10 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, { INFOS( "SMESH_Gen_i::Save" ); + CORBA::Boolean anIsValidScript; + SALOMEDS::Study_var aStudy = theComponent->GetStudy(); + SALOMEDS::TMPFile_var aDump = DumpPython(aStudy,false,anIsValidScript); + // ASSERT( theComponent->GetStudy()->StudyId() == myCurrentStudy->StudyId() ) // san -- in case differs from theComponent's study, // use that of the component diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index a93301653..adda866b8 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -44,6 +44,7 @@ #include "SMESH_Gen.hxx" #include "GEOM_Client.hxx" +#include "SMESH_Factory.hxx" #include @@ -119,7 +120,8 @@ private: // ========================================================== class SMESH_Gen_i: public virtual POA_SMESH::SMESH_Gen, - public virtual Engines_Component_i + public virtual Engines_Component_i, + public virtual SMESH::Factory { public: // Get last created instance of the class @@ -207,6 +209,11 @@ public: // **************************************************** // Interface inherited methods (from SALOMEDS::Driver) // **************************************************** + virtual + SALOMEDS::TMPFile* + DumpPython(CORBA::Object_ptr theStudy, + CORBA::Boolean theIsPublished, + CORBA::Boolean& theIsValidScript); // Save SMESH data SALOMEDS::TMPFile* Save( SALOMEDS::SComponent_ptr theComponent, @@ -371,4 +378,5 @@ private: SALOMEDS::Study_var myCurrentStudy; // Current study }; + #endif diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index 3035c1ad3..87b8791b6 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -42,6 +42,7 @@ #include "SMESH_subMesh.hxx" #include "SALOME_GenericObj_i.hh" +#include "SMESH_Factory.hxx" class SMESH_Gen_i; class SMESH_GroupBase_i; @@ -50,7 +51,8 @@ class SMESH_GroupBase_i; class SMESH_Mesh_i: public virtual POA_SMESH::SMESH_Mesh, - public virtual SALOME::GenericObj_i + public virtual SALOME::GenericObj_i, + public virtual SMESH::Base { SMESH_Mesh_i(); SMESH_Mesh_i(const SMESH_Mesh_i&);