X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=e3b49472b6198d89ef8426367c14d2c8a5b16dcf;hp=701fc912788e6222945be80026c75f8f859af560;hb=d3e1cabf77f67408ac401e2d387e721605cb3b10;hpb=ec98b49f0e5d5ef9109ba1965c02a86c7dfbbb45 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 701fc9127..e3b49472b 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -194,7 +194,7 @@ namespace void ExportMeshToFile(int theCommandID); - void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap); + void SetDisplayMode(int theCommandID, VTK::MarkerMap& theMarkerMap); void SetDisplayEntity(int theCommandID); @@ -215,29 +215,34 @@ namespace QStringList filter; std::string myExtension; - if ( theCommandID == SMESHOp::OpImportMED ) { + if ( theCommandID == SMESHOp::OpImportMED || + theCommandID == SMESHOp::OpPopupImportMED ) { filter.append( QObject::tr( "MED_FILES_FILTER" ) + " (*.*med)" ); filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" ); } - else if ( theCommandID == SMESHOp::OpImportUNV ) { + else if ( theCommandID == SMESHOp::OpImportUNV || + theCommandID == SMESHOp::OpPopupImportUNV ) { filter.append( QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)" ); } - else if ( theCommandID == SMESHOp::OpImportDAT ) { + else if ( theCommandID == SMESHOp::OpImportDAT || + theCommandID == SMESHOp::OpPopupImportDAT ) { filter.append( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" ); } - else if ( theCommandID == SMESHOp::OpImportSTL ) { + else if ( theCommandID == SMESHOp::OpImportSTL || + theCommandID == SMESHOp::OpPopupImportSTL ) { filter.append( QObject::tr( "STL_FILES_FILTER" ) + " (*.stl)" ); } - #ifdef WITH_CGNS - else if ( theCommandID == SMESHOp::OpImportCGNS ) { + else if ( theCommandID == SMESHOp::OpImportCGNS || + theCommandID == SMESHOp::OpPopupImportCGNS ) { filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" ); } - #endif - else if ( theCommandID == SMESHOp::OpImportSAUV ) { - filter.append( QObject::tr( "SAUV files (*.sauv*)" ) ); - filter.append( QObject::tr( "All files (*)" ) ); + else if ( theCommandID == SMESHOp::OpImportSAUV || + theCommandID == SMESHOp::OpPopupImportSAUV ) { + filter.append( QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)" ); + filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" ); } - else if ( theCommandID == SMESHOp::OpImportGMF ) { + else if ( theCommandID == SMESHOp::OpImportGMF || + theCommandID == SMESHOp::OpPopupImportGMF ) { filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" ); filter.append( QObject::tr( "GMF_BINARY_FILES_FILTER") + " (*.meshb)" ); } @@ -271,7 +276,7 @@ namespace if ( filenames.count() > 0 ) { SUIT_OverrideCursor wc; - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); QStringList errors; QStringList anEntryList; @@ -283,6 +288,7 @@ namespace try { switch ( theCommandID ) { case SMESHOp::OpImportDAT: + case SMESHOp::OpPopupImportDAT: { // DAT format (currently unsupported) errors.append( QString( "%1 :\n\t%2" ).arg( filename ). @@ -290,6 +296,7 @@ namespace break; } case SMESHOp::OpImportUNV: + case SMESHOp::OpPopupImportUNV: { // UNV format aMeshes->length( 1 ); @@ -300,6 +307,7 @@ namespace break; } case SMESHOp::OpImportMED: + case SMESHOp::OpPopupImportMED: { // MED format SMESH::DriverMED_ReadStatus res; @@ -311,6 +319,7 @@ namespace break; } case SMESHOp::OpImportSTL: + case SMESHOp::OpPopupImportSTL: { // STL format aMeshes->length( 1 ); @@ -321,8 +330,8 @@ namespace } break; } - #ifdef WITH_CGNS case SMESHOp::OpImportCGNS: + case SMESHOp::OpPopupImportCGNS: { // CGNS format SMESH::DriverMED_ReadStatus res; @@ -333,8 +342,8 @@ namespace } break; } - #endif case SMESHOp::OpImportSAUV: + case SMESHOp::OpPopupImportSAUV: { // SAUV format SMESH::DriverMED_ReadStatus res; @@ -346,6 +355,7 @@ namespace break; } case SMESHOp::OpImportGMF: + case SMESHOp::OpPopupImportGMF: { // GMF format SMESH::ComputeError_var res; @@ -433,12 +443,8 @@ namespace theCommandID == SMESHOp::OpPopupExportUNV ); const bool isSTL = ( theCommandID == SMESHOp::OpExportSTL || theCommandID == SMESHOp::OpPopupExportSTL ); -#ifdef WITH_CGNS const bool isCGNS= ( theCommandID == SMESHOp::OpExportCGNS || theCommandID == SMESHOp::OpPopupExportCGNS ); -#else - const bool isCGNS= false; -#endif const bool isSAUV= ( theCommandID == SMESHOp::OpExportSAUV || theCommandID == SMESHOp::OpPopupExportSAUV ); const bool isGMF = ( theCommandID == SMESHOp::OpExportGMF || @@ -467,10 +473,14 @@ namespace QObject::tr( "SMESH_BAD_MESH_SELECTION" )); return; } - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aMeshItem ); - if ( aCheckWarn && !aGroup->_is_nil() ) { - QMessageBox msgBox(SUIT_MessageBox::Warning,QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_ONLY_GPOUP"),QMessageBox::StandardButton::NoButton, SMESHGUI::desktop()); + SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aMeshItem ); + if ( aCheckWarn && !aGroup->_is_nil() ) + { + QMessageBox msgBox(SUIT_MessageBox::Warning, + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_ONLY_GPOUP"), + QMessageBox::StandardButton::NoButton, + SMESHGUI::desktop()); QCheckBox dontShowCheckBox(QObject::tr("SMESH_WRN_SHOW_DLG_CHECKBOX")); msgBox.addButton(QMessageBox::Ok); msgBox.addButton(QMessageBox::Cancel); @@ -481,12 +491,12 @@ namespace lt->addWidget(btnbox, lt->rowCount(), 0, lt->rowCount(), lt->columnCount()); if(msgBox.exec() == QMessageBox::Ok) { - if(dontShowCheckBox.checkState() == Qt::Checked) - { - if ( resMgr ) - resMgr->setValue( "SMESH", "show_warning", false); - } - aCheckWarn = false; + if(dontShowCheckBox.checkState() == Qt::Checked) + { + if ( resMgr ) + resMgr->setValue( "SMESH", "show_warning", false); + } + aCheckWarn = false; } else return; @@ -620,7 +630,7 @@ namespace }; // is typeMsg complete? (compilation failure mains that enum SMDSAbs_EntityType changed) const int nbTypes = sizeof( typeMsg ) / sizeof( const char* ); - int _assert[( nbTypes == SMESH::Entity_Last ) ? 2 : -1 ]; _assert[0]=_assert[1]; + int _assert[( nbTypes == SMESH::Entity_Last ) ? 2 : -1 ]; _assert[0]=_assert[1]=0; QString andStr = " " + QObject::tr("SMESH_AND") + " ", comma(", "); for ( size_t iType = 0; iType < presentNotSupported.size(); ++iType ) { @@ -640,8 +650,7 @@ namespace // Get parameters of export operation - QString aFilename; - SMESH::MED_VERSION aFormat = SMESH::MED_V2_2; + QString aFilename; // Init the parameters with the default values bool aIsASCII_STL = true; bool toCreateGroups = false; @@ -718,27 +727,14 @@ namespace } else if ( isMED || isSAUV ) // Export to MED or SAUV { - QMap aFilterMap; - //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2)); + QStringList filters; if ( isMED ) { - 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 ); + filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)"; } else { // isSAUV - 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 ); + filters << QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)"; } - QStringList filters; - QString aDefaultFilter; - QMap::const_iterator it = aFilterMap.begin(); - for ( ; it != aFilterMap.end(); ++it ) { - filters.push_back( it.key() ); - if (it.value() == SMESH::MED_V2_2) - aDefaultFilter = it.key(); - } QStringList checkBoxes; checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM"); @@ -751,7 +747,6 @@ namespace new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true, wdgList ); fd->setWindowTitle( aTitle ); fd->setNameFilters( filters ); - fd->selectNameFilter( aDefaultFilter ); fd->SetChecked( toCreateGroups, 0 ); fd->SetChecked( toFindOutDim, 1 ); if ( !anInitialPath.isEmpty() ) @@ -779,34 +774,13 @@ namespace aFilename = QString::null; break; } - aFormat = aFilterMap[fd->selectedNameFilter()]; toOverwrite = fv->isOverwrite(); is_ok = true; if ( !aFilename.isEmpty() ) { - // med-2.1 does not support poly elements - if ( aFormat==SMESH::MED_V2_1 ) - for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) { - SMESH::SMESH_IDSource_var aMeshItem = (*aMeshIter).first; - SMESH::long_array_var nbElems = aMeshItem->GetMeshInfo(); - if ( nbElems[ SMESH::Entity_Polygon ] + nbElems[ SMESH::Entity_Quad_Polygon ] + - nbElems[ SMESH::Entity_Polyhedra ] + nbElems[ SMESH::Entity_Quad_Polyhedra ]) - { - int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_MED_V2_1").arg((*aMeshIter).second), - QObject::tr("SMESH_BUT_YES"), - QObject::tr("SMESH_BUT_NO"), 0, 1); - if (aRet != 0) { - is_ok = false; - break; - } - } - } if( !toOverwrite ) { // can't append to an existing using other format - SMESH::MED_VERSION aVersion = SMESH::MED_V2_1; - bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toUtf8().constData(), aVersion ); - if( !isVersionOk || aVersion != aFormat ) { + bool isVersionOk = SMESHGUI::GetSMESHGen()->CheckCompatibility( aFilename.toUtf8().constData() ); + if ( !isVersionOk ) { int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), QObject::tr("SMESH_EXPORT_MED_VERSION_COLLISION").arg(aFilename), @@ -891,11 +865,11 @@ namespace const QString& geoAssFields = aFieldList[ aMeshIndex ].second; const bool hasFields = ( fields.length() || !geoAssFields.isEmpty() ); if ( !hasFields && aMeshOrGroup->_is_equivalent( aMeshItem )) - aMeshItem->ExportToMEDX( aFilename.toUtf8().data(), toCreateGroups, - aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim ); + aMeshItem->ExportMED( aFilename.toUtf8().data(), toCreateGroups, + toOverwrite && aMeshIndex == 0, toFindOutDim ); else aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups, - aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim, + toOverwrite && aMeshIndex == 0, toFindOutDim, fields, geoAssFields.toLatin1().data() ); } } @@ -975,6 +949,7 @@ namespace aSel->selectedObjects( selected ); if ( selected.Extent() >= 1 ) { + SUIT_OverrideCursor wc; SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next()){ Handle(SALOME_InteractiveObject) IObject = It.Value(); @@ -1142,6 +1117,8 @@ namespace type = QObject::tr( "EQUAL_FACE" ); else if ( dynamic_cast< SMESH::Controls::CoincidentElements3D* >( f.get() ) ) type = QObject::tr( "EQUAL_VOLUME" ); + else if ( dynamic_cast< SMESH::Controls::NodeConnectivityNumber* >( f.get() ) ) + type = QObject::tr( "NODE_CONNECTIVITY_NB" ); return type; } @@ -1323,7 +1300,7 @@ namespace if ( selected.Extent() ) { Handle(SALOME_InteractiveObject) anIObject = selected.First(); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry()); if (aSObj) { if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) { @@ -1334,7 +1311,7 @@ namespace } } - void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap) + void SetDisplayMode(int theCommandID, VTK::MarkerMap& theMarkerMap) { SALOME_ListIO selected; SalomeApp_Application* app = @@ -1356,8 +1333,6 @@ namespace return; } - _PTR(Study) aStudy = appStudy->studyDS(); - aSel->selectedObjects( selected ); if ( selected.Extent() >= 1 ) @@ -1456,7 +1431,7 @@ namespace break; } - SMESHGUI_PropertiesDlg dlg( theMarkerMap[ aStudy->StudyId() ], SMESHGUI::desktop() ); + SMESHGUI_PropertiesDlg dlg( theMarkerMap, SMESHGUI::desktop() ); // nodes: color, marker dlg.setNodeColor( nodeColor ); if( markerType != VTK::MT_USER ) @@ -1512,8 +1487,8 @@ namespace orientation3d = dlg.orientation3d(); shrinkCoef = dlg.shrinkCoef() / 100.; - // store point markers map that might be changed by the user - theMarkerMap[ aStudy->StudyId() ] = dlg.customMarkers(); + // store point markers that might be changed by the user + theMarkerMap = dlg.customMarkers(); // set properties from dialog box to the presentations SALOME_ListIteratorOfListIO It( selected ); @@ -1529,9 +1504,8 @@ namespace anActor->SetMarkerStd( markerType, markerScale ); } else { - const VTK::MarkerMap& markerMap = theMarkerMap[ aStudy->StudyId() ]; - VTK::MarkerMap::const_iterator iter = markerMap.find( markerId ); - if ( iter != markerMap.end() ) + VTK::MarkerMap::const_iterator iter = theMarkerMap.find( markerId ); + if ( iter != theMarkerMap.end() ) anActor->SetMarkerTexture( markerId, iter->second.second ); } // volumes: normal color, reversed color (delta) @@ -1593,6 +1567,7 @@ namespace return; } // case SMESHOp::OpProperties: } // switch(theCommandID) + SUIT_OverrideCursor wc; SALOME_ListIteratorOfListIO It( selected ); for( ; It.More(); It.Next()){ Handle(SALOME_InteractiveObject) IObject = It.Value(); @@ -1636,6 +1611,7 @@ namespace ActionControl.Bind( 0, SMESH_Actor::eNone ); ActionControl.Bind( SMESHOp::OpFreeNode, SMESH_Actor::eFreeNodes ); ActionControl.Bind( SMESHOp::OpEqualNode, SMESH_Actor::eCoincidentNodes ); + ActionControl.Bind( SMESHOp::OpNodeConnectivityNb, SMESH_Actor::eNodeConnectivityNb ); ActionControl.Bind( SMESHOp::OpFreeEdge, SMESH_Actor::eFreeEdges ); ActionControl.Bind( SMESHOp::OpFreeBorder, SMESH_Actor::eFreeBorders ); ActionControl.Bind( SMESHOp::OpLength, SMESH_Actor::eLength ); @@ -1667,7 +1643,7 @@ namespace void Control( int theCommandID ) { SMESH_Actor::eControl aControl = SMESH_Actor::eControl( ActionToControl( theCommandID )); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); SALOME_ListIO selected; if ( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) @@ -1686,7 +1662,7 @@ namespace if ( !anIDSrc->_is_nil() ) { SMESH_Actor *anActor = SMESH::FindActorByEntry( anIO->getEntry()); if (( !anActor && selected.Extent() == 1 ) && - ( anActor = SMESH::CreateActor( aStudy, anIO->getEntry() ))) + ( anActor = SMESH::CreateActor( anIO->getEntry() ))) { anActor->SetControlMode( aControl ); SMESH::DisplayActor( SMESH::GetCurrentVtkView(), anActor ); @@ -1743,7 +1719,7 @@ namespace QString CheckTypeObject(const Handle(SALOME_InteractiveObject) & theIO) { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); _PTR(SObject) aSObj = aStudy->FindObjectID(theIO->getEntry()); if (aSObj) { _PTR(SComponent) aSComp = aSObj->GetFatherComponent(); @@ -1807,7 +1783,7 @@ void SMESHGUI::OnEditDelete() LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false ); - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); + _PTR(Study) aStudy = SMESH::getStudy(); _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder(); _PTR(GenericAttribute) anAttr; _PTR(AttributeIOR) anIOR; @@ -2195,17 +2171,6 @@ SMESHGUI* SMESHGUI::GetSMESHGUI() smeshMod = dynamic_cast( module ); } - if ( smeshMod && smeshMod->application() && smeshMod->application()->activeStudy() ) - { - SalomeApp_Study* study = dynamic_cast( smeshMod->application()->activeStudy() ); - if ( study ) - { - _PTR(Study) aStudy = study->studyDS(); - if ( aStudy ) - GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); - } - } - return smeshMod; } @@ -2378,36 +2343,27 @@ bool SMESHGUI::DefineDlgPosition(QWidget * aDlg, int &x, int &y) return true; } -//============================================================================= /*! - * - */ -//============================================================================= -static int isStudyLocked(_PTR(Study) theStudy){ - return theStudy->GetProperties()->IsLocked(); -} - -static bool checkLock(_PTR(Study) theStudy) { - if (isStudyLocked(theStudy)) { - SUIT_MessageBox::warning( SMESHGUI::desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("WRN_STUDY_LOCKED") ); + * \brief Verifies whether study of operation is locked + * \param theMess - specifies whether message box must be shown if study is locked + * \return State of study. +* +* Verifies whether study of operation is locked. If second parameter is TRUE and study +* is locked when corresponding message box appears +*/ +bool SMESHGUI::isStudyLocked( bool theMessage ) +{ + if ( SMESH::getStudy()->GetProperties()->IsLocked() ) + { + if ( theMessage ) + SUIT_MessageBox::warning( SMESHGUI::desktop(), + QObject::tr( "WRN_WARNING" ), + QObject::tr( "WRN_STUDY_LOCKED" ) ); return true; } return false; } -//======================================================================= -//function : CheckActiveStudyLocked -//purpose : -//======================================================================= - -bool SMESHGUI::isActiveStudyLocked() -{ - _PTR(Study) aStudy = activeStudy()->studyDS(); - return checkLock( aStudy ); -} - //============================================================================= /*! * @@ -2419,15 +2375,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if( !anApp ) return false; - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active SUIT_ResourceMgr* mgr = resourceMgr(); if( !mgr ) return false; - if (CORBA::is_nil(GetSMESHGen()->GetCurrentStudy())) { - GetSMESHGen()->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy()); - } - SUIT_ViewWindow* view = application()->desktop()->activeWindow(); SVTK_ViewWindow* vtkwnd = dynamic_cast( view ); @@ -2435,20 +2386,25 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) switch (theCommandID) { case SMESHOp::OpDelete: - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; OnEditDelete(); break; case SMESHOp::OpImportDAT: case SMESHOp::OpImportUNV: case SMESHOp::OpImportMED: case SMESHOp::OpImportSTL: -#ifdef WITH_CGNS case SMESHOp::OpImportCGNS: -#endif case SMESHOp::OpImportSAUV: case SMESHOp::OpImportGMF: + case SMESHOp::OpPopupImportDAT: + case SMESHOp::OpPopupImportUNV: + case SMESHOp::OpPopupImportMED: + case SMESHOp::OpPopupImportSTL: + case SMESHOp::OpPopupImportCGNS: + case SMESHOp::OpPopupImportSAUV: + case SMESHOp::OpPopupImportGMF: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; ::ImportMeshesFromFile(GetSMESHGen(),theCommandID); break; } @@ -2475,18 +2431,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpExportMED: case SMESHOp::OpExportUNV: case SMESHOp::OpExportSTL: -#ifdef WITH_CGNS case SMESHOp::OpExportCGNS: -#endif case SMESHOp::OpExportSAUV: case SMESHOp::OpExportGMF: case SMESHOp::OpPopupExportDAT: case SMESHOp::OpPopupExportMED: case SMESHOp::OpPopupExportUNV: case SMESHOp::OpPopupExportSTL: -#ifdef WITH_CGNS case SMESHOp::OpPopupExportCGNS: -#endif case SMESHOp::OpPopupExportSAUV: case SMESHOp::OpPopupExportGMF: { @@ -2596,6 +2548,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpOrientationOnFaces: { + SUIT_OverrideCursor wc; LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -2613,7 +2566,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpUpdate: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SUIT_OverrideCursor wc; try { #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 @@ -2661,9 +2614,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) extractContainers( sel_objects, to_process ); try { -#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; -#endif if (vtkwnd) { SALOME_ListIteratorOfListIO It( to_process ); for ( ; It.More(); It.Next()) @@ -2682,7 +2633,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } // PAL13338 + PAL15161 --> - if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !checkLock(aStudy)) { + if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !isStudyLocked()) { SMESH::UpdateView(); SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged(); } @@ -2704,7 +2655,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpNode: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); @@ -2731,14 +2682,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; case SMESHOp::OpCopyMesh: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; EmitSignalDeactivateDialog(); ( new SMESHGUI_CopyMeshDlg( this ) )->show(); } break; case SMESHOp::OpBuildCompoundMesh: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; EmitSignalDeactivateDialog(); ( new SMESHGUI_BuildCompoundDlg( this ) )->show(); } @@ -2753,7 +2704,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; /*Standard_Boolean aRes; @@ -2783,7 +2734,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -2802,7 +2753,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpSmoothing: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SmoothingDlg( this ) )->show(); @@ -2814,7 +2765,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpExtrusion: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionDlg ( this ) )->show(); @@ -2825,7 +2776,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpExtrusionAlongAPath: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionAlongPathDlg( this ) )->show(); @@ -2836,7 +2787,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRevolution: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RevolutionDlg( this ) )->show(); @@ -2848,7 +2799,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpPatternMapping: { - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; if ( vtkwnd ) { @@ -2877,7 +2828,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); @@ -2904,7 +2855,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -2917,7 +2868,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) // check if submesh is selected Handle(SALOME_InteractiveObject) IObject = selected.First(); if (IObject->hasEntry()) { - _PTR(SObject) aSObj = aStudy->FindObjectID(IObject->getEntry()); + _PTR(SObject) aSObj = SMESH::getStudy()->FindObjectID(IObject->getEntry()); if( aSObj ) { SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( aSObj ) ); if (!aSubMesh->_is_nil()) { @@ -2981,7 +2932,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3011,7 +2962,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpAddElemGroupPopup: // Add elements to group { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if (myState == 800) { SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox; if (aDlg) aDlg->onAdd(); @@ -3021,7 +2972,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRemoveElemGroupPopup: // Remove elements from group { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if (myState == 800) { SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox; if (aDlg) aDlg->onRemove(); @@ -3037,7 +2988,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3077,7 +3028,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -3097,7 +3048,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpGroupUnderlyingElem: // Create groups of entities from existing groups of superior dimensions { - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -3115,7 +3066,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - if ( checkLock( aStudy ) ) + if ( isStudyLocked() ) break; EmitSignalDeactivateDialog(); @@ -3157,7 +3108,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpEditHypothesis: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; @@ -3202,7 +3153,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpUnassign: // REMOVE HYPOTHESIS / ALGORITHMS { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SUIT_OverrideCursor wc; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3233,7 +3184,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpPyramid: case SMESHOp::OpHexagonalPrism: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Edge; @@ -3259,7 +3210,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpPolyhedron: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_CreatePolyhedralVolumeDlg( this ) )->show(); @@ -3281,7 +3232,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpQuadraticHexahedron: case SMESHOp::OpTriQuadraticHexahedron: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Last; @@ -3311,7 +3262,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRemoveNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveNodesDlg( this ) )->show(); @@ -3324,7 +3275,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRemoveElements: // REMOVES ELEMENTS { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveElementsDlg( this ) )->show(); @@ -3338,7 +3289,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpClearMesh: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) @@ -3349,17 +3300,17 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) for ( ; It.More(); It.Next() ) { Handle(SALOME_InteractiveObject) IOS = It.Value(); - SMESH::SMESH_Mesh_var aMesh = - SMESH::IObjectToInterface(IOS); + SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(IOS); if ( aMesh->_is_nil()) continue; try { - SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true); aMesh->Clear(); + if ( aMesh->NbNodes() == 0 ) // imported mesh is not empty + SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true); _PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh); SMESH::ModifiedMesh( aMeshSObj, false, true); // hide groups and submeshes _PTR(ChildIterator) anIter = - SMESH::GetActiveStudyDocument()->NewChildIterator( aMeshSObj ); + SMESH::getStudy()->NewChildIterator( aMeshSObj ); for ( anIter->InitEx(true); anIter->More(); anIter->Next() ) { _PTR(SObject) so = anIter->Value(); @@ -3378,7 +3329,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRemoveOrphanNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); @@ -3417,7 +3368,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRenumberingNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 0 ) )->show(); @@ -3431,7 +3382,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRenumberingElements: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 1 ) )->show(); @@ -3445,7 +3396,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpTranslation: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_TranslationDlg( this ) )->show(); @@ -3458,7 +3409,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpRotation: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RotationDlg( this ) )->show(); @@ -3471,7 +3422,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpSymmetry: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SymmetryDlg( this ) )->show(); @@ -3484,7 +3435,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpScale: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ScaleDlg( this ) )->show(); @@ -3498,7 +3449,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpSewing: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SewingDlg( this ) )->show(); @@ -3511,7 +3462,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpMergeNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 0 ) )->show(); @@ -3524,7 +3475,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpMergeElements: { - if (checkLock(aStudy)) break; + if (isStudyLocked()) break; if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 1 ) )->show(); @@ -3541,7 +3492,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpDuplicateNodes: { - if(checkLock(aStudy)) break; + if(isStudyLocked()) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_DuplicateNodesDlg( this ) )->show(); @@ -3577,6 +3528,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) // CONTROLS case SMESHOp::OpFreeNode: case SMESHOp::OpEqualNode: + case SMESHOp::OpNodeConnectivityNb: case SMESHOp::OpFreeEdge: case SMESHOp::OpFreeBorder: case SMESHOp::OpLength: @@ -3810,13 +3762,21 @@ void SMESHGUI::initialize( CAM_Application* app ) //createSMESHAction( SMESHOp::OpImportDAT, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) ); createSMESHAction( SMESHOp::OpImportUNV, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_I) ); createSMESHAction( SMESHOp::OpImportMED, "IMPORT_MED", "", (Qt::CTRL+Qt::Key_M) ); - //createSMESHAction( 114, "NUM" ); createSMESHAction( SMESHOp::OpImportSTL, "IMPORT_STL" ); #ifdef WITH_CGNS createSMESHAction( SMESHOp::OpImportCGNS, "IMPORT_CGNS" ); #endif createSMESHAction( SMESHOp::OpImportSAUV, "IMPORT_SAUV" ); createSMESHAction( SMESHOp::OpImportGMF, "IMPORT_GMF" ); + createSMESHAction( SMESHOp::OpPopupImportUNV, "IMPORT_UNV"); + createSMESHAction( SMESHOp::OpPopupImportMED, "IMPORT_MED"); + createSMESHAction( SMESHOp::OpPopupImportSTL, "IMPORT_STL" ); +#ifdef WITH_CGNS + createSMESHAction( SMESHOp::OpPopupImportCGNS, "IMPORT_CGNS" ); +#endif + createSMESHAction( SMESHOp::OpPopupImportSAUV, "IMPORT_SAUV" ); + createSMESHAction( SMESHOp::OpPopupImportGMF, "IMPORT_GMF" ); + createSMESHAction( SMESHOp::OpExportDAT, "DAT" ); createSMESHAction( SMESHOp::OpExportMED, "MED" ); createSMESHAction( SMESHOp::OpExportUNV, "UNV" ); @@ -3846,7 +3806,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpBuildCompoundMesh, "BUILD_COMPOUND", "ICON_BUILD_COMPOUND" ); createSMESHAction( SMESHOp::OpCopyMesh, "COPY_MESH", "ICON_COPY_MESH" ); createSMESHAction( SMESHOp::OpCompute, "COMPUTE", "ICON_COMPUTE" ); - createSMESHAction( SMESHOp::OpComputeSubMesh, "COMPUTE_SUBMESH", "ICON_COMPUTE" ); + createSMESHAction( SMESHOp::OpComputeSubMesh, "COMPUTE_SUBMESH", "ICON_COMPUTE" ); createSMESHAction( SMESHOp::OpPreCompute, "PRECOMPUTE", "ICON_PRECOMPUTE" ); createSMESHAction( SMESHOp::OpEvaluate, "EVALUATE", "ICON_EVALUATE" ); createSMESHAction( SMESHOp::OpMeshOrder, "MESH_ORDER", "ICON_MESH_ORDER"); @@ -3859,8 +3819,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpIntersectGroups, "INT_GROUP", "ICON_INTERSECT" ); createSMESHAction( SMESHOp::OpCutGroups, "CUT_GROUP", "ICON_CUT" ); createSMESHAction( SMESHOp::OpGroupUnderlyingElem, "UNDERLYING_ELEMS", "ICON_UNDERLYING_ELEMS" ); - createSMESHAction( SMESHOp::OpAddElemGroupPopup, "ADD" ); - createSMESHAction( SMESHOp::OpRemoveElemGroupPopup, "REMOVE" ); + createSMESHAction( SMESHOp::OpAddElemGroupPopup, "ADD_TO_GROUP" ); + createSMESHAction( SMESHOp::OpRemoveElemGroupPopup, "REMOVE_FROM_GROUP" ); createSMESHAction( SMESHOp::OpDeleteGroup, "DEL_GROUP", "ICON_DEL_GROUP" ); createSMESHAction( SMESHOp::OpMeshInformation , "ADV_INFO", "ICON_ADV_INFO" ); //createSMESHAction( SMESHOp::OpStdInfo, "STD_INFO", "ICON_STD_INFO" ); @@ -3869,6 +3829,7 @@ void SMESHGUI::initialize( CAM_Application* app ) //update createSMESHAction( SMESHOp::OpFreeNode, "FREE_NODE", "ICON_FREE_NODE", 0, true ); createSMESHAction( SMESHOp::OpEqualNode, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true ); + createSMESHAction( SMESHOp::OpNodeConnectivityNb, "NODE_CONNECTIVITY_NB", "ICON_NODE_CONN_NB", 0, true ); createSMESHAction( SMESHOp::OpFreeEdge, "FREE_EDGE", "ICON_FREE_EDGE", 0, true ); createSMESHAction( SMESHOp::OpFreeBorder, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true ); createSMESHAction( SMESHOp::OpLength, "LENGTH", "ICON_LENGTH", 0, true ); @@ -3893,7 +3854,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpBareBorderVolume, "BARE_BORDER_VOLUME", "ICON_BARE_BORDER_VOLUME", 0, true ); createSMESHAction( SMESHOp::OpOverConstrainedVolume, "OVER_CONSTRAINED_VOLUME", "ICON_OVER_CONSTRAINED_VOLUME", 0, true ); createSMESHAction( SMESHOp::OpEqualVolume, "EQUAL_VOLUME", "ICON_EQUAL_VOLUME", 0, true ); - createSMESHAction( SMESHOp::OpOverallMeshQuality, "OVERALL_MESH_QUALITY" ); + createSMESHAction( SMESHOp::OpOverallMeshQuality, "OVERALL_MESH_QUALITY", "ICON_OVL_MESH_QUALITY" ); createSMESHAction( SMESHOp::OpNode, "NODE", "ICON_DLG_NODE" ); createSMESHAction( SMESHOp::OpElem0D, "ELEM0D", "ICON_DLG_ELEM0D" ); @@ -3995,14 +3956,15 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpPropertiesArea, "MEASURE_AREA", "ICON_MEASURE_AREA" ); createSMESHAction( SMESHOp::OpPropertiesVolume, "MEASURE_VOLUME", "ICON_MEASURE_VOLUME" ); - createSMESHAction( SMESHOp::OpHide, "HIDE" ); - createSMESHAction( SMESHOp::OpShow, "SHOW" ); + createSMESHAction( SMESHOp::OpHide, "HIDE", "ICON_HIDE" ); + createSMESHAction( SMESHOp::OpShow, "SHOW", "ICON_SHOW" ); createSMESHAction( SMESHOp::OpShowOnly, "DISPLAY_ONLY" ); createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" ); QList aCtrlActions; - aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode // node controls + aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode + << SMESHOp::OpNodeConnectivityNb // node controls << SMESHOp::OpFreeEdge << SMESHOp::OpFreeBorder << SMESHOp::OpLength << SMESHOp::OpConnection << SMESHOp::OpEqualEdge // edge controls << SMESHOp::OpFreeFace << SMESHOp::OpLength2D << SMESHOp::OpConnection2D @@ -4099,6 +4061,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpFreeNode, nodeId, -1 ); createMenu( SMESHOp::OpEqualNode, nodeId, -1 ); + //createMenu( SMESHOp::OpNodeConnectivityNb, nodeId, -1 ); createMenu( SMESHOp::OpFreeBorder, edgeId, -1 ); createMenu( SMESHOp::OpLength, edgeId, -1 ); createMenu( SMESHOp::OpConnection, edgeId, -1 ); @@ -4244,6 +4207,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpFreeNode, ctrl0dTb ); createTool( SMESHOp::OpEqualNode, ctrl0dTb ); + //createTool( SMESHOp::OpNodeConnectivityNb, ctrl0dTb ); createTool( SMESHOp::OpFreeBorder, ctrl1dTb ); createTool( SMESHOp::OpLength, ctrl1dTb ); @@ -4349,6 +4313,7 @@ void SMESHGUI::initialize( CAM_Application* app ) group = pat.arg( SMESHGUI_Selection::typeName( SMESH::GROUP ) ), hypo = pat.arg( SMESHGUI_Selection::typeName( SMESH::HYPOTHESIS ) ), algo = pat.arg( SMESHGUI_Selection::typeName( SMESH::ALGORITHM ) ), + smesh = pat.arg( SMESHGUI_Selection::typeName( SMESH::COMPONENT ) ), elems = QString( "'%1' '%2' '%3' '%4' '%5' '%6'" ). arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_VERTEX ) ). arg( SMESHGUI_Selection::typeName( SMESH::SUBMESH_EDGE ) ). @@ -4369,9 +4334,10 @@ void SMESHGUI::initialize( CAM_Application* app ) isNotEmpty("numberOfNodes <> 0"), // has nodes, edges, etc in VISIBLE! actor - hasNodes("(numberOfNodes > 0 )"),//&& isVisible)"), + hasNodes("(numberOfNodes > 0 ) && hasActor"), hasElems("(count( elemTypes ) > 0)"), hasDifferentElems("(count( elemTypes ) > 1)"), + hasDifferentObjElems("(count( objElemTypes ) > 1)"), hasBalls("({'BallElem'} in elemTypes)"), hasElems0d("({'Elem0d'} in elemTypes)"), hasEdges("({'Edge'} in elemTypes)"), @@ -4426,12 +4392,23 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); + + anId = popupMgr()->insert( tr( "MEN_IMPORT" ), -1, -1 ); // IMPORT submenu + createPopupItem( SMESHOp::OpPopupImportMED, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportUNV, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportSTL, OB, smesh, "", anId ); +#ifdef WITH_CGNS + createPopupItem( SMESHOp::OpPopupImportCGNS, OB, smesh, "", anId ); +#endif + createPopupItem( SMESHOp::OpPopupImportSAUV, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportGMF, OB, smesh, "", anId ); + createPopupItem( SMESHOp::OpPopupImportDAT, OB, smesh, "", anId ); popupMgr()->insert( separator(), -1, 0 ); // popup for viewer createPopupItem( SMESHOp::OpEditGroup, View, group ); - createPopupItem( SMESHOp::OpAddElemGroupPopup, View, elems ); - createPopupItem( SMESHOp::OpRemoveElemGroupPopup, View, elems ); + createPopupItem( SMESHOp::OpAddElemGroupPopup, View, elems, "&& guiState = 800" ); + createPopupItem( SMESHOp::OpRemoveElemGroupPopup, View, elems, "&& guiState = 800" ); popupMgr()->insert( separator(), -1, 0 ); createPopupItem( SMESHOp::OpUpdate, View, mesh_part ); @@ -4482,7 +4459,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( SMESHOp::OpDMShading ), "displayMode = 'eSurface'", QtxPopupMgr::ToggleRule ); popupMgr()->insert( action( SMESHOp::OpDMNodes ), anId, -1 ); - popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes + "&&" + hasElems, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( SMESHOp::OpDMNodes ), "displayMode = 'ePoint'", QtxPopupMgr::ToggleRule ); popupMgr()->insert( separator(), anId, -1 ); @@ -4521,7 +4498,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( SMESHOp::OpDEChoose ), anId, -1 ); - popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&&" + aType + "&&" + isNotEmpty, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&& $type in {" + mesh + "} &&" + hasDifferentObjElems, QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), anId, -1 ); @@ -4564,9 +4541,9 @@ void SMESHGUI::initialize( CAM_Application* app ) // Controls //------------------------------------------------- QString - aMeshInVtkHasNodes = aMeshInVTK + "&&" + hasNodes, - aMeshInVtkHasEdges = aMeshInVTK + "&&" + hasEdges, - aMeshInVtkHasFaces = aMeshInVTK + "&&" + hasFaces, + aMeshInVtkHasNodes = aMeshInVTK + "&&" + hasNodes, + aMeshInVtkHasEdges = aMeshInVTK + "&&" + hasEdges, + aMeshInVtkHasFaces = aMeshInVTK + "&&" + hasFaces, aMeshInVtkHasVolumes = aMeshInVTK + "&&" + hasVolumes; anId = popupMgr()->insert( tr( "MEN_CTRL" ), -1, -1 ); @@ -4586,6 +4563,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( SMESHOp::OpEqualNode ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( SMESHOp::OpEqualNode ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule); + // popupMgr()->insert( action( SMESHOp::OpNodeConnectivityNb ), aSubId, -1 ); + // popupMgr()->setRule( action( SMESHOp::OpNodeConnectivityNb ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); + // popupMgr()->setRule( action( SMESHOp::OpNodeConnectivityNb ), "controlMode = 'eNodeConnectivityNb'", QtxPopupMgr::ToggleRule ); + aSubId = popupMgr()->insert( tr( "MEN_EDGE_CTRL" ), anId, -1 ); // EDGE CONTROLS popupMgr()->insert( action( SMESHOp::OpFreeBorder ), aSubId, -1 ); @@ -4804,11 +4785,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) action(SMESHOp::OpDelete)->setEnabled(true); // Delete: Key_Delete // 0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH - GetSMESHGen()->SetCurrentStudy(SALOMEDS::Study::_nil()); - if ( SalomeApp_Study* s = dynamic_cast( study )) { - if ( _PTR(Study) aStudy = s->studyDS() ) - GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); - } + GetSMESHGen()->UpdateStudy(); // get all view currently opened in the study and connect their signals to // the corresponding slots of the class. @@ -4841,7 +4818,7 @@ void SMESHGUI::studyClosed( SUIT_Study* s ) { if( !s ) return; - SMESH::RemoveVisuData( s->id() ); + SMESH::RemoveVisuData(); SalomeApp_Module::studyClosed( s ); } @@ -4857,16 +4834,11 @@ void SMESHGUI::OnGUIEvent() SMESH::SMESH_Gen_var SMESHGUI::GetSMESHGen() { - _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active if ( CORBA::is_nil( myComponentSMESH ) ) - { - SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH - if ( aStudy ) - aGUI.myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy()); - return aGUI.myComponentSMESH; - } - if ( aStudy ) - myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy()); + { + SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH + return aGUI.myComponentSMESH; + } return myComponentSMESH; } @@ -4986,19 +4958,6 @@ void SMESHGUI::createPreferences() setPreferenceProperty( lim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); addPreference( tr( "PREF_INCREMENTAL_LIMIT" ), autoUpdate, LightApp_Preferences::Bool, "SMESH", "incremental_limit" ); - int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); - setPreferenceProperty( qaGroup, "columns", 2 ); - addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" ); - addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" ); - int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); - setPreferenceProperty( prec, "min", 0 ); - setPreferenceProperty( prec, "max", 100 ); - int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" ); - setPreferenceProperty( doubleNodesTol, "precision", 10 ); - setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 ); - setPreferenceProperty( doubleNodesTol, "max", 1000000.0 ); - setPreferenceProperty( doubleNodesTol, "step", 0.0000001 ); - int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE_GROUP" ), genTab ); setPreferenceProperty( dispgroup, "columns", 2 ); int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); @@ -5032,6 +4991,18 @@ void SMESHGUI::createPreferences() setPreferenceProperty( maxAngle, "min", 1 ); setPreferenceProperty( maxAngle, "max", 90 ); + int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); + setPreferenceProperty( qaGroup, "columns", 2 ); + addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" ); + addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" ); + int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); + setPreferenceProperty( prec, "min", 0 ); + setPreferenceProperty( prec, "max", 100 ); + int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" ); + setPreferenceProperty( doubleNodesTol, "precision", 10 ); + setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 ); + setPreferenceProperty( doubleNodesTol, "max", 1000000.0 ); + setPreferenceProperty( doubleNodesTol, "step", 0.0000001 ); int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab ); @@ -5469,7 +5440,7 @@ void SMESHGUI::update( const int flags ) /*! * \brief Set default selection mode * -* SLOT called when operation commited. Sets default selection mode +* SLOT called when operation committed. Sets default selection mode */ //================================================================================ void SMESHGUI::onOperationCommited( SUIT_Operation* ) @@ -5577,8 +5548,7 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const void SMESHGUI::switchToOperation(int id) { - if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) - activeStudy()->abortAllOperations(); + activeStudy()->abortAllOperations(); startOperation( id ); } @@ -5671,12 +5641,11 @@ void SMESHGUI::storeVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - // store map of custom markers - const VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ]; - if( !aMarkerMap.empty() ) + // store custom markers + if( !myMarkerMap.empty() ) { - VTK::MarkerMap::const_iterator anIter = aMarkerMap.begin(); - for( ; anIter != aMarkerMap.end(); anIter++ ) + VTK::MarkerMap::const_iterator anIter = myMarkerMap.begin(); + for( ; anIter != myMarkerMap.end(); anIter++ ) { int anId = anIter->first; VTK::MarkerData aMarkerData = anIter->second; @@ -5791,7 +5760,7 @@ void SMESHGUI::storeVisualParameters (int savePoint) Handle(SALOME_InteractiveObject) io = aSmeshActor->getIO(); if (io->hasEntry()) { - // entry is "encoded" = it does NOT contain component adress, + // entry is "encoded" = it does NOT contain component address, // since it is a subject to change on next component loading std::string entry = ip->encodeEntry(io->getEntry(), componentName); @@ -6024,8 +5993,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) savePoint); _PTR(IParameters) ip = ClientFactory::getIParameters(ap); - // restore map of custom markers and map of clipping planes - VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ]; + // restore custom markers and map of clipping planes TPlaneDataMap aPlaneDataMap; std::vector properties = ip->getProperties(); @@ -6082,7 +6050,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) aMarkerTexture.push_back( aChar.digitValue() ); } - aMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture ); + myMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture ); } else if( aPropertyType == "ClippingPlane" ) { @@ -6192,7 +6160,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) for (std::vector::iterator entIt = entries.begin(); entIt != entries.end(); ++entIt) { - // entry is a normal entry - it should be "decoded" (setting base adress of component) + // entry is a normal entry - it should be "decoded" (setting base address of component) QString entry (ip->decodeEntry(*entIt).c_str()); // Check that the entry corresponds to a real object in the Study @@ -6600,8 +6568,8 @@ void SMESHGUI::restoreVisualParameters (int savePoint) aSmeshActor->SetMarkerStd( (VTK::MarkerType)aParam1, (VTK::MarkerScale)aParam2 ); } else if( data[0] == "custom" ) { - VTK::MarkerMap::const_iterator markerIt = aMarkerMap.find( aParam1 ); - if( markerIt != aMarkerMap.end() ) { + VTK::MarkerMap::const_iterator markerIt = myMarkerMap.find( aParam1 ); + if( markerIt != myMarkerMap.end() ) { VTK::MarkerData aMarkerData = markerIt->second; aSmeshActor->SetMarkerTexture( aParam1, aMarkerData.second ); } @@ -7005,7 +6973,7 @@ bool SMESHGUI::renameAllowed( const QString& entry) const { return false; // check type to prevent renaming of inappropriate objects - int aType = SMESHGUI_Selection::type(qPrintable(entry), SMESH::GetActiveStudyDocument()); + int aType = SMESHGUI_Selection::type(qPrintable(entry)); if (aType == SMESH::MESH || aType == SMESH::GROUP || aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND || aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE || @@ -7052,7 +7020,7 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { if ( obj->FindAttribute(anAttr, "AttributeName") ) { aName = anAttr; // check type to prevent renaming of inappropriate objects - int aType = SMESHGUI_Selection::type( qPrintable(entry), SMESH::GetActiveStudyDocument() ); + int aType = SMESHGUI_Selection::type( qPrintable(entry)); if (aType == SMESH::MESH || aType == SMESH::GROUP || aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND || aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE ||