X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESH_I%2FSMESH_Gen_i.cxx;h=77abfc9e5285878013b6f0bc0b1e9a81464ebfd2;hp=8cb0c86c1caf8e712a3218406f7467114a1b5373;hb=1d0ad233cfb9576030f41a0d04ab46f33eaab17e;hpb=c111d3b52022abe32107b0b3737c2a6ff4137164 diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index 8cb0c86c1..77abfc9e5 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -418,7 +418,6 @@ 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() ) ) @@ -473,12 +472,24 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::CreateHypothesis( const char* theHypNam SMESH::SMESH_Hypothesis_var hyp = this->createHypothesis( theHypName, theLibName ); // Publish hypothesis/algorithm in the study - if ( CanPublishInStudy( hyp ) ) - PublishHypothesis( myCurrentStudy, hyp ); + if ( CanPublishInStudy( hyp ) ) { + SALOMEDS::SObject_var aSO = PublishHypothesis( myCurrentStudy, hyp ); + if ( !aSO->_is_nil() ) { + // Update Python script + TCollection_AsciiString aStr (aSO->GetID()); + aStr += " = smesh.CreateHypothesis(\""; + aStr += Standard_CString(theHypName); + aStr += "\", \""; + aStr += Standard_CString(theLibName); + aStr += "\")"; + + AddToCurrentPyScript(aStr); + } + } return hyp._retn(); } - + //============================================================================= /*! * SMESH_Gen_i::CreateMesh @@ -491,9 +502,6 @@ 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(); @@ -501,17 +509,22 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObj SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( mesh ).in() ); ASSERT( meshServant ); meshServant->SetShape( theShapeObject ); - // 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())); + // publish mesh in the study + if ( CanPublishInStudy( mesh ) ) { + SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + SALOMEDS::SObject_var aSO = PublishMesh( myCurrentStudy, mesh.in() ); + aStudyBuilder->CommitCommand(); + if ( !aSO->_is_nil() ) { + // Update Python script + TCollection_AsciiString aStr (aSO->GetID()); + aStr += " = smesh.CreateMesh("; + SMESH_Gen_i::AddObject(aStr, theShapeObject) += ")"; + + AddToCurrentPyScript(aStr); + } + } return mesh._retn(); } @@ -533,8 +546,21 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName SMESH::SMESH_Mesh_var aMesh = createMesh(); string aFileName; // = boost::filesystem::path(theFileName).leaf(); // publish mesh in the study - if ( CanPublishInStudy( aMesh ) ) - PublishMesh( myCurrentStudy, aMesh.in(), aFileName.c_str() ); + if ( CanPublishInStudy( aMesh ) ) { + SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + SALOMEDS::SObject_var aSO = PublishMesh( myCurrentStudy, aMesh.in(), aFileName.c_str() ); + aStudyBuilder->CommitCommand(); + if ( !aSO->_is_nil() ) { + // Update Python script + TCollection_AsciiString aStr (aSO->GetID()); + aStr += " = smesh.CreateMeshesFromUNV(\""; + aStr += Standard_CString(theFileName); + aStr += "\")"; + + AddToCurrentPyScript(aStr); + } + } SMESH_Mesh_i* aServant = dynamic_cast( GetServant( aMesh ).in() ); ASSERT( aServant ); @@ -555,11 +581,11 @@ 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" ); + // Python Dump + TCollection_AsciiString aStr ("(["); + // Retrieve mesh names from the file DriverMED_R_SMESHDS_Mesh myReader; myReader.SetFile( theFileName ); @@ -568,20 +594,33 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, list aNames = myReader.GetMeshNames(aStatus); SMESH::mesh_array_var aResult = new SMESH::mesh_array(); theStatus = (SMESH::DriverMED_ReadStatus)aStatus; - if(theStatus == SMESH::DRS_OK){ + if (theStatus == SMESH::DRS_OK) { + SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction aResult->length( aNames.size() ); - TResultCont aResultCont; int i = 0; // Iterate through all meshes and create mesh objects for ( list::iterator it = aNames.begin(); it != aNames.end(); it++ ) { + // Python Dump + if (i > 0) aStr += ", "; + // create mesh SMESH::SMESH_Mesh_var mesh = createMesh(); // publish mesh in the study + SALOMEDS::SObject_var aSO; if ( CanPublishInStudy( mesh ) ) - PublishMesh( myCurrentStudy, mesh.in(), (*it).c_str() ); - + aSO = PublishMesh( myCurrentStudy, mesh.in(), (*it).c_str() ); + if ( !aSO->_is_nil() ) { + // Python Dump + aStr += aSO->GetID(); + } else { + // Python Dump + aStr += "mesh_"; + aStr += TCollection_AsciiString(i); + } + // Read mesh data (groups are published automatically by ImportMEDFile()) SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( mesh ).in() ); ASSERT( meshServant ); @@ -591,16 +630,17 @@ 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)), - "")); + aStudyBuilder->CommitCommand(); } + + // Update Python script + aStr += "], status) = smesh.CreateMeshesFromMED(\""; + aStr += Standard_CString(theFileName); + aStr += "\")"; + + AddToCurrentPyScript(aStr); + return aResult._retn(); } @@ -621,8 +661,22 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName SMESH::SMESH_Mesh_var aMesh = createMesh(); string aFileName; // = boost::filesystem::path(theFileName).leaf(); // publish mesh in the study - if ( CanPublishInStudy( aMesh ) ) - PublishInStudy( myCurrentStudy, SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() ); + if ( CanPublishInStudy( aMesh ) ) { + SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder(); + aStudyBuilder->NewCommand(); // There is a transaction + SALOMEDS::SObject_var aSO = PublishInStudy + ( myCurrentStudy, SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() ); + aStudyBuilder->CommitCommand(); + if ( !aSO->_is_nil() ) { + // Update Python script + TCollection_AsciiString aStr (aSO->GetID()); + aStr += " = smesh.CreateMeshesFromSTL(\""; + aStr += Standard_CString(theFileName); + aStr += "\")"; + + AddToCurrentPyScript(aStr); + } + } SMESH_Mesh_i* aServant = dynamic_cast( GetServant( aMesh ).in() ); ASSERT( aServant ); @@ -769,6 +823,17 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh, THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM ); + // Update Python script + TCollection_AsciiString aStr ("isDone = smesh.Compute("); + SMESH_Gen_i::AddObject(aStr, theMesh) += ", "; + SMESH_Gen_i::AddObject(aStr, theShapeObject) += ")"; + + AddToCurrentPyScript(aStr); + + aStr = "if isDone == 0: print \"Mesh "; + SMESH_Gen_i::AddObject(aStr, theMesh) += " computation failed\""; + AddToCurrentPyScript(aStr); + try { // get mesh servant SMESH_Mesh_i* meshServant = dynamic_cast( GetServant( theMesh ).in() ); @@ -803,10 +868,6 @@ 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 @@ -814,6 +875,9 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent, theComponent->GetStudy()->StudyId() != myCurrentStudy->StudyId() ) SetCurrentStudy( theComponent->GetStudy() ); + // Store study contents as a set of python commands + SavePython(myCurrentStudy); + StudyContext* myStudyContext = GetCurrentStudyContext(); // Declare a byte stream @@ -1674,7 +1738,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, char* hypname_str = new char[ size ]; aDataset->ReadFromDisk( hypname_str ); hypname = string( hypname_str ); - delete hypname_str; + delete [] hypname_str; aDataset->CloseOnDisk(); } // --> get hypothesis plugin library name @@ -1686,7 +1750,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, aDataset->ReadFromDisk( libname_str ); if(MYDEBUG) SCRUTE( libname_str ); libname = string( libname_str ); - delete libname_str; + delete [] libname_str; aDataset->CloseOnDisk(); } // --> get hypothesis data @@ -1697,7 +1761,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, char* hypdata_str = new char[ size ]; aDataset->ReadFromDisk( hypdata_str ); hypdata = string( hypdata_str ); - delete hypdata_str; + delete [] hypdata_str; aDataset->CloseOnDisk(); } } @@ -1771,7 +1835,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, char* hypname_str = new char[ size ]; aDataset->ReadFromDisk( hypname_str ); hypname = string( hypname_str ); - delete hypname_str; + delete [] hypname_str; aDataset->CloseOnDisk(); } // --> get algorithm plugin library name @@ -1783,7 +1847,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, aDataset->ReadFromDisk( libname_str ); if(MYDEBUG) SCRUTE( libname_str ); libname = string( libname_str ); - delete libname_str; + delete [] libname_str; aDataset->CloseOnDisk(); } // --> get algorithm data @@ -1795,7 +1859,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, aDataset->ReadFromDisk( hypdata_str ); if(MYDEBUG) SCRUTE( hypdata_str ); hypdata = string( hypdata_str ); - delete hypdata_str; + delete [] hypdata_str; aDataset->CloseOnDisk(); } } @@ -2154,7 +2218,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, if(hasData) { // Read sub-meshes from MED - if(MYDEBUG) MESSAGE("JFA - Create all sub-meshes"); + if(MYDEBUG) MESSAGE("Create all sub-meshes"); myReader.CreateAllSubMeshes(); @@ -2207,16 +2271,22 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, } else // NODE IDS { - int* ids = new int [ aDataset->GetSize() ]; + int aSize = aDataset->GetSize(); + + // for reading files, created from 18.07.2005 till 10.10.2005 + if (aDataset->GetType() == HDF_STRING) + aSize /= sizeof(int); + + int* ids = new int [aSize]; aDataset->ReadFromDisk( ids ); // on face or nodes? if ( strncmp( aDSName, aEid_DSName, strlen( aEid_DSName )) == 0 ) { aEids = ids; - nbEids = aDataset->GetSize(); + nbEids = aSize; } else { aFids = ids; - nbFids = aDataset->GetSize(); + nbFids = aSize; } } } // loop on 5 datasets @@ -2264,11 +2334,11 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent, // Recompute State (as computed sub-meshes are restored from MED) if ( !aShapeObject->_is_nil() ) { - MESSAGE("JFA - Compute State Engine ..."); + MESSAGE("Compute State Engine ..."); TopoDS_Shape myLocShape = GeomObjectToShape( aShapeObject ); myNewMeshImpl->GetImpl().GetSubMesh(myLocShape)->ComputeStateEngine (SMESH_subMesh::SUBMESH_RESTORED); - MESSAGE("JFA - Compute State Engine finished"); + MESSAGE("Compute State Engine finished"); } // try to get groups