X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=e96570c1f06233a1e4e7d7c9d0bf14033abebf41;hb=f79e964b7592c63818f892516f3b4936d7704397;hp=b4bba728b4c23385e3ec64abac78ef7036d7d83c;hpb=0fc0831670e27a5611b941c52dc152fd63964515;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index b4bba728b..e96570c1f 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -97,13 +97,14 @@ #include "SMESH_version.h" -#include "SMESH_ControlsDef.hxx" #include "SMESH_Actor.h" #include "SMESH_ActorUtils.h" #include "SMESH_Client.hxx" +#include "SMESH_Comment.hxx" +#include "SMESH_ControlsDef.hxx" #include "SMESH_ScalarBarActor.h" -#include #include "SMESH_TypeFilter.hxx" +#include "SMESH_Component_Generator.hxx" // SALOME GUI includes #include @@ -113,6 +114,7 @@ #include #include #include +#include #include #include #include @@ -2154,13 +2156,20 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil(); * */ //============================================================================= -SMESHGUI::SMESHGUI() : -SalomeApp_Module( "SMESH" ) +SMESHGUI::SMESHGUI() : SalomeApp_Module( "SMESH" ) { if ( CORBA::is_nil( myComponentSMESH ) ) { CORBA::Boolean anIsEmbeddedMode; - myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); + SALOME_NamingService_Abstract *ns = SalomeApp_Application::namingService(); + if( dynamic_cast(ns) ) + myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); + else + { + Engines::EngineComponent_var comp = RetrieveSMESHInstance(); + myComponentSMESH = SMESH::SMESH_Gen::_narrow(comp); + } + //MESSAGE("-------------------------------> anIsEmbeddedMode=" << anIsEmbeddedMode); // 0019923: EDF 765 SMESH : default values of hypothesis @@ -2759,7 +2768,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) OCC_CATCH_SIGNALS; SMESH::UpdateView(); } - catch (std::bad_alloc) { // PAL16774 (Crash after display of many groups) + catch (std::bad_alloc&) { // PAL16774 (Crash after display of many groups) SMESH::OnVisuException(); } catch (...) { // PAL16774 (Crash after display of many groups) @@ -2863,15 +2872,31 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpMeshOrder: case SMESHOp::OpCreateSubMesh: if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified - + break; // action forbidden as geometry modified + // fall through case SMESHOp::OpCreateMesh: case SMESHOp::OpCompute: case SMESHOp::OpComputeSubMesh: case SMESHOp::OpPreCompute: case SMESHOp::OpEvaluate: + case SMESHOp::OpShowErrors: startOperation( theCommandID ); break; + case SMESHOp::OpRecompute: + { + if ( isStudyLocked() ) + break; + SALOME_ListIO selected; + if ( LightApp_SelectionMgr *sel = selectionMgr() ) + sel->selectedObjects( selected ); + if ( selected.Extent() == 1 ) { + SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( selected.First() ); + if ( !aMesh->_is_nil() ) + aMesh->Clear(); + startOperation( SMESHOp::OpCompute ); + } + } + break; case SMESHOp::OpCopyMesh: { if (isStudyLocked()) break; @@ -2899,7 +2924,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified /*Standard_Boolean aRes; SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(IObject); @@ -2931,7 +2956,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); SMESHGUI_MultiEditDlg* aDlg = NULL; @@ -2951,7 +2976,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SmoothingDlg( this ) )->show(); @@ -2965,7 +2990,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if (isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionDlg ( this ) )->show(); @@ -2978,7 +3003,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if (isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionAlongPathDlg( this ) )->show(); @@ -2991,7 +3016,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RevolutionDlg( this ) )->show(); @@ -3006,7 +3031,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); @@ -3024,7 +3049,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpCreateGeometryGroup: { if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified startOperation( theCommandID ); break; } @@ -3038,7 +3063,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); @@ -3067,7 +3092,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3146,7 +3171,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3245,7 +3270,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); @@ -3267,7 +3292,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); SMESHGUI_GroupOpDlg* aDlg = new SMESHGUI_DimGroupDlg( this ); @@ -3281,7 +3306,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified EmitSignalDeactivateDialog(); SMESHGUI_FaceGroupsSeparatedByEdgesDlg* aDlg = new SMESHGUI_FaceGroupsSeparatedByEdgesDlg( this ); @@ -3342,7 +3367,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; @@ -3389,7 +3414,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified SUIT_OverrideCursor wc; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3422,7 +3447,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Edge; @@ -3450,7 +3475,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_CreatePolyhedralVolumeDlg( this ) )->show(); @@ -3475,7 +3500,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Last; @@ -3508,7 +3533,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveNodesDlg( this ) )->show(); @@ -3523,7 +3548,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveElementsDlg( this ) )->show(); @@ -3539,7 +3564,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) @@ -3580,7 +3605,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); @@ -3621,7 +3646,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 0 ) )->show(); @@ -3637,7 +3662,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 1 ) )->show(); @@ -3653,7 +3678,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_TranslationDlg( this ) )->show(); @@ -3668,7 +3693,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RotationDlg( this ) )->show(); @@ -3683,7 +3708,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SymmetryDlg( this ) )->show(); @@ -3698,7 +3723,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ScaleDlg( this ) )->show(); @@ -3714,7 +3739,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_OffsetDlg( this ) )->show(); @@ -3730,7 +3755,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SewingDlg( this ) )->show(); @@ -3745,7 +3770,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 0 ) )->show(); @@ -3760,7 +3785,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if (isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 1 ) )->show(); @@ -3773,7 +3798,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpMoveNode: // MAKE MESH PASS THROUGH POINT if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified startOperation( SMESHOp::OpMoveNode ); break; @@ -3781,7 +3806,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(isStudyLocked()) break; if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_DuplicateNodesDlg( this ) )->show(); @@ -3795,7 +3820,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpElem0DOnElemNodes: // 0D_ON_ALL_NODES if ( warnOnGeomModif() ) - break; // action forbiden as geometry modified + break; // action forbidden as geometry modified startOperation( SMESHOp::OpElem0DOnElemNodes ); break; @@ -3945,7 +3970,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) * */ //============================================================================= -bool SMESHGUI::OnMousePress( QMouseEvent * pe, SUIT_ViewWindow * wnd ) +bool SMESHGUI::OnMousePress( QMouseEvent * /*pe*/, SUIT_ViewWindow * /*wnd*/ ) { return false; } @@ -3955,7 +3980,7 @@ bool SMESHGUI::OnMousePress( QMouseEvent * pe, SUIT_ViewWindow * wnd ) * */ //============================================================================= -bool SMESHGUI::OnMouseMove( QMouseEvent * pe, SUIT_ViewWindow * wnd ) +bool SMESHGUI::OnMouseMove( QMouseEvent * /*pe*/, SUIT_ViewWindow * /*wnd*/ ) { return true; } @@ -3965,7 +3990,7 @@ bool SMESHGUI::OnMouseMove( QMouseEvent * pe, SUIT_ViewWindow * wnd ) * */ //============================================================================= -bool SMESHGUI::OnKeyPress( QKeyEvent * pe, SUIT_ViewWindow * wnd ) +bool SMESHGUI::OnKeyPress( QKeyEvent * /*pe*/, SUIT_ViewWindow * /*wnd*/ ) { return true; } @@ -3998,7 +4023,7 @@ void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QStr if ( !icon_id.isEmpty() ) pix = resMgr->loadPixmap( "SMESH", tr( icon_id.toLatin1().data() ) ); else - pix = resMgr->loadPixmap( "SMESH", tr( QString( "ICO_%1" ).arg( po_id ).toLatin1().data() ), false ); + pix = resMgr->loadPixmap( "SMESH", tr( QString( "ICON_%1" ).arg( po_id ).toLatin1().data() ), false ); if ( !pix.isNull() ) icon = QIcon( pix ); @@ -4105,7 +4130,9 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpCopyMesh, "COPY_MESH", "ICON_COPY_MESH" ); createSMESHAction( SMESHOp::OpCompute, "COMPUTE", "ICON_COMPUTE" ); createSMESHAction( SMESHOp::OpComputeSubMesh, "COMPUTE_SUBMESH", "ICON_COMPUTE" ); + createSMESHAction( SMESHOp::OpRecompute, "RE_COMPUTE", "ICON_COMPUTE" ); createSMESHAction( SMESHOp::OpPreCompute, "PRECOMPUTE", "ICON_PRECOMPUTE" ); + createSMESHAction( SMESHOp::OpShowErrors, "SHOW_ERRORS", "ICON_SHOW_ERRORS" ); createSMESHAction( SMESHOp::OpEvaluate, "EVALUATE", "ICON_EVALUATE" ); createSMESHAction( SMESHOp::OpMeshOrder, "MESH_ORDER", "ICON_MESH_ORDER"); createSMESHAction( SMESHOp::OpCreateGroup, "CREATE_GROUP", "ICON_CREATE_GROUP" ); @@ -4659,22 +4686,24 @@ void SMESHGUI::initialize( CAM_Application* app ) hasVolumes("({'Volume'} in elemTypes)"), hasFacesOrVolumes("(({'Face'} in elemTypes) || ({'Volume'} in elemTypes)) "); - createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); - createPopupItem( SMESHOp::OpCreateSubMesh, OB, mesh, "&& hasGeomReference"); createPopupItem( SMESHOp::OpEditMesh, OB, mesh, "&& selcount=1" ); + createPopupItem( SMESHOp::OpCreateSubMesh, OB, mesh, "&& hasGeomReference"); + createPopupItem( SMESHOp::OpMeshOrder, OB, mesh, "&& selcount=1 && hasAlgo && hasGeomReference" ); createPopupItem( SMESHOp::OpEditSubMesh, OB, subMesh, "&& selcount=1 && hasGeomReference" ); createPopupItem( SMESHOp::OpEditGroup, OB, group ); createPopupItem( SMESHOp::OpEditGeomGroupAsGroup, OB, group, "&& groupType != 'Group'" ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpCompute, OB, mesh, "&& selcount=1 && isComputable" ); - createPopupItem( SMESHOp::OpComputeSubMesh, OB, subMesh, "&& selcount=1 && isComputable" ); - createPopupItem( SMESHOp::OpPreCompute, OB, mesh, "&& selcount=1 && isPreComputable" ); - createPopupItem( SMESHOp::OpEvaluate, OB, mesh, "&& selcount=1 && isComputable" ); - createPopupItem( SMESHOp::OpMeshOrder, OB, mesh, "&& selcount=1 && isComputable && hasGeomReference" ); - createPopupItem( SMESHOp::OpUpdate, OB, mesh_part ); + createPopupItem( SMESHOp::OpCompute, OB, mesh, "&& selcount=1 && hasAlgo && isComputable" ); + createPopupItem( SMESHOp::OpRecompute, OB, mesh, "&& selcount=1 && hasAlgo && (" + isNotEmpty + " || hasErrors )"); + createPopupItem( SMESHOp::OpShowErrors, OB, mesh, "&& selcount=1 && hasErrors" ); + createPopupItem( SMESHOp::OpComputeSubMesh, OB, subMesh, "&& selcount=1 && hasAlgo && isComputable" ); + createPopupItem( SMESHOp::OpPreCompute, OB, mesh, "&& selcount=1 && hasAlgo && isPreComputable" ); + createPopupItem( SMESHOp::OpEvaluate, OB, mesh, "&& selcount=1 && hasAlgo && isComputable" ); + popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); createPopupItem( SMESHOp::OpMeshInformation, OB, mesh_part ); - createPopupItem( SMESHOp::OpFindElementByPoint,OB, mesh_group, "&& selcount=1" ); + createPopupItem( SMESHOp::OpFindElementByPoint,OB, mesh_group, "&& selcount=1 && " + hasElems ); createPopupItem( SMESHOp::OpOverallMeshQuality,OB, mesh_part ); popupMgr()->insert( separator(), -1, 0 ); createPopupItem( SMESHOp::OpCreateGroup, OB, mesh, "&& selcount=1" ); @@ -4684,10 +4713,10 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpEditHypothesis, OB, hypo, "&& isEditableHyp"); createPopupItem( SMESHOp::OpUnassign, OB, hyp_alg ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh ); + createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh, "&& " + hasElems ); createPopupItem( SMESHOp::OpCreateBoundaryElements, OB, mesh_group, "&& selcount=1 && dim>=2"); - popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpClearMesh, OB, mesh ); + //popupMgr()->insert( separator(), -1, 0 ); + //popupMgr()->insert( separator(), -1, 0 ); QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc ); @@ -4695,6 +4724,7 @@ void SMESHGUI::initialize( CAM_Application* app ) QString only_one_2D = only_one_non_empty + " && dim>1"; int anId = popupMgr()->insert( tr( "MEN_EXPORT" ), -1, -1 ); // EXPORT submenu + popupMgr()->findMenu( anId )->menuAction()->setIcon( resourceMgr()->loadPixmap( "SMESH", tr( "ICON_EXPORT" ))); createPopupItem( SMESHOp::OpPopupExportMED, OB, mesh_group, multiple_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportUNV, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportSTL, OB, mesh_group, only_one_2D, anId ); @@ -4704,8 +4734,6 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, only_one_non_empty, anId ); 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 ); @@ -4719,18 +4747,22 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpPopupImportDAT, OB, smesh, "", anId ); popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpClearMesh, OB, mesh ); + createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); + createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); + // popup for viewer createPopupItem( SMESHOp::OpEditGroup, View, group ); 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 ); createPopupItem( SMESHOp::OpMeshInformation, View, mesh_part ); createPopupItem( SMESHOp::OpOverallMeshQuality, View, mesh_part ); - createPopupItem( SMESHOp::OpFindElementByPoint, View, mesh ); + createPopupItem( SMESHOp::OpFindElementByPoint, View, mesh, "&& " + hasElems); popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpUpdate, OB + " " + View, mesh_part ); createPopupItem( SMESHOp::OpAutoColor, OB + " " + View, mesh, "&& (not isAutoColor)" ); createPopupItem( SMESHOp::OpDisableAutoColor, OB + " " + View, mesh, "&& isAutoColor" ); popupMgr()->insert( separator(), -1, 0 ); @@ -5068,8 +5100,9 @@ bool SMESHGUI::isSelectionCompatible() SALOME_ListIteratorOfListIO It( selected ); for ( ; isCompatible && It.More(); It.Next()) isCompatible = - ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || - ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); + ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || + ( strcmp("SHAPERSTUDY", It.Value()->getComponentDataType()) == 0 ) || + ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); return isCompatible; } @@ -5078,7 +5111,13 @@ bool SMESHGUI::isSelectionCompatible() bool SMESHGUI::reusableOperation( const int id ) { // compute, evaluate and precompute are not reusable operations - return ( id == SMESHOp::OpCompute || id == SMESHOp::OpPreCompute || id == SMESHOp::OpEvaluate ) ? false : SalomeApp_Module::reusableOperation( id ); + return ( id == SMESHOp::OpCompute || id == SMESHOp::OpPreCompute || id == SMESHOp::OpEvaluate || id == SMESHOp::OpRecompute ) ? false : SalomeApp_Module::reusableOperation( id ); +} + +namespace +{ + QString wrap(const QString& text, const QString& tag) + { return QString("<%1>%2").arg(tag).arg(text).arg(tag);} } bool SMESHGUI::activateModule( SUIT_Study* study ) @@ -5088,6 +5127,49 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) setMenuShown( true ); setToolShown( true ); + // Fill in Help Panel + SalomeApp_Application* app = dynamic_cast( application() ); + app->infoPanel()->setTitle(tr("INFO_WELCOME_TO_SMESH")); + + int gb = app->infoPanel()->addGroup(tr("INFO_GRP_CREATE_MESH")); + QString lab; + QStringList items; + lab = tr("INFO_DEFINE_ALGOS") + "
"; + lab = lab + tr("INFO_DEFINE_HYPOS") + "
"; + lab = lab + tr("INFO_COMPUTE") + "
"; + lab = lab + tr("INFO_REFINE") + ":"; + items << wrap(tr("INFO_REFINE_LOCAL_SIZE"), "li") + << wrap(tr("INFO_REFINE_SUBMESH"), "li"); + lab = lab + wrap(items.join(""), "ul"); + items.clear(); + + app->infoPanel()->addLabel(lab, gb); + + gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MESH")); + items << wrap("UNV", "li") + << wrap("MED", "li") + << wrap("STL", "li") + << wrap("CGNS", "li") + << wrap("SAUV", "li") + << wrap("GMF", "li"); + lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul"); + items.clear(); + + app->infoPanel()->addLabel(lab, gb); + + gb = app->infoPanel()->addGroup(tr("INFO_GRP_CHECK_MESH")); + lab = tr("INFO_DISPLAY") + "
"; + items << wrap(tr("INFO_QUALITY_AREA"), "li") + << wrap(tr("INFO_QUALITY_VOLUME"), "li") + << wrap(tr("INFO_QUALITY_ASPECT_RATION"), "li") + << wrap("...", "li"); + lab = lab + tr("INFO_QUALITY_INFO") + ":" + wrap(items.join(""), "ul"); + items.clear(); + lab = lab + tr("INFO_CLIPPING"); + + app->infoPanel()->addLabel(lab, gb); + // << Help Panel + // import Python module that manages SMESH plugins (need to be here because SalomePyQt API uses active module) PyGILState_STATE gstate = PyGILState_Ensure(); PyObject* pluginsmanager = PyImport_ImportModuleNoBlock((char*)"salome_pluginsmanager"); @@ -5206,6 +5288,7 @@ void SMESHGUI::windows( QMap& aMap ) const { aMap.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::LeftDockWidgetArea ); aMap.insert( SalomeApp_Application::WT_NoteBook, Qt::LeftDockWidgetArea ); + aMap.insert( SalomeApp_Application::WT_InfoPanel, Qt::RightDockWidgetArea); #ifndef DISABLE_PYCONSOLE aMap.insert( SalomeApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea ); #endif @@ -5246,7 +5329,7 @@ void SMESHGUI::addActorAsObserver( SMESH_Actor* theActor ) void SMESHGUI::ProcessEvents( vtkObject* theObject, unsigned long theEvent, void* theClientData, - void* theCallData ) + void* /*theCallData*/ ) { if( SMESHGUI* aSMESHGUI = reinterpret_cast( theClientData ) ) { if( theObject && (int) theEvent == SMESH::DeleteActorEvent ) { @@ -5830,55 +5913,58 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const // to do : create operation here switch( id ) { - case SMESHOp::OpSplitBiQuadratic: - op = new SMESHGUI_SplitBiQuadOp(); + case SMESHOp::OpSplitBiQuadratic: + op = new SMESHGUI_SplitBiQuadOp(); break; - case SMESHOp::OpConvertMeshToQuadratic: - op = new SMESHGUI_ConvToQuadOp(); + case SMESHOp::OpConvertMeshToQuadratic: + op = new SMESHGUI_ConvToQuadOp(); break; - case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D - op = new SMESHGUI_Make2DFrom3DOp(); + case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D + op = new SMESHGUI_Make2DFrom3DOp(); break; - case SMESHOp::OpReorientFaces: - op = new SMESHGUI_ReorientFacesOp(); - break; - case SMESHOp::OpCreateMesh: - op = new SMESHGUI_MeshOp( true, true ); + case SMESHOp::OpReorientFaces: + op = new SMESHGUI_ReorientFacesOp(); + break; + case SMESHOp::OpCreateMesh: + op = new SMESHGUI_MeshOp( true, true ); + break; + case SMESHOp::OpCreateSubMesh: + op = new SMESHGUI_MeshOp( true, false ); + break; + case SMESHOp::OpEditMeshOrSubMesh: + case SMESHOp::OpEditMesh: + case SMESHOp::OpEditSubMesh: + op = new SMESHGUI_MeshOp( false ); break; - case SMESHOp::OpCreateSubMesh: - op = new SMESHGUI_MeshOp( true, false ); + case SMESHOp::OpCompute: + case SMESHOp::OpComputeSubMesh: + op = new SMESHGUI_ComputeOp(); break; - case SMESHOp::OpEditMeshOrSubMesh: - case SMESHOp::OpEditMesh: - case SMESHOp::OpEditSubMesh: - op = new SMESHGUI_MeshOp( false ); + case SMESHOp::OpShowErrors: + op = new SMESHGUI_ShowErrorsOp(); break; - case SMESHOp::OpCompute: - case SMESHOp::OpComputeSubMesh: - op = new SMESHGUI_ComputeOp(); + case SMESHOp::OpPreCompute: + op = new SMESHGUI_PrecomputeOp(); break; - case SMESHOp::OpPreCompute: - op = new SMESHGUI_PrecomputeOp(); + case SMESHOp::OpEvaluate: + op = new SMESHGUI_EvaluateOp(); break; - case SMESHOp::OpEvaluate: - op = new SMESHGUI_EvaluateOp(); + case SMESHOp::OpMeshOrder: + op = new SMESHGUI_MeshOrderOp(); break; - case SMESHOp::OpMeshOrder: - op = new SMESHGUI_MeshOrderOp(); + case SMESHOp::OpCreateGeometryGroup: + op = new SMESHGUI_GroupOnShapeOp(); break; - case SMESHOp::OpCreateGeometryGroup: - op = new SMESHGUI_GroupOnShapeOp(); - break; - case SMESHOp::OpFindElementByPoint: - op = new SMESHGUI_FindElemByPointOp(); - break; - case SMESHOp::OpMoveNode: // Make mesh pass through point - op = new SMESHGUI_MakeNodeAtPointOp(); - break; - case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes - op = new SMESHGUI_Add0DElemsOnAllNodesOp(); - break; - default: + case SMESHOp::OpFindElementByPoint: + op = new SMESHGUI_FindElemByPointOp(); + break; + case SMESHOp::OpMoveNode: // Make mesh pass through point + op = new SMESHGUI_MakeNodeAtPointOp(); + break; + case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes + op = new SMESHGUI_Add0DElemsOnAllNodesOp(); + break; + default: break; } @@ -6332,8 +6418,6 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // componentName is used for encoding of entries when storing them in IParameters std::string componentName = myComponentSMESH->ComponentDataType(); - //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM"); - //if (!aSComponent) return; // IParameters _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",