X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=5c3cfa08e7377d5f9b1cc59f54b515a5426d83b0;hp=69cbc7390bcfaa078d777a057ee03f7710147467;hb=HEAD;hpb=66c7e4a32db7714e0215a1b1edce997759e5d573 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 69cbc7390..90f0b230d 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -22,7 +22,23 @@ // File : SMESHGUI.cxx // Author : Nicolas REJNERI, Open CASCADE S.A.S. +#include + +#if OCC_VERSION_LARGE < 0x07080000 + #include // E.A. must be included before Python.h to fix compilation on windows + +#else + +#ifdef _MSC_VER +#ifndef _USE_MATH_DEFINES +#define _USE_MATH_DEFINES +#endif +#include +#endif + +#endif + #ifdef HAVE_FINITE #undef HAVE_FINITE // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined #endif @@ -70,6 +86,7 @@ #include "SMESHGUI_Measurements.h" #include "SMESHGUI_MergeDlg.h" #include "SMESHGUI_MeshInfo.h" +#include "SMESHGUI_Meshio.h" #include "SMESHGUI_MeshOp.h" #include "SMESHGUI_MeshOrderOp.h" #include "SMESHGUI_MeshPatternDlg.h" @@ -213,6 +230,7 @@ namespace void Control( int theCommandID ); // Definitions + //================================================================================ /*! * \brief Reads meshes from file @@ -251,6 +269,12 @@ namespace filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" ); filter.append( QObject::tr( "GMF_BINARY_FILES_FILTER") + " (*.meshb)" ); } + else if (theCommandID == SMESHOp::OpImportMESHIO) { + if (!SMESHGUI_Meshio::IsMeshioInstalled()) + return; + + filter = SMESHGUI_Meshio::GetImportFileFilter(); + } QString anInitialPath = ""; if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() ) @@ -366,11 +390,20 @@ namespace } break; } + case SMESHOp::OpImportMESHIO: + { + aMeshes = SMESHGUI_Meshio::ImportMesh(theComponentMesh, filename, errors); + break; + } } } catch ( const SALOME::SALOME_Exception& S_ex ) { - errors.append( QString( "%1 :\n\t%2" ).arg( filename ). - arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) ); + const QString exText(S_ex.details.text); + if (exText.startsWith("MESHIO")) + errors.append('\n' + exText); + else + errors.append( QString( "%1 :\n\t%2" ).arg( filename ). + arg( QObject::tr( "SMESH_ERR_UNKNOWN_IMPORT_ERROR" ) ) ); } for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ ) @@ -440,8 +473,14 @@ namespace theCommandID == SMESHOp::OpPopupExportCGNS ); const bool isGMF = ( theCommandID == SMESHOp::OpExportGMF || theCommandID == SMESHOp::OpPopupExportGMF ); + const bool isMESHIO = (theCommandID == SMESHOp::OpExportMESHIO); - const bool multiMeshSupported = ( isMED || isCGNS ); // file can hold several meshes + if (isMESHIO && !SMESHGUI_Meshio::IsMeshioInstalled()) + { + return; + } + + const bool multiMeshSupported = isMED || isCGNS || isMESHIO; // file can hold several meshes if ( selected.Extent() == 0 || ( selected.Extent() > 1 && !multiMeshSupported )) return; SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -517,7 +556,7 @@ namespace SMESH::SMESH_Mesh_var aMesh = aMeshOrGroup->GetMesh(); QString aMeshName = (*aMeshIter).second; - if ( isMED || isCGNS ) // formats where group names must be unique + if (isMED || isCGNS || isMESHIO) // formats where group names must be unique { // check for equal group names within each mesh for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) { @@ -627,6 +666,7 @@ namespace // Get parameters of export operation QString aFilename; + QString aSelectedFilter; // for meshio to get a filter selected by user int aFormat =-1; // for MED version used for write bool isOkToWrite = true; // to check MED file version compatibility before adding a mesh in an existing file @@ -872,6 +912,14 @@ namespace delete zTolWdg; delete fd; } + else if (isMESHIO) + { + if (SMESHGUI_Meshio::CheckMeshCount(aMeshList)) + { + aFilename = SMESHGUI_Meshio::GetFileName(aSelectedFilter); + MESSAGE("aSelectedFilter: " << aSelectedFilter.toStdString()); + } + } else { return; @@ -954,16 +1002,28 @@ namespace toCreateGroups = true; aMesh->ExportGMF( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups ); } + else if (isMESHIO) + { + SMESHGUI_Meshio::ExportMesh(aMeshList, aFilename, aSelectedFilter); + } } catch (const SALOME::SALOME_Exception& S_ex) { wc.suspend(); + const QString exText(S_ex.details.text); + if ( S_ex.details.type == SALOME::COMM && // communicate about too large mesh strncmp( "format=", S_ex.details.sourceFile.in(), 7 ) == 0 ) SUIT_MessageBox::critical(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), QObject::tr(S_ex.details.text.in() )); + else if (exText.startsWith("MESHIO")) + { + SUIT_MessageBox::warning(SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_FAILED_SHORT") + "\n\n" + exText); + } else SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), @@ -2560,6 +2620,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SVTK_ViewWindow* vtkwnd = dynamic_cast( view ); //QAction* act = action( theCommandID ); + bool logAction(false); switch (theCommandID) { case SMESHOp::OpDelete: @@ -2572,6 +2633,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpImportSTL: case SMESHOp::OpImportCGNS: case SMESHOp::OpImportGMF: + case SMESHOp::OpImportMESHIO: case SMESHOp::OpPopupImportDAT: case SMESHOp::OpPopupImportUNV: case SMESHOp::OpPopupImportMED: @@ -2608,6 +2670,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpExportSTL: case SMESHOp::OpExportCGNS: case SMESHOp::OpExportGMF: + case SMESHOp::OpExportMESHIO: case SMESHOp::OpPopupExportDAT: case SMESHOp::OpPopupExportMED: case SMESHOp::OpPopupExportUNV: @@ -2877,6 +2940,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; case SMESHOp::OpCopyMesh: { + logAction = true; if (isStudyLocked()) break; EmitSignalDeactivateDialog(); ( new SMESHGUI_CopyMeshDlg( this ) )->show(); @@ -3702,6 +3766,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpTranslation: { + logAction = true; if(isStudyLocked()) break; if ( warnOnGeomModif() ) break; // action forbidden as geometry modified @@ -3717,6 +3782,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRotation: { + logAction = true; if(isStudyLocked()) break; if ( warnOnGeomModif() ) break; // action forbidden as geometry modified @@ -3732,6 +3798,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpSymmetry: { + logAction = true; if(isStudyLocked()) break; if ( warnOnGeomModif() ) break; // action forbidden as geometry modified @@ -3747,6 +3814,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpScale: { + logAction = true; if(isStudyLocked()) break; if ( warnOnGeomModif() ) break; // action forbidden as geometry modified @@ -3763,6 +3831,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpOffset: { + logAction = true; if(isStudyLocked()) break; if ( warnOnGeomModif() ) break; // action forbidden as geometry modified @@ -3779,6 +3848,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpSewing: { + logAction = true; if(isStudyLocked()) break; if ( warnOnGeomModif() ) break; // action forbidden as geometry modified @@ -4008,6 +4078,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) anApp->updateActions(); //SRN: To update a Save button in the toolbar //updateObjBrowser(); + if(logAction) + { + QAction* anAction = action( theCommandID ); + CAM_Application::logStructuredUserEvent( "Mesh", + "Operation", + anAction->text(), + "activated" ); + } return true; } @@ -4136,6 +4214,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpImportCGNS, "IMPORT_CGNS" ); #endif createSMESHAction( SMESHOp::OpImportGMF, "IMPORT_GMF" ); + createSMESHAction( SMESHOp::OpImportMESHIO, "IMPORT_MESHIO" ); createSMESHAction( SMESHOp::OpPopupImportUNV, "IMPORT_UNV"); createSMESHAction( SMESHOp::OpPopupImportMED, "IMPORT_MED"); createSMESHAction( SMESHOp::OpPopupImportSTL, "IMPORT_STL" ); @@ -4152,6 +4231,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpExportCGNS, "CGNS"); #endif createSMESHAction( SMESHOp::OpExportGMF, "GMF" ); + createSMESHAction( SMESHOp::OpExportMESHIO, "EXPORT_MESHIO" ); createSMESHAction( SMESHOp::OpPopupExportDAT, "DAT" ); createSMESHAction( SMESHOp::OpPopupExportMED, "MED" ); createSMESHAction( SMESHOp::OpPopupExportUNV, "UNV" ); @@ -4401,6 +4481,7 @@ void SMESHGUI::initialize( CAM_Application* app ) transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ), basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 ); + // Import menu //createMenu( SMESHOp::OpImportDAT, importId, -1 ); createMenu( SMESHOp::OpImportUNV, importId, -1 ); createMenu( SMESHOp::OpImportMED, importId, -1 ); @@ -4409,6 +4490,9 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpImportCGNS, importId, -1 ); #endif createMenu( SMESHOp::OpImportGMF, importId, -1 ); + createMenu( SMESHOp::OpImportMESHIO, importId, -1 ); // formats supported by meshio lib + + // Export menu createMenu( SMESHOp::OpExportDAT, exportId, -1 ); createMenu( SMESHOp::OpExportMED, exportId, -1 ); createMenu( SMESHOp::OpExportUNV, exportId, -1 ); @@ -4417,6 +4501,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpExportCGNS, exportId, -1 ); #endif createMenu( SMESHOp::OpExportGMF, exportId, -1 ); + createMenu( SMESHOp::OpExportMESHIO, exportId, -1 ); // formats supported by meshio lib createMenu( separator(), fileId, 10 ); createMenu( SMESHOp::OpDelete, editId, -1 ); @@ -4838,6 +4923,7 @@ void SMESHGUI::initialize( CAM_Application* app ) #endif createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); + createPopupItem( SMESHOp::OpExportMESHIO, OB, mesh_group, only_one_non_empty, anId ); anId = popupMgr()->insert( tr( "MEN_IMPORT" ), -1, -1 ); // IMPORT submenu createPopupItem( SMESHOp::OpPopupImportMED, OB, smesh, "", anId );