From 4fa415828b105a5de38fa5734bbe9d415055fc59 Mon Sep 17 00:00:00 2001 From: ana Date: Mon, 19 Sep 2011 07:08:59 +0000 Subject: [PATCH] Integrate patches for win32 version --- src/SMESH/SMESH_Mesh.cxx | 38 +++++++++++++++++++++ src/SMESH/SMESH_Mesh.hxx | 5 +++ src/SMESHGUI/SMESHGUI.cxx | 62 ++++++++++++++++++++++++++++++---- src/SMESHGUI/SMESH_msg_en.ts | 12 +++---- src/SMESH_I/SMESH_2smeshpy.cxx | 4 +-- src/SMESH_I/SMESH_Gen_i.cxx | 62 ++++++++++++++++++++++++++++++---- src/SMESH_I/SMESH_Gen_i.hxx | 10 ++++++ src/SMESH_I/SMESH_Mesh_i.cxx | 30 ++++++++++++---- src/SMESH_I/SMESH_Mesh_i.hxx | 5 +++ 9 files changed, 200 insertions(+), 28 deletions(-) diff --git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx index 60458d830..7d4bbfae4 100644 --- a/src/SMESH/SMESH_Mesh.cxx +++ b/src/SMESH/SMESH_Mesh.cxx @@ -1144,6 +1144,44 @@ void SMESH_Mesh::ExportMED(const char *file, myWriter.Perform(); } +void SMESH_Mesh::ExportSAUV(const char *file, + const char* theMeshName, + bool theAutoGroups) + throw(SALOME_Exception) +{ + std::string medfilename(file); + medfilename += ".med"; + std::string cmd; +#ifdef WNT + cmd = "%PYTHONBIN% "; +#else + cmd = "python "; +#endif + cmd += "-c \""; + cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')"; + cmd += "\""; + system(cmd.c_str()); + ExportMED(medfilename.c_str(), theMeshName, theAutoGroups, 1); +#ifdef WNT + cmd = "%PYTHONBIN% "; +#else + cmd = "python "; +#endif + cmd += "-c \""; + cmd += "from medutilities import convert ; convert(r'" + medfilename + "', 'MED', 'GIBI', 1, r'" + file + "')"; + cmd += "\""; + system(cmd.c_str()); +#ifdef WNT + cmd = "%PYTHONBIN% "; +#else + cmd = "python "; +#endif + cmd += "-c \""; + cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')"; + cmd += "\""; + system(cmd.c_str()); +} + void SMESH_Mesh::ExportDAT(const char *file) throw(SALOME_Exception) { Unexpect aCatch(SalomeException); diff --git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx index a77498ed5..58b85201c 100644 --- a/src/SMESH/SMESH_Mesh.hxx +++ b/src/SMESH/SMESH_Mesh.hxx @@ -222,6 +222,11 @@ public: int theVersion = 0) throw(SALOME_Exception); + void ExportSAUV(const char *file, + const char* theMeshName = NULL, + bool theAutoGroups = true) + throw(SALOME_Exception); + void ExportDAT(const char *file) throw(SALOME_Exception); void ExportUNV(const char *file) throw(SALOME_Exception); void ExportSTL(const char *file, const bool isascii) throw(SALOME_Exception); diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index ba566cc24..f607b1929 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -197,6 +197,10 @@ else if ( theCommandID == 111 ) { filter.append( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" ); } + else if ( theCommandID == 115 ) { + filter.append( QObject::tr( "SAUV files (*.sauv*)" ) ); + filter.append( QObject::tr( "All files (*)" ) ); + } else if ( theCommandID == 140 ) { filter.append( QObject::tr( "STL_ASCII_FILES_FILTER" ) + " (*.stl)" ); } @@ -249,6 +253,17 @@ } break; } + case 115: + { + // SAUV format + SMESH::DriverMED_ReadStatus res; + aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toLatin1().constData(), res ); + if ( res != SMESH::DRS_OK ) { + errors.append( QString( "%1 :\n\t%2" ).arg( filename ). + arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) ); + } + break; + } case 140: { // STL format @@ -376,6 +391,8 @@ switch ( theCommandID ) { case 125: case 122: + case 142: + case 143: { for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) { SMESH::SMESH_Mesh_var aMeshItem = (*aMeshIter).first; @@ -390,11 +407,26 @@ return; } } - // PAL18696 - //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2)); - QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2)); - //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 ); - aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 ); + switch ( theCommandID ) { + case 125: + case 122: + { + // PAL18696 + QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2)); + QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2)); + aFilterMap.insert( QString("MED ") + v21 + " (*.med)", SMESH::MED_V2_1 ); + aFilterMap.insert( QString("MED ") + v22 + " (*.med)", SMESH::MED_V2_2 ); + } + break; + case 142: + case 143: + { + aFilterMap.insert("All files (*)", SMESH::MED_V2_1 ); + aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 ); + aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 ); + } + break; + } } break; case 124: @@ -463,7 +495,7 @@ if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() ) anInitialPath = QDir::currentPath(); - if ( theCommandID != 122 && theCommandID != 125 && theCommandID != 141) { + if ( theCommandID != 122 && theCommandID != 125 && theCommandID != 141 && theCommandID != 142 && theCommandID != 143) { if ( anInitialPath.isEmpty() ) anInitialPath = SUIT_FileDlg::getLastVisitedPath(); aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(), anInitialPath + QString("/") + aMeshName, aFilter, aTitle, false); @@ -619,6 +651,15 @@ } } break; + case 142: + case 143: { + for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) { + SMESH::SMESH_Mesh_var aMeshItem = (*aMeshIter).first; + if( !aMeshItem->_is_nil() ) + aMeshItem->ExportSAUV( aFilename.toLatin1().data(), toCreateGroups ); + } + } + break; case 124: case 121: aMesh->ExportDAT( aFilename.toLatin1().data() ); @@ -1880,6 +1921,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 113: // IMPORT case 112: case 111: + case 115: case 140: { if(checkLock(aStudy)) break; @@ -1913,6 +1955,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 125: case 126: case 141: + case 142: + case 143: { ::ExportMeshToFile(theCommandID); break; @@ -3260,14 +3304,17 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 112, "UNV", "", (Qt::CTRL+Qt::Key_U) ); createSMESHAction( 113, "MED", "", (Qt::CTRL+Qt::Key_M) ); createSMESHAction( 114, "NUM" ); + createSMESHAction( 115, "SAUV" ); createSMESHAction( 121, "DAT" ); createSMESHAction( 122, "MED" ); createSMESHAction( 123, "UNV" ); createSMESHAction( 140, "STL" ); + createSMESHAction( 142, "SAUV" ); createSMESHAction( 124, "EXPORT_DAT" ); createSMESHAction( 125, "EXPORT_MED" ); createSMESHAction( 126, "EXPORT_UNV" ); createSMESHAction( 141, "EXPORT_STL" ); + createSMESHAction( 143, "EXPORT_SAUV" ); createSMESHAction( 150, "FILE_INFO" ); createSMESHAction( 33, "DELETE", "ICON_DELETE", Qt::Key_Delete ); createSMESHAction( 5105, "SEL_FILTER_LIB" ); @@ -3430,12 +3477,14 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 111, importId, -1 ); createMenu( 112, importId, -1 ); createMenu( 113, importId, -1 ); + createMenu( 115, importId, -1 ); createMenu( 140, importId, -1 ); createMenu( 121, exportId, -1 ); createMenu( 122, exportId, -1 ); createMenu( 123, exportId, -1 ); createMenu( 141, exportId, -1 ); // export to stl STL + createMenu( 142, exportId, -1 ); createMenu( separator(), fileId, 10 ); @@ -3738,6 +3787,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( 125, OB, mesh, multiple_non_empty ); // EXPORT_MED createPopupItem( 126, OB, mesh, only_one_non_empty ); // EXPORT_UNV createPopupItem( 141, OB, mesh, only_one_non_empty ); // EXPORT_STL + createPopupItem( 143, OB, mesh, only_one_non_empty ); // EXPORT_SAUV //createPopupItem( 33, OB, subMesh + " " + group ); // DELETE createPopupItem( 33, OB, mesh_group + " " + hyp_alg ); // DELETE popupMgr()->insert( separator(), -1, 0 ); diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index 0da96ccdd..fd10b8774 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -361,7 +361,7 @@ MEN_EXPORT_SAUV - Export to SAUV (ASCII) file + Export to SAUV file MEN_EXPORT_STL @@ -485,7 +485,7 @@ MEN_SAUV - SAUV (ASCII) file + SAUV file MEN_MERGE @@ -2457,7 +2457,7 @@ Please check preferences of Mesh module. STB_EXPORT_SAUV - Export to SAUV (ASCII) file + Export to SAUV file STB_EXPORT_STL @@ -2557,7 +2557,7 @@ Please check preferences of Mesh module. STB_SAUV - Import SAUV (ASCII) file + Import SAUV file STB_MERGE @@ -3013,7 +3013,7 @@ Please check preferences of Mesh module. TOP_EXPORT_SAUV - Export to SAUV (ASCII) file + Export to SAUV file TOP_EXPORT_STL @@ -3113,7 +3113,7 @@ Please check preferences of Mesh module. TOP_SAUV - Import SAUV (ASCII) file + Import SAUV file TOP_MERGE diff --git a/src/SMESH_I/SMESH_2smeshpy.cxx b/src/SMESH_I/SMESH_2smeshpy.cxx index 767c32582..90609acf2 100644 --- a/src/SMESH_I/SMESH_2smeshpy.cxx +++ b/src/SMESH_I/SMESH_2smeshpy.cxx @@ -369,7 +369,7 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand ) myMeshes.insert( make_pair( mesh->GetID(), mesh )); return; } - if( method == "CreateMeshesFromMED") + if( method == "CreateMeshesFromMED" || method == "CreateMeshesFromSAUV") { for(int ind = 0;indGetNbResultValues();ind++) { @@ -965,7 +965,7 @@ bool _pyMesh::NeedMeshAccess( const Handle(_pyCommand)& theCommand ) static TStringSet sameMethods; if ( sameMethods.empty() ) { const char * names[] = - { "ExportDAT","ExportUNV","ExportSTL", "RemoveGroup","RemoveGroupWithContents", + { "ExportDAT","ExportUNV","ExportSTL","ExportSAUV", "RemoveGroup","RemoveGroupWithContents", "GetGroups","UnionGroups","IntersectGroups","CutGroups","GetLog","GetId","ClearLog", "GetStudyId","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements", "NbEdges","NbEdgesOfOrder","NbFaces","NbFacesOfOrder","NbTriangles", diff --git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx index 76143cec0..32e1cdbef 100644 --- a/src/SMESH_I/SMESH_Gen_i.cxx +++ b/src/SMESH_I/SMESH_Gen_i.cxx @@ -914,13 +914,11 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName */ //============================================================================= -SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, - SMESH::DriverMED_ReadStatus& theStatus) - throw ( SALOME::SALOME_Exception ) +SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileName, + SMESH::DriverMED_ReadStatus& theStatus, + const char* theCommandNameForPython, + const char* theFileNameForPython) { - Unexpect aCatch(SALOME_SalomeException); - if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromMED" ); - // Retrieve mesh names from the file DriverMED_R_SMESHDS_Mesh myReader; myReader.SetFile( theFileName ); @@ -977,7 +975,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, } // Update Python script - aPythonDump << "], status) = " << this << ".CreateMeshesFromMED(r'" << theFileName << "')"; + aPythonDump << "], status) = " << this << "." << theCommandNameForPython << "(r'" << theFileNameForPython << "')"; } // Dump creation of groups for ( int i = 0; i < aResult->length(); ++i ) @@ -986,6 +984,56 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, return aResult._retn(); } +SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char* theFileName, + SMESH::DriverMED_ReadStatus& theStatus) + throw ( SALOME::SALOME_Exception ) +{ + Unexpect aCatch(SALOME_SalomeException); + if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromMED" ); + SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(theFileName, theStatus, "CreateMeshesFromMED", theFileName); + return result; +} + +//============================================================================= +/*! + * SMESH_Gen_i::CreateMeshFromSAUV + * + * Create mesh and import data from SAUV file + */ +//============================================================================= + +SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char* theFileName, + SMESH::DriverMED_ReadStatus& theStatus) + throw ( SALOME::SALOME_Exception ) +{ + Unexpect aCatch(SALOME_SalomeException); + if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMeshFromSAUV" ); + std::string sauvfilename(theFileName); + std::string medfilename(theFileName); + medfilename += ".med"; + std::string cmd; +#ifdef WNT + cmd = "%PYTHONBIN% "; +#else + cmd = "python "; +#endif + cmd += "-c \""; + cmd += "from medutilities import convert ; convert(r'" + sauvfilename + "', 'GIBI', 'MED', 1, r'" + medfilename + "')"; + cmd += "\""; + system(cmd.c_str()); + SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(medfilename.c_str(), theStatus, "CreateMeshesFromSAUV", sauvfilename.c_str()); +#ifdef WNT + cmd = "%PYTHONBIN% "; +#else + cmd = "python "; +#endif + cmd += "-c \""; + cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')"; + cmd += "\""; + system(cmd.c_str()); + return result; +} + //============================================================================= /*! * SMESH_Gen_i::CreateMeshFromSTL diff --git a/src/SMESH_I/SMESH_Gen_i.hxx b/src/SMESH_I/SMESH_Gen_i.hxx index 1087dc023..4143a6f7e 100644 --- a/src/SMESH_I/SMESH_Gen_i.hxx +++ b/src/SMESH_I/SMESH_Gen_i.hxx @@ -230,6 +230,11 @@ public: SMESH::DriverMED_ReadStatus& theStatus ) throw ( SALOME::SALOME_Exception ); + // Create mesh(es) and import data from MED file + SMESH::mesh_array* CreateMeshesFromSAUV( const char* theFileName, + SMESH::DriverMED_ReadStatus& theStatus ) + throw ( SALOME::SALOME_Exception ); + // Create mesh(es) and import data from STL file SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName ) throw ( SALOME::SALOME_Exception ); @@ -545,6 +550,11 @@ private: static void loadGeomData( SALOMEDS::SComponent_ptr theCompRoot ); + SMESH::mesh_array* CreateMeshesFromMEDorSAUV( const char* theFileName, + SMESH::DriverMED_ReadStatus& theStatus, + const char* theCommandNameForPython, + const char* theFileNameForPython); + private: static GEOM::GEOM_Gen_var myGeomGen; static CORBA::ORB_var myOrb; // ORB reference diff --git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx index 7352426c6..f2ef32302 100644 --- a/src/SMESH_I/SMESH_Mesh_i.cxx +++ b/src/SMESH_I/SMESH_Mesh_i.cxx @@ -2436,14 +2436,9 @@ void SMESH_Mesh_i::PrepareForWriting (const char* file, bool overwrite) } } -void SMESH_Mesh_i::ExportToMEDX (const char* file, - CORBA::Boolean auto_groups, - SMESH::MED_VERSION theVersion, - CORBA::Boolean overwrite) - throw(SALOME::SALOME_Exception) +const char* SMESH_Mesh_i::PrepareMeshNameAndGroups(const char* file, + CORBA::Boolean overwrite) { - Unexpect aCatch(SALOME_SalomeException); - // Perform Export PrepareForWriting(file, overwrite); const char* aMeshName = "Mesh"; @@ -2477,6 +2472,17 @@ void SMESH_Mesh_i::ExportToMEDX (const char* file, // check names of groups checkGroupNames(); + return aMeshName; +} + +void SMESH_Mesh_i::ExportToMEDX (const char* file, + CORBA::Boolean auto_groups, + SMESH::MED_VERSION theVersion, + CORBA::Boolean overwrite) + throw(SALOME::SALOME_Exception) +{ + Unexpect aCatch(SALOME_SalomeException); + const char* aMeshName = PrepareMeshNameAndGroups(file, overwrite); TPythonDump() << _this() << ".ExportToMEDX( r'" << file << "', " << auto_groups << ", " << theVersion << ", " << overwrite << " )"; @@ -2498,6 +2504,16 @@ void SMESH_Mesh_i::ExportMED (const char* file, ExportToMEDX(file,auto_groups,SMESH::MED_V2_2,true); } +void SMESH_Mesh_i::ExportSAUV (const char* file, + CORBA::Boolean auto_groups) + throw(SALOME::SALOME_Exception) +{ + Unexpect aCatch(SALOME_SalomeException); + const char* aMeshName = PrepareMeshNameAndGroups(file, true); + TPythonDump() << _this() << ".ExportSAUV( r'" << file << "', " << auto_groups << " )"; + _impl->ExportSAUV(file, aMeshName, auto_groups); +} + void SMESH_Mesh_i::ExportDAT (const char *file) throw(SALOME::SALOME_Exception) { diff --git a/src/SMESH_I/SMESH_Mesh_i.hxx b/src/SMESH_I/SMESH_Mesh_i.hxx index 7ebc76ba3..08afb022f 100644 --- a/src/SMESH_I/SMESH_Mesh_i.hxx +++ b/src/SMESH_I/SMESH_Mesh_i.hxx @@ -207,6 +207,8 @@ public: */ char* GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits); + const char* PrepareMeshNameAndGroups( const char* file, CORBA::Boolean overwrite ); + void ExportToMEDX( const char* file, CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion, CORBA::Boolean overwrite ) throw (SALOME::SALOME_Exception); void ExportToMED( const char* file, CORBA::Boolean auto_groups, SMESH::MED_VERSION theVersion ) @@ -214,6 +216,9 @@ public: void ExportMED( const char* file, CORBA::Boolean auto_groups ) throw (SALOME::SALOME_Exception); + void ExportSAUV( const char* file, CORBA::Boolean auto_groups ) + throw (SALOME::SALOME_Exception); + void ExportDAT( const char* file ) throw (SALOME::SALOME_Exception); void ExportUNV( const char* file ) -- 2.39.2