X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=f30f2b8e1594be71d3c943f234fce3a309f4314c;hp=02c8251023b2977c32b4aa48d122716df23f563b;hb=2bb3ddd1685fd6ab81fc4c403c251f5b1e51014c;hpb=0e57fc74416cbac7bb1898edec8d8706cfdb3151 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 02c825102..f30f2b8e1 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1,22 +1,22 @@ // SMESH SMESHGUI : GUI for SMESH component // // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// License as published by the Free Software Foundation; either +// version 2.1 of the License. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// +// // See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // File : SMESHGUI.cxx @@ -26,8 +26,6 @@ #include "SMESHGUI.h" -#include "SMESHGUI_InitMeshDlg.h" -#include "SMESHGUI_AddSubMeshDlg.h" #include "SMESHGUI_NodesDlg.h" #include "SMESHGUI_TransparencyDlg.h" #include "SMESHGUI_ClippingDlg.h" @@ -66,6 +64,7 @@ #include "SMESHGUI_Selection.h" #include "SMESHGUI_CreatePolyhedralVolumeDlg.h" #include "SMESHGUI_MeshOp.h" +#include "SMESHGUI_Displayer.h" #include "SMESHGUI_Utils.h" #include "SMESHGUI_GEOMGenUtils.h" @@ -82,13 +81,13 @@ #include "SalomeApp_Tools.h" #include "SalomeApp_Study.h" -#include "SalomeApp_NameDlg.h" -#include "SalomeApp_DataOwner.h" +#include "LightApp_NameDlg.h" +#include "LightApp_DataOwner.h" #include "SalomeApp_Application.h" -#include "SalomeApp_Preferences.h" -#include "SalomeApp_VTKSelector.h" -#include "SalomeApp_Operation.h" -#include "SalomeApp_UpdateFlags.h" +#include "LightApp_Preferences.h" +#include "LightApp_VTKSelector.h" +#include "LightApp_Operation.h" +#include "LightApp_UpdateFlags.h" #include "SalomeApp_ImportOperation.h" @@ -96,8 +95,7 @@ #include #include #include - -#include +#include #include "OB_Browser.h" @@ -169,7 +167,7 @@ namespace{ { QStringList filter; string myExtension; - + if(theCommandID == 113){ filter.append(QObject::tr("MED files (*.med)")); filter.append(QObject::tr("All files (*)")); @@ -249,7 +247,7 @@ namespace{ void ExportMeshToFile( int theCommandID ) { - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -298,10 +296,11 @@ namespace{ QStringList filters; for ( QMap::const_iterator it = aFilterMap.begin(); it != aFilterMap.end(); ++it ) filters.push_back( it.key() ); - + SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true ); fd->setCaption( aTitle ); fd->setFilters( filters ); + fd->setSelectedFilter( QObject::tr("MED 2.2 (*.med)") ); bool is_ok = false; while(!is_ok){ fd->exec(); @@ -309,7 +308,7 @@ namespace{ aFormat = aFilterMap[fd->selectedFilter()]; is_ok = true; if( !aFilename.isEmpty() - && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0) + && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0) && aFormat==SMESH::MED_V2_1){ int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), @@ -362,7 +361,7 @@ namespace{ } void SetDisplayEntity(int theCommandID){ - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -397,7 +396,7 @@ namespace{ } void SetDisplayMode(int theCommandID){ - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -517,10 +516,10 @@ namespace{ SMESH::RepaintCurrentView(); } } - + void Control( int theCommandID ) { - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -584,6 +583,10 @@ namespace{ aTitle = QObject::tr( "SKEW_ELEMENTS" ); aControl = SMESH_Actor::eSkew; break; + case 6009: + aTitle = QObject::tr( "SMESH_VOLUME" ); + aControl = SMESH_Actor::eVolume3D; + break; } anActor->SetControlMode(aControl); anActor->GetScalarBarActor()->SetTitle(aTitle.latin1()); @@ -604,7 +607,7 @@ namespace{ if( !theIO.IsNull() ) { entry = theIO->getEntry(); - SalomeApp_DataOwner owner( entry ); + LightApp_DataOwner owner( entry ); if ( aTypeFilter.isOk( &owner )) { theOutTypeName = theInTypeName; return true; @@ -642,7 +645,7 @@ namespace{ QString CheckHomogeneousSelection() { //SUIT_Study* aStudy = SMESH::GetActiveStudy(); - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -664,8 +667,8 @@ namespace{ void SMESHGUI::OnEditDelete() { // VSR 17/11/04: check if all objects selected belong to SMESH component --> start - SalomeApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; aSel->selectedObjects( selected ); + LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false ); QString aParentComponent = QString::null; for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() ) @@ -806,12 +809,13 @@ SalomeApp_Module( "SMESH" ) myComponentSMESH = SMESH::SMESH_Gen::_narrow( comp ); } - myActiveDialogBox = 0 ; - myState = -1 ; + myActiveDialogBox = 0; + myState = -1; + myDisplayer = 0; SMESH::GetFilterManager(); SMESH::GetPattern(); - + /* load resources for all available meshers */ SMESH::InitAvailableHypotheses(); } @@ -824,6 +828,7 @@ SalomeApp_Module( "SMESH" ) SMESHGUI::~SMESHGUI() { SMESH::GetFilterManager()->Destroy(); + SMESH::GetFilterManager() = SMESH::FilterManager::_nil(); } //============================================================================= @@ -831,11 +836,11 @@ SMESHGUI::~SMESHGUI() * */ //============================================================================= -SalomeApp_SelectionMgr* SMESHGUI::selectionMgr() +LightApp_SelectionMgr* SMESHGUI::selectionMgr() { SalomeApp_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); if( anApp ) - return dynamic_cast( anApp->selectionMgr() ); + return dynamic_cast( anApp->selectionMgr() ); else return 0; } @@ -1058,6 +1063,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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 ); @@ -1091,7 +1100,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 200: // SCALAR BAR { - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1138,7 +1147,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESH::UpdateView(); SALOME_ListIO l; - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); aSel->setSelectedObjects( l ); break; } @@ -1154,13 +1163,47 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 302: anAction = SMESH::eDisplayOnly; break; } - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO sel_objects, to_process; if (aSel) - aSel->selectedObjects( selected ); + aSel->selectedObjects( sel_objects ); + + SALOME_ListIteratorOfListIO anIt( sel_objects ); + for( ; anIt.More(); anIt.Next() ) + { + Handle( SALOME_InteractiveObject ) obj = anIt.Value(); + if( obj->hasEntry() ) + { + _PTR(SObject) SO = activeStudy()->studyDS()->FindObjectID( obj->getEntry() ); + if( SO && QString( SO->GetID().c_str() ) == SO->GetFatherComponent()->GetID().c_str() ) + { //component is selected + _PTR(SComponent) SC( SO->GetFatherComponent() ); + _PTR(ChildIterator) anIter ( activeStudy()->studyDS()->NewChildIterator( SC ) ); + anIter->InitEx( true ); + while( anIter->More() ) + { + _PTR(SObject) valSO ( anIter->Value() ); + _PTR(SObject) refSO; + if( !valSO->ReferencedObject( refSO ) ) + { + QString id = valSO->GetID().c_str(), + comp = SC->ComponentDataType().c_str(), + val = valSO->GetName().c_str(); + + Handle( SALOME_InteractiveObject ) new_obj = + new SALOME_InteractiveObject( id.latin1(), comp.latin1(), val.latin1() ); + to_process.Append( new_obj ); + } + anIter->Next(); + } + continue; + } + } + to_process.Append( obj ); + } if (vtkwnd) { - SALOME_ListIteratorOfListIO It (selected); + SALOME_ListIteratorOfListIO It( to_process ); for (; It.More(); It.Next()) { Handle(SALOME_InteractiveObject) IOS = It.Value(); if (IOS->hasEntry()) { @@ -1170,13 +1213,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } - + if (anAction == SMESH::eErase) { SALOME_ListIO l1; aSel->setSelectedObjects( l1 ); } else - aSel->setSelectedObjects( selected ); + aSel->setSelectedObjects( to_process ); break; } @@ -1191,7 +1234,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } else { SUIT_MessageBox::warn1(desktop(), - tr("SMESH_WRN_WARNING"), + tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"), tr("SMESH_BUT_OK")); } @@ -1226,7 +1269,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if(checkLock(aStudy)) break; if ( vtkwnd ) { - SalomeApp_SelectionMgr *Sel = selectionMgr(); + LightApp_SelectionMgr *Sel = selectionMgr(); SALOME_ListIO selected; Sel->selectedObjects( selected ); int nbSel = selected.Extent(); @@ -1263,7 +1306,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESH::ModifiedMesh(aMeshSObj,true); // TO Do : change icon of all submeshes else - SUIT_MessageBox::warn1(desktop(), + SUIT_MessageBox::warn1(desktop(), tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_COMPUTE_FAILED"), tr("SMESH_BUT_OK")); @@ -1278,7 +1321,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(!refShapeObject->_is_nil()){ bool compute = GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject); if(!compute){ - SUIT_MessageBox::warn1(desktop(), + SUIT_MessageBox::warn1(desktop(), tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_MISSING_PARAMETERS"), tr("SMESH_BUT_OK")); @@ -1316,7 +1359,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } }else{ SUIT_MessageBox::warn1(desktop(), - tr("SMESH_WRN_WARNING"), + tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"), tr("SMESH_BUT_OK")); } @@ -1474,7 +1517,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) EmitSignalDeactivateDialog(); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1501,7 +1544,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(checkLock(aStudy)) break; EmitSignalDeactivateDialog(); - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1541,7 +1584,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) aGroup->Add(aVolumes.inout()); } updateObjBrowser(); - + }catch(const SALOME::SALOME_Exception & S_ex){ SalomeApp_Tools::QtCatchCorbaException(S_ex); } @@ -1564,7 +1607,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(checkLock(aStudy)) break; EmitSignalDeactivateDialog(); - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1655,7 +1698,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 900: // MESH INFOS { EmitSignalDeactivateDialog(); - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1679,7 +1722,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 902: // STANDARD MESH INFOS { EmitSignalDeactivateDialog(); - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1699,13 +1742,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) else new SMESHGUI_StandardMeshInfosDlg( this, "", false); break; - } - + } + case 1100: // EDIT HYPOTHESIS { if(checkLock(aStudy)) break; - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1741,7 +1784,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( checkLock( aStudy ) ) break; - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -1759,7 +1802,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { aName = anAttr; QString newName = QString(aName->Value().c_str()); - newName = SalomeApp_NameDlg::getName( desktop(), newName ); + newName = LightApp_NameDlg::getName( desktop(), newName ); if ( !newName.isEmpty() ) { //old source: aStudy->renameIObject( IObject, newName ); @@ -1770,7 +1813,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESH::IObjectToInterface(IObject); if (!aGroup->_is_nil() ) aGroup->SetName( newName.latin1() ); - + updateObjBrowser(); } } @@ -1784,10 +1827,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if(checkLock(aStudy)) break; SUIT_OverrideCursor wc; - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) - aSel->selectedObjects( selected ); + aSel->selectedObjects( selected, QString::null, false ); SALOME_ListIteratorOfListIO It(selected); for (int i = 0; It.More(); It.Next(), i++) { @@ -1937,7 +1980,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4063: // SYMMETRY + case 4063: // SYMMETRY { if(checkLock(aStudy)) break; if(vtkwnd) { @@ -1995,7 +2038,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - + case 5105: // Library of selection filters { static QValueList aTypes; @@ -2023,9 +2066,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 6002: case 6003: case 6004: + case 6009: if ( vtkwnd ) { - SalomeApp_SelectionMgr* mgr = selectionMgr(); + LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); if ( selected.Extent() == 1 && selected.First()->hasEntry() ) { @@ -2050,13 +2094,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) else { SUIT_MessageBox::warn1(desktop(), tr( "SMESH_WRN_WARNING" ), - tr( "NOT_A_VTK_VIEWER" ), + tr( "NOT_A_VTK_VIEWER" ), tr( "SMESH_BUT_OK" ) ); } break; case 9010: { - SalomeApp_SelectionMgr* mgr = selectionMgr(); + LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); if (selected.Extent() == 1) { @@ -2070,7 +2114,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case 9011: { - SalomeApp_SelectionMgr* mgr = selectionMgr(); + LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); if (selected.Extent() == 1) { @@ -2244,6 +2288,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 6017, "ASPECT_3D", "ICON_ASPECT_3D", 0, true ); createSMESHAction( 6018, "LENGTH_2D", "ICON_LENGTH_2D", 0, true ); createSMESHAction( 6019, "CONNECTION_2D", "ICON_CONNECTION_2D", 0, true ); + createSMESHAction( 6009, "VOLUME_3D", "ICON_VOLUME_3D", 0, true ); createSMESHAction( 400, "NODE", "ICON_DLG_NODE" ); createSMESHAction( 401, "EDGE", "ICON_DLG_EDGE" ); createSMESHAction( 4021, "TRIANGLE", "ICON_DLG_TRIANGLE" ); @@ -2294,7 +2339,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 1134, "CLIP" ); createSMESHAction( 1135, "DISP_ENT" ); createSMESHAction( 2000, "CTRL" ); - + createSMESHAction( 300, "ERASE" ); createSMESHAction( 301, "DISPLAY" ); createSMESHAction( 302, "DISPLAY_ONLY" ); @@ -2367,6 +2412,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 6016, ctrlId, -1 ); createMenu( separator(), ctrlId, -1 ); createMenu( 6017, ctrlId, -1 ); + createMenu( 6009, ctrlId, -1 ); createMenu( separator(), ctrlId, -1 ); createMenu( 400, addId, -1 ); @@ -2441,6 +2487,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 6016, ctrlTb ); createTool( separator(), ctrlTb ); createTool( 6017, ctrlTb ); + createTool( 6009, ctrlTb ); createTool( separator(), ctrlTb ); createTool( 400, addRemTb ); @@ -2513,9 +2560,9 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( 801, OB, mesh ); // CREATE_GROUP createPopupItem( 802, OB, subMesh ); // CONSTRUCT_GROUP popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( 1100, OB, hypo, "&& $hasReference={false}" ); // EDIT HYPOTHESIS + createPopupItem( 1100, OB, hypo, "" /*"&& $hasReference={false}"*/ ); // EDIT HYPOTHESIS createPopupItem( 1102, OB, hyp_alg ); // REMOVE HYPOTHESIS / ALGORITHMS - createPopupItem( 1101, OB, mesh_group + " " + hyp_alg, "&& $hasReference={false}" ); // RENAME + createPopupItem( 1101, OB, mesh_group + " " + hyp_alg, "" /*"&& $hasReference={false}"*/ ); // RENAME popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 125, OB, mesh ); // EXPORT_MED createPopupItem( 126, OB, mesh ); // EXPORT_UNV @@ -2548,14 +2595,15 @@ void SMESHGUI::initialize( CAM_Application* app ) QString lc = QtxPopupMgr::Selection::defEquality(); QString aClient = QString( "%1client in {%2}" ).arg( lc ).arg( "'VTKViewer'" ); - QString aType = QString( "%1type in {%2}" ).arg( QtxPopupMgr::Selection::defEquality() ).arg( mesh_group ); + QString aType = QString( "%1type in {%2}" ).arg( QtxPopupMgr::Selection::defEquality() ); + aType = aType.arg( mesh_group ); QString aMeshInVTK = aClient + "&&" + aType; - + //------------------------------------------------- // Numbering //------------------------------------------------- anId = popupMgr()->insert( tr( "MEN_NUM" ), -1, -1 ); - + popupMgr()->insert( action( 9010 ), anId, -1 ); popupMgr()->setRule( action( 9010 ), aMeshInVTK + "&& isVisible &&" + hasNodes, true ); popupMgr()->setRule( action( 9010 ), "{'Point'} in labeledTypes", false ); @@ -2704,6 +2752,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( 6017 ), aMeshInVtkHasVolumes, true ); popupMgr()->setRule( action( 6017 ), "controlMode = 'eAspectRatio3D'", false ); + popupMgr()->insert ( action( 6009 ), anId, -1 ); // VOLUME_3D + popupMgr()->setRule( action( 6009 ), aMeshInVtkHasVolumes, true ); + popupMgr()->setRule( action( 6009 ), "controlMode = 'eVolume3D'", false ); + popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP @@ -2715,22 +2767,24 @@ void SMESHGUI::initialize( CAM_Application* app ) // Display / Erase //------------------------------------------------- aClient = "($client in {'VTKViewer' 'ObjectBrowser'})"; - QString anActiveVTK = QString("activeView = '%1'").arg(VTKViewer_Viewer::Type()); + QString anActiveVTK = QString("activeView = '%1'").arg(SVTK_Viewer::Type()); QString aSelCount = QString( "%1 > 0" ).arg( QtxPopupMgr::Selection::defSelCountParam() ); - QString aRule = aClient + " and " + aType + " and " + aSelCount + " and " + anActiveVTK; + + QString aRule = "$component={'SMESH'} and ( type='Component' or (" + aClient + " and " + + aType + " and " + aSelCount + " and " + anActiveVTK + " and " + isNotEmpty + " %1 ) )"; popupMgr()->insert( action( 301 ), -1, -1 ); // DISPLAY - popupMgr()->setRule( action( 301 ), aRule + "&&" + isNotEmpty + "&&" + isInvisible, true); + popupMgr()->setRule( action( 301 ), aRule.arg( "and (not isVisible)" ), true); popupMgr()->insert( action( 300 ), -1, -1 ); // ERASE - popupMgr()->setRule( action( 300 ), aRule + "&&" + isNotEmpty + "&& isVisible", true ); + popupMgr()->setRule( action( 300 ), aRule.arg( "and isVisible" ), true ); popupMgr()->insert( action( 302 ), -1, -1 ); // DISPLAY_ONLY - popupMgr()->setRule( action( 302 ), aRule + "&&" + isNotEmpty, true ); + popupMgr()->setRule( action( 302 ), aRule.arg( "" ), true ); popupMgr()->insert( separator(), -1, -1 ); - connect( application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), - this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) ); + connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ), + this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) ); } bool SMESHGUI::activateModule( SUIT_Study* study ) @@ -2749,7 +2803,7 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) setToolShown( false ); EmitSignalCloseAllDialogs(); - + return SalomeApp_Module::deactivateModule( study ); } @@ -2769,7 +2823,7 @@ SMESH::SMESH_Gen_var SMESHGUI::GetSMESHGen() { SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH return aGUI.myComponentSMESH; - } + } return myComponentSMESH; } @@ -2798,9 +2852,9 @@ void SMESHGUI::viewManagers( QStringList& list ) const list.append( SVTK_Viewer::Type() ); } -void SMESHGUI::onViewManagerAdded( SUIT_ViewManager* mgr ) +void SMESHGUI::onViewManagerActivated( SUIT_ViewManager* mgr ) { - if ( dynamic_cast( mgr ) ) + if ( dynamic_cast( mgr ) ) SMESH::UpdateSelectionProp( this ); } @@ -2809,53 +2863,53 @@ void SMESHGUI::createPreferences() int genTab = addPreference( tr( "PREF_TAB_GENERAL" ) ); int updateGroup = addPreference( tr( "PREF_GROUP_UPDATE" ), genTab ); - addPreference( tr( "PREF_AUTO_UPDATE" ), updateGroup, SalomeApp_Preferences::Bool, "SMESH", "auto_update" ); + addPreference( tr( "PREF_AUTO_UPDATE" ), updateGroup, LightApp_Preferences::Bool, "SMESH", "auto_update" ); int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); - addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "display_entity" ); - addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "use_precision" ); - + 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 precGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), genTab ); setPreferenceProperty( precGroup, "columns", 1 ); - int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), precGroup, SalomeApp_Preferences::IntSpin, "SMESH", "controls_precision" ); + int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), precGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); setPreferenceProperty( prec, "min", 0 ); setPreferenceProperty( prec, "max", 16 ); int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE" ), genTab ); - int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, SalomeApp_Preferences::Selector, "SMESH", "display_mode" ); + int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); QStringList modes; modes.append( "Wireframe" ); modes.append( "Shading" ); - modes.append( "Shrink" ); modes.append( "Nodes" ); - QValueList indices; - indices.append( 0 ); + modes.append( "Shrink" ); + QValueList indices; + indices.append( 0 ); indices.append( 1 ); indices.append( 2 ); indices.append( 3 ); setPreferenceProperty( dispmode, "strings", modes ); setPreferenceProperty( dispmode, "indexes", indices ); - + int meshTab = addPreference( tr( "PREF_TAB_MESH" ) ); int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab ); - addPreference( tr( "PREF_COLOR" ), nodeGroup, SalomeApp_Preferences::Color, "SMESH", "node_color" ); - int nodeSz = addPreference( tr( "PREF_SIZE" ), nodeGroup, SalomeApp_Preferences::IntSpin, "SMESH", "node_size" ); + addPreference( tr( "PREF_COLOR" ), nodeGroup, LightApp_Preferences::Color, "SMESH", "node_color" ); + int nodeSz = addPreference( tr( "PREF_SIZE" ), nodeGroup, LightApp_Preferences::IntSpin, "SMESH", "node_size" ); setPreferenceProperty( nodeSz, "min", 1 ); setPreferenceProperty( nodeSz, "max", 5 ); int elemGroup = addPreference( tr( "PREF_GROUP_ELEMENTS" ), meshTab ); - addPreference( tr( "PREF_FILL" ), elemGroup, SalomeApp_Preferences::Color, "SMESH", "fill_color" ); - addPreference( tr( "PREF_OUTLINE" ), elemGroup, SalomeApp_Preferences::Color, "SMESH", "outline_color" ); - addPreference( tr( "PREF_BACKFACE" ), elemGroup, SalomeApp_Preferences::Color, "SMESH", "backface_color" ); - addPreference( "", elemGroup, SalomeApp_Preferences::Space ); + addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::Color, "SMESH", "fill_color" ); + addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" ); + addPreference( tr( "PREF_BACKFACE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "backface_color" ); + addPreference( "", elemGroup, LightApp_Preferences::Space ); - int elemW = addPreference( tr( "PREF_WIDTH" ), elemGroup, SalomeApp_Preferences::IntSpin, "SMESH", "element_width" ); - int shrink = addPreference( tr( "PREF_SHRINK_COEFF" ), elemGroup, SalomeApp_Preferences::IntSpin, "SMESH", "shrink_coeff" ); + int elemW = addPreference( tr( "PREF_WIDTH" ), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "element_width" ); + int shrink = addPreference( tr( "PREF_SHRINK_COEFF" ), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "shrink_coeff" ); setPreferenceProperty( elemW, "min", 1 ); setPreferenceProperty( elemW, "max", 5 ); @@ -2867,33 +2921,33 @@ void SMESHGUI::createPreferences() int selGroup = addPreference( tr( "PREF_GROUP_SELECTION" ), selTab ); - addPreference( tr( "PREF_OBJECT_COLOR" ), selGroup, SalomeApp_Preferences::Color, "SMESH", "selection_object_color" ); - addPreference( tr( "PREF_ELEMENT_COLOR" ), selGroup, SalomeApp_Preferences::Color, "SMESH", "selection_element_color" ); - int selW = addPreference( tr( "PREF_WIDTH" ), selGroup, SalomeApp_Preferences::IntSpin, "SMESH", "selection_width" ); - + addPreference( tr( "PREF_OBJECT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_object_color" ); + addPreference( tr( "PREF_ELEMENT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_element_color" ); + int selW = addPreference( tr( "PREF_WIDTH" ), selGroup, LightApp_Preferences::IntSpin, "SMESH", "selection_width" ); + setPreferenceProperty( selW, "min", 1 ); setPreferenceProperty( selW, "max", 5 ); - + int preGroup = addPreference( tr( "PREF_GROUP_PRESELECTION" ), selTab ); - addPreference( tr( "PREF_HIGHLIGHT_COLOR" ), preGroup, SalomeApp_Preferences::Color, "SMESH", "highlight_color" ); - int preW = addPreference( tr( "PREF_WIDTH" ), preGroup, SalomeApp_Preferences::IntSpin, "SMESH", "highlight_width" ); + addPreference( tr( "PREF_HIGHLIGHT_COLOR" ), preGroup, LightApp_Preferences::Color, "SMESH", "highlight_color" ); + int preW = addPreference( tr( "PREF_WIDTH" ), preGroup, LightApp_Preferences::IntSpin, "SMESH", "highlight_width" ); setPreferenceProperty( preW, "min", 1 ); setPreferenceProperty( preW, "max", 5 ); int precSelGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), selTab ); - addPreference( tr( "PREF_NODES" ), precSelGroup, SalomeApp_Preferences::Double, "SMESH", "selection_precision_node" ); - addPreference( tr( "PREF_ELEMENTS" ), precSelGroup, SalomeApp_Preferences::Double, "SMESH", "selection_precision_element" ); + addPreference( tr( "PREF_NODES" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_node" ); + addPreference( tr( "PREF_ELEMENTS" ), precSelGroup, LightApp_Preferences::Double, "SMESH", "selection_precision_element" ); int sbarTab = addPreference( tr( "SMESH_SCALARBAR" ) ); int fontGr = addPreference( tr( "SMESH_FONT_SCALARBAR" ), sbarTab ); - int tfont = addPreference( tr( "SMESH_TITLE" ), fontGr, SalomeApp_Preferences::Font, "SMESH", "scalar_bar_title_font" ); - addPreference( tr( "SMESH_TITLE" ), fontGr, SalomeApp_Preferences::Color, "SMESH", "scalar_bar_title_color" ); - int lfont = addPreference( tr( "SMESH_LABELS" ), fontGr, SalomeApp_Preferences::Font, "SMESH", "scalar_bar_label_font" ); - addPreference( tr( "SMESH_LABELS" ), fontGr, SalomeApp_Preferences::Color, "SMESH", "scalar_bar_label_color" ); + int tfont = addPreference( tr( "SMESH_TITLE" ), fontGr, LightApp_Preferences::Font, "SMESH", "scalar_bar_title_font" ); + addPreference( tr( "SMESH_TITLE" ), fontGr, LightApp_Preferences::Color, "SMESH", "scalar_bar_title_color" ); + int lfont = addPreference( tr( "SMESH_LABELS" ), fontGr, LightApp_Preferences::Font, "SMESH", "scalar_bar_label_font" ); + addPreference( tr( "SMESH_LABELS" ), fontGr, LightApp_Preferences::Color, "SMESH", "scalar_bar_label_color" ); QStringList fam; fam.append( tr( "SMESH_FONT_ARIAL" ) ); @@ -2903,35 +2957,35 @@ void SMESHGUI::createPreferences() setPreferenceProperty( tfont, "families", fam ); setPreferenceProperty( tfont, "system", false ); - setPreferenceProperty( tfont, "widget_flags", wflag ); + setPreferenceProperty( tfont, "widget_flags", wflag ); setPreferenceProperty( lfont, "families", fam ); setPreferenceProperty( lfont, "system", false ); setPreferenceProperty( lfont, "widget_flags", wflag ); - + int colorsLabelsGr = addPreference( tr( "SMESH_LABELS_COLORS_SCALARBAR" ), sbarTab ); - int numcol = addPreference( tr( "SMESH_NUMBEROFCOLORS" ), colorsLabelsGr, SalomeApp_Preferences::IntSpin, "SMESH", "scalar_bar_num_colors" ); + int numcol = addPreference( tr( "SMESH_NUMBEROFCOLORS" ), colorsLabelsGr, LightApp_Preferences::IntSpin, "SMESH", "scalar_bar_num_colors" ); setPreferenceProperty( numcol, "min", 2 ); - setPreferenceProperty( numcol, "max", 256 ); - - int numlab = addPreference( tr( "SMESH_NUMBEROFLABELS" ), colorsLabelsGr, SalomeApp_Preferences::IntSpin, "SMESH", "scalar_bar_num_labels" ); + setPreferenceProperty( numcol, "max", 256 ); + + int numlab = addPreference( tr( "SMESH_NUMBEROFLABELS" ), colorsLabelsGr, LightApp_Preferences::IntSpin, "SMESH", "scalar_bar_num_labels" ); setPreferenceProperty( numlab, "min", 2 ); setPreferenceProperty( numlab, "max", 65 ); int orientGr = addPreference( tr( "SMESH_ORIENTATION" ), sbarTab ); - int orient = addPreference( tr( "SMESH_ORIENTATION" ), orientGr, SalomeApp_Preferences::Selector, "SMESH", "scalar_bar_orientation" ); + int orient = addPreference( tr( "SMESH_ORIENTATION" ), orientGr, LightApp_Preferences::Selector, "SMESH", "scalar_bar_orientation" ); QStringList orients; orients.append( tr( "SMESH_VERTICAL" ) ); orients.append( tr( "SMESH_HORIZONTAL" ) ); indices.clear(); indices.append( 0 ); indices.append( 1 ); setPreferenceProperty( orient, "strings", orients ); setPreferenceProperty( orient, "indexes", indices ); - + int posVSizeGr = addPreference( tr( "SMESH_POSITION_SIZE_SCALARBAR" ) + " " + tr( "SMESH_VERTICAL" ), sbarTab ); - int xv = addPreference( tr( "SMESH_X_SCALARBAR" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_x" ); - int yv = addPreference( tr( "SMESH_Y_SCALARBAR" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_y" ); - int wv = addPreference( tr( "SMESH_WIDTH" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_width" ); - int hv = addPreference( tr( "SMESH_HEIGHT" ), posVSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_height" ); + int xv = addPreference( tr( "SMESH_X_SCALARBAR" ), posVSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_x" ); + int yv = addPreference( tr( "SMESH_Y_SCALARBAR" ), posVSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_y" ); + int wv = addPreference( tr( "SMESH_WIDTH" ), posVSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_width" ); + int hv = addPreference( tr( "SMESH_HEIGHT" ), posVSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_vertical_height" ); setPreferenceProperty( xv, "step", 0.1 ); setPreferenceProperty( xv, "min", 0.0 ); setPreferenceProperty( xv, "max", 1.0 ); @@ -2943,13 +2997,13 @@ void SMESHGUI::createPreferences() setPreferenceProperty( wv, "max", 1.0 ); setPreferenceProperty( hv, "min", 0.0 ); setPreferenceProperty( hv, "max", 1.0 ); - setPreferenceProperty( hv, "step", 0.1 ); + setPreferenceProperty( hv, "step", 0.1 ); int posHSizeGr = addPreference( tr( "SMESH_POSITION_SIZE_SCALARBAR" ) + " " + tr( "SMESH_HORIZONTAL" ), sbarTab ); - int xh = addPreference( tr( "SMESH_X_SCALARBAR" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_x" ); - int yh = addPreference( tr( "SMESH_Y_SCALARBAR" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_y" ); - int wh = addPreference( tr( "SMESH_WIDTH" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_width" ); - int hh = addPreference( tr( "SMESH_HEIGHT" ), posHSizeGr, SalomeApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_height" ); + int xh = addPreference( tr( "SMESH_X_SCALARBAR" ), posHSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_x" ); + int yh = addPreference( tr( "SMESH_Y_SCALARBAR" ), posHSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_y" ); + int wh = addPreference( tr( "SMESH_WIDTH" ), posHSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_width" ); + int hh = addPreference( tr( "SMESH_HEIGHT" ), posHSizeGr, LightApp_Preferences::DblSpin, "SMESH", "scalar_bar_horizontal_height" ); setPreferenceProperty( xv, "min", 0.0 ); setPreferenceProperty( xv, "max", 1.0 ); setPreferenceProperty( xv, "step", 0.1 ); @@ -2969,6 +3023,11 @@ void SMESHGUI::createPreferences() void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) { + if( sect=="SMESH" ) + if( name=="selection_object_color" || name=="selection_element_color" || + name=="selection_width" || name=="highlight_color" || name=="highlight_width" || + name=="selection_precision_node" || name=="selection_precision_element" ) + SMESH::UpdateSelectionProp( this ); } //================================================================================ @@ -2977,7 +3036,7 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) * \param theFlags - update flags * * Update viewer or/and object browser etc. in accordance with update flags ( see -* SalomeApp_UpdateFlags enumeration ). +* LightApp_UpdateFlags enumeration ). */ //================================================================================ void SMESHGUI::update( const int flags ) @@ -3024,13 +3083,13 @@ void SMESHGUI::onOperationAborted( SUIT_Operation* ) * \param id - identifier of operation to be started * \return Pointer on created operation or NULL if operation is not created * -* Virtual method redefined from the base class creates operation with given id. -* It is called called automatically from startOperation method of base class. +* Virtual method redefined from the base class creates operation with given id. +* It is called called automatically from startOperation method of base class. */ //================================================================================ -SalomeApp_Operation* SMESHGUI::createOperation( const int id ) const +LightApp_Operation* SMESHGUI::createOperation( const int id ) const { - SalomeApp_Operation* op = 0; + LightApp_Operation* op = 0; // to do : create operation here switch( id ) { @@ -3046,14 +3105,15 @@ SalomeApp_Operation* SMESHGUI::createOperation( const int id ) const default: break; } - + + if( !op ) + op = SalomeApp_Module::createOperation( id ); return op; } - - - - - - - +LightApp_Displayer* SMESHGUI::displayer() +{ + if( !myDisplayer ) + myDisplayer = new SMESHGUI_Displayer( dynamic_cast( getApp()->activeStudy() ) ); + return myDisplayer; +}