X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=fae703982cd56cbae253f5ed124aec9a3f6db4ae;hp=0227331c157aedf75546969f4c9d029c71ba632f;hb=6b471bcc54cbeb90f0d977323db8c76d3d2cce09;hpb=e292bda630ab4962307e7c2b2a1524710a0d3b61 diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 0227331c1..fae703982 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -81,9 +81,9 @@ #include "SalomeApp_Tools.h" #include "SalomeApp_Study.h" -#include "LightApp_NameDlg.h" -#include "LightApp_DataOwner.h" #include "SalomeApp_Application.h" +#include "SalomeApp_CheckFileDlg.h" +#include "LightApp_DataOwner.h" #include "LightApp_Preferences.h" #include "LightApp_VTKSelector.h" #include "LightApp_Operation.h" @@ -126,6 +126,7 @@ #include #include #include +#include // BOOST Includes #include @@ -184,7 +185,6 @@ namespace{ if(!filename.isEmpty()) { SUIT_OverrideCursor wc; _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); - theComponentMesh->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); try { SMESH::mesh_array_var aMeshes = new SMESH::mesh_array; @@ -288,7 +288,12 @@ namespace{ QString aFilename; SMESH::MED_VERSION aFormat; - + // Init the parameter with the default value + bool toCreateGroups = false; + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if ( resMgr ) + toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false ); + if ( theCommandID != 122 && theCommandID != 125 ) aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(), "", aFilter, aTitle, false); else @@ -297,10 +302,12 @@ namespace{ 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 ); + //SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true ); + SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg( SMESHGUI::desktop(), false, QObject::tr("SMESH_AUTO_GROUPS") ,true, true ); fd->setCaption( aTitle ); fd->setFilters( filters ); fd->setSelectedFilter( QObject::tr("MED 2.2 (*.med)") ); + fd->SetChecked(toCreateGroups); bool is_ok = false; while(!is_ok){ fd->exec(); @@ -321,6 +328,7 @@ namespace{ } } } + toCreateGroups = fd->IsChecked(); delete fd; } if ( !aFilename.isEmpty() ) { @@ -332,7 +340,7 @@ namespace{ switch ( theCommandID ) { case 125: case 122: - aMesh->ExportToMED( aFilename.latin1(), false, aFormat ); // currently, automatic groups are never created + aMesh->ExportToMED( aFilename.latin1(), toCreateGroups, aFormat ); break; case 124: case 121: @@ -1063,10 +1071,6 @@ 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 ); @@ -1148,6 +1152,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SALOME_ListIO l; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + aSel->selectedObjects( l ); aSel->setSelectedObjects( l ); break; } @@ -1168,39 +1173,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if (aSel) 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( theCommandID==302 ) + startOperation( myEraseAll ); + + extractContainers( sel_objects, to_process ); if (vtkwnd) { SALOME_ListIteratorOfListIO It( to_process ); @@ -1268,10 +1244,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 701: // COMPUTE MESH { if(checkLock(aStudy)) break; - if ( vtkwnd ) { - LightApp_SelectionMgr *Sel = selectionMgr(); - SALOME_ListIO selected; Sel->selectedObjects( selected ); + LightApp_SelectionMgr *Sel = selectionMgr(); + SALOME_ListIO selected; Sel->selectedObjects( selected ); + + if ( vtkwnd ) { int nbSel = selected.Extent(); if (nbSel != 1){ break; @@ -1280,7 +1257,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESH::SMESH_Mesh_var aMesh; SMESH::SMESH_subMesh_var aSubMesh; Handle(SALOME_InteractiveObject) IObject = selected.First(); - if (IObject->hasEntry()){ + if (IObject->hasEntry()) { _PTR(SObject) aMeshSObj = aStudy->FindObjectID(IObject->getEntry()); GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh( aMeshSObj ); if ( aShapeObject->_is_nil() ) { @@ -1288,69 +1265,50 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } if( aMeshSObj ) { - SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface(aMeshSObj); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface(aMeshSObj); - - if (!aMesh->_is_nil()){ - GEOM::GEOM_Object_var refShapeObject = SMESH::GetShapeOnMeshOrSubMesh(aMeshSObj); - if (!refShapeObject->_is_nil()) { - if(!GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject)){ - SUIT_MessageBox::warn1(desktop(), - tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_MISSING_PARAMETERS"), - tr("SMESH_BUT_OK")); - break; - } - try{ - if (GetSMESHGen()->Compute(aMesh,refShapeObject)) - SMESH::ModifiedMesh(aMeshSObj,true); - // TO Do : change icon of all submeshes - else - SUIT_MessageBox::warn1(desktop(), - tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_COMPUTE_FAILED"), - tr("SMESH_BUT_OK")); - } - catch(const SALOME::SALOME_Exception & S_ex){ - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - } - }else if(!aSubMesh->_is_nil()){ + aMesh = SMESH::SObjectToInterface(aMeshSObj); + aSubMesh = SMESH::SObjectToInterface(aMeshSObj); + if ( !aSubMesh->_is_nil() ) aMesh = aSubMesh->GetFather(); - GEOM::GEOM_Object_var refShapeObject = SMESH::GetShapeOnMeshOrSubMesh(aMeshSObj); - if(!refShapeObject->_is_nil()){ - bool compute = GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject); - if(!compute){ - SUIT_MessageBox::warn1(desktop(), - tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_MISSING_PARAMETERS"), - tr("SMESH_BUT_OK")); - break; - } - try{ - if ( GetSMESHGen()->Compute(aMesh,refShapeObject) ) - SMESH::ModifiedMesh(aMeshSObj,true); - // TO Do : change icon of all submeshes - else - SUIT_MessageBox::warn1(desktop(), - tr("SMESH_WRN_WARNING"), - tr("SMESH_WRN_COMPUTE_FAILED"), - tr("SMESH_BUT_OK")); - }catch(const SALOME::SALOME_Exception & S_ex){ - SalomeApp_Tools::QtCatchCorbaException(S_ex); - } - } - } + + if (!aMesh->_is_nil()) { +// if(!GetSMESHGen()->IsReadyToCompute(aMesh,aShapeObject)) { +// SUIT_MessageBox::warn1(desktop(), +// tr("SMESH_WRN_WARNING"), +// tr("SMESH_WRN_MISSING_PARAMETERS"), +// tr("SMESH_BUT_OK")); +// break; +// } + SMESH::algo_error_array_var errors = GetSMESHGen()->GetAlgoState(aMesh,aShapeObject); + if ( errors->length() > 0 ) { + SUIT_MessageBox::warn1(desktop(), + tr("SMESH_WRN_WARNING"), + SMESH::GetMessageOnAlgoStateErrors( errors.in() ), + tr("SMESH_BUT_OK")); + break; + } + try{ + if (GetSMESHGen()->Compute(aMesh,aShapeObject)) + SMESH::ModifiedMesh(aMeshSObj,true); + else + SUIT_MessageBox::warn1(desktop(), + tr("SMESH_WRN_WARNING"), + tr("SMESH_WRN_COMPUTE_FAILED"), + tr("SMESH_BUT_OK")); + } + catch(const SALOME::SALOME_Exception & S_ex){ + SalomeApp_Tools::QtCatchCorbaException(S_ex); + } + } } } - CORBA::Long anId = aStudy->StudyId(); - TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry()); - if ( automaticUpdate() && aVisualObj){ - aVisualObj->Update(); - SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry()); - if(!anActor){ - anActor = SMESH::CreateActor(aStudy,IObject->getEntry()); - if(anActor){ + CORBA::Long anId = aStudy->StudyId(); + TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry()); + if ( automaticUpdate() && aVisualObj){ + aVisualObj->Update(); + SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry()); + if(!anActor){ + anActor = SMESH::CreateActor(aStudy,IObject->getEntry()); + if(anActor){ SMESH::DisplayActor(view,anActor); //apo SMESH::FitAll(); } @@ -1364,6 +1322,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr("SMESH_BUT_OK")); } updateObjBrowser(); + Sel->setSelectedObjects( selected ); break; } @@ -1766,9 +1725,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) char* sName = Hyp->GetName(); SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(sName); if (aCreator) - { - aCreator->EditHypothesis(Hyp); - } + aCreator->edit( Hyp.in(), desktop() ); else { // report error @@ -1802,8 +1759,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { aName = anAttr; QString newName = QString(aName->Value().c_str()); - newName = LightApp_NameDlg::getName( desktop(), newName ); - if ( !newName.isEmpty() ) + bool ok; + newName = QInputDialog::getText( tr( "Rename" ), tr( "Enter new name:" ), QLineEdit::Normal, + newName, &ok, desktop() ); + if ( ok && !newName.isEmpty() ) { //old source: aStudy->renameIObject( IObject, newName ); aName->SetValue( newName.latin1() ); @@ -2221,7 +2180,10 @@ void SMESHGUI::createPopupItem( const int id, QChar lc = QtxPopupMgr::Selection::defEquality(); QString rule = "(%1) and (%2) and (%3)"; rule = rule.arg( QString( "%1>0" ).arg( QtxPopupMgr::Selection::defSelCountParam() ) ); - rule = rule.arg( QString( "%1client in {%2}" ).arg( lc ).arg( clients ) ); + if( clients.isEmpty() ) + rule = rule.arg( QString( "true" ) ); + else + rule = rule.arg( QString( "%1client in {%2}" ).arg( lc ).arg( clients ) ); rule = rule.arg( QString( "%1type in {%2}" ).arg( lc ).arg( types ) ); rule += theRule; @@ -2821,11 +2783,16 @@ 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()); return myComponentSMESH; } @@ -2894,6 +2861,9 @@ void SMESHGUI::createPreferences() setPreferenceProperty( dispmode, "strings", modes ); setPreferenceProperty( dispmode, "indexes", indices ); + int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab ); + addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" ); + int meshTab = addPreference( tr( "PREF_TAB_MESH" ) ); int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab ); @@ -3116,6 +3086,6 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const LightApp_Displayer* SMESHGUI::displayer() { if( !myDisplayer ) - myDisplayer = new SMESHGUI_Displayer( dynamic_cast( getApp()->activeStudy() ) ); + myDisplayer = new SMESHGUI_Displayer( getApp() ); return myDisplayer; }