X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=46e2d5b5bd283f5476e3951487b27a479c5d200e;hp=f92fdf0679a152e963d387176661991ca421c78c;hb=bb608ced0cd5b896bcc8007734f65cedbfe950b3;hpb=cb1e086726cf11713bb785668d7e4160591e8f40 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index f92fdf067..46e2d5b5b 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" @@ -169,7 +168,7 @@ namespace{ { QStringList filter; string myExtension; - + if(theCommandID == 113){ filter.append(QObject::tr("MED files (*.med)")); filter.append(QObject::tr("All files (*)")); @@ -298,7 +297,7 @@ 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 ); @@ -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"), @@ -517,7 +516,7 @@ namespace{ SMESH::RepaintCurrentView(); } } - + void Control( int theCommandID ) { SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -587,6 +586,7 @@ namespace{ } anActor->SetControlMode(aControl); anActor->GetScalarBarActor()->SetTitle(aTitle.latin1()); + SMESH::RepaintCurrentView(); } } } @@ -807,10 +807,11 @@ SalomeApp_Module( "SMESH" ) myActiveDialogBox = 0 ; myState = -1 ; + myDisplayer = 0; SMESH::GetFilterManager(); SMESH::GetPattern(); - + /* load resources for all available meshers */ SMESH::InitAvailableHypotheses(); } @@ -823,6 +824,7 @@ SalomeApp_Module( "SMESH" ) SMESHGUI::~SMESHGUI() { SMESH::GetFilterManager()->Destroy(); + SMESH::GetFilterManager() = SMESH::FilterManager::_nil(); } //============================================================================= @@ -1154,12 +1156,46 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); - SALOME_ListIO selected; + 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()) { @@ -1169,8 +1205,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } } } - SALOME_ListIO l1; - aSel->setSelectedObjects( l1 ); + + if (anAction == SMESH::eErase) { + SALOME_ListIO l1; + aSel->setSelectedObjects( l1 ); + } + else + aSel->setSelectedObjects( to_process ); break; } @@ -1185,7 +1226,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")); } @@ -1257,7 +1298,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")); @@ -1272,7 +1313,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")); @@ -1310,7 +1351,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")); } @@ -1535,7 +1576,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) aGroup->Add(aVolumes.inout()); } updateObjBrowser(); - + }catch(const SALOME::SALOME_Exception & S_ex){ SalomeApp_Tools::QtCatchCorbaException(S_ex); } @@ -1693,8 +1734,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) else new SMESHGUI_StandardMeshInfosDlg( this, "", false); break; - } - + } + case 1100: // EDIT HYPOTHESIS { if(checkLock(aStudy)) break; @@ -1764,7 +1805,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESH::IObjectToInterface(IObject); if (!aGroup->_is_nil() ) aGroup->SetName( newName.latin1() ); - + updateObjBrowser(); } } @@ -1931,7 +1972,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - case 4063: // SYMMETRY + case 4063: // SYMMETRY { if(checkLock(aStudy)) break; if(vtkwnd) { @@ -1989,7 +2030,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } - + case 5105: // Library of selection filters { static QValueList aTypes; @@ -2044,7 +2085,7 @@ 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; @@ -2288,7 +2329,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" ); @@ -2542,14 +2583,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 ); @@ -2711,19 +2753,21 @@ void SMESHGUI::initialize( CAM_Application* app ) aClient = "($client in {'VTKViewer' 'ObjectBrowser'})"; QString anActiveVTK = QString("activeView = '%1'").arg(VTKViewer_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* ) ), + connect( application(), SIGNAL( viewManagerAdded( SUIT_ViewManager* ) ), this, SLOT( onViewManagerAdded( SUIT_ViewManager* ) ) ); } @@ -2743,7 +2787,7 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) setToolShown( false ); EmitSignalCloseAllDialogs(); - + return SalomeApp_Module::deactivateModule( study ); } @@ -2763,7 +2807,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; } @@ -2802,14 +2846,16 @@ 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" ); + int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "display_entity" ); - addPreference( tr( "PREF_AUTO_UPDATE" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "auto_update" ); + addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, SalomeApp_Preferences::Bool, "SMESH", "use_precision" ); int precGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), genTab ); setPreferenceProperty( precGroup, "columns", 1 ); - addPreference( tr( "PREF_PRECISION_USE" ), precGroup, SalomeApp_Preferences::Bool ); int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), precGroup, SalomeApp_Preferences::IntSpin, "SMESH", "controls_precision" ); setPreferenceProperty( prec, "min", 0 ); @@ -2820,10 +2866,16 @@ void SMESHGUI::createPreferences() QStringList modes; modes.append( "Wireframe" ); modes.append( "Shading" ); - modes.append( "Shrink" ); modes.append( "Nodes" ); + 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 ); @@ -2856,10 +2908,10 @@ void SMESHGUI::createPreferences() 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" ); - + 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" ); @@ -2889,17 +2941,17 @@ 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" ); setPreferenceProperty( numcol, "min", 2 ); - setPreferenceProperty( numcol, "max", 256 ); - + setPreferenceProperty( numcol, "max", 256 ); + int numlab = addPreference( tr( "SMESH_NUMBEROFLABELS" ), colorsLabelsGr, SalomeApp_Preferences::IntSpin, "SMESH", "scalar_bar_num_labels" ); setPreferenceProperty( numlab, "min", 2 ); setPreferenceProperty( numlab, "max", 65 ); @@ -2909,13 +2961,13 @@ void SMESHGUI::createPreferences() QStringList orients; orients.append( tr( "SMESH_VERTICAL" ) ); orients.append( tr( "SMESH_HORIZONTAL" ) ); - QValueList indices; indices.append( 0 ); indices.append( 1 ); + 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 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" ); setPreferenceProperty( xv, "step", 0.1 ); @@ -2929,7 +2981,7 @@ 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" ); @@ -2963,7 +3015,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 ). +* SalomeApp_UpdateFlags enumeration ). */ //================================================================================ void SMESHGUI::update( const int flags ) @@ -3010,8 +3062,8 @@ 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 @@ -3032,14 +3084,15 @@ SalomeApp_Operation* SMESHGUI::createOperation( const int id ) const default: break; } - + + if( !op ) + op = SalomeApp_Module::createOperation( id ); return op; } - - - - - - - +SalomeApp_Displayer* SMESHGUI::displayer() +{ + if( !myDisplayer ) + myDisplayer = new SMESHGUI_Displayer( dynamic_cast( getApp()->activeStudy() ) ); + return myDisplayer; +}