X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=b8d0b6bd8ad00bfc1a44014d2e1f5428e3e51782;hb=4ff5bd61540272713e48de1eee75625028c32155;hp=e53d67a7974a339d83043b31df990702dec90476;hpb=8e26c31d5f0060ccabf7c32d69f53a7368757aea;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index e53d67a79..b8d0b6bd8 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -26,6 +26,7 @@ #include "SMESHGUI.h" +#include "SMESH_Client.hxx" #include "SMESHGUI_NodesDlg.h" #include "SMESHGUI_TransparencyDlg.h" #include "SMESHGUI_ClippingDlg.h" @@ -40,6 +41,7 @@ #include "SMESHGUI_Hypotheses.h" #include "SMESHGUI_MoveNodesDlg.h" #include "SMESHGUI_AddMeshElementDlg.h" +#include "SMESHGUI_AddQuadraticElementDlg.h" #include "SMESHGUI_EditHypothesesDlg.h" #include "SMESHGUI_CreateHypothesesDlg.h" #include "SMESHGUI_FilterDlg.h" @@ -81,16 +83,17 @@ #include "SalomeApp_Tools.h" #include "SalomeApp_Study.h" -#include "SalomeApp_NameDlg.h" -#include "SalomeApp_DataOwner.h" #include "SalomeApp_Application.h" -#include "SalomeApp_Preferences.h" -#include "SalomeApp_VTKSelector.h" -#include "SalomeApp_Operation.h" -#include "SalomeApp_UpdateFlags.h" - +#include "SalomeApp_CheckFileDlg.h" #include "SalomeApp_ImportOperation.h" +#include "LightApp_DataOwner.h" +#include "LightApp_Preferences.h" +#include "LightApp_VTKSelector.h" +#include "LightApp_Operation.h" +#include "LightApp_UpdateFlags.h" +#include "LightApp_NameDlg.h" + #include #include #include @@ -104,7 +107,6 @@ #include "SUIT_ResourceMgr.h" #include "SUIT_FileDlg.h" #include "SUIT_Desktop.h" -#include "SUIT_ResourceMgr.h" #include "SUIT_OverrideCursor.h" #include "SUIT_Study.h" #include "SUIT_Session.h" @@ -146,7 +148,7 @@ using namespace std; namespace{ - // Decalarations + // Declarations //============================================================= void ImportMeshesFromFile(SMESH::SMESH_Gen_ptr theComponentMesh, int theCommandID); @@ -184,7 +186,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; @@ -247,7 +248,7 @@ namespace{ void ExportMeshToFile( int theCommandID ) { - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -261,67 +262,92 @@ namespace{ switch ( theCommandID ) { case 125: case 122: - aFilterMap.insert( QObject::tr("MED 2.1 (*.med)"), SMESH::MED_V2_1 ); - aFilterMap.insert( QObject::tr("MED 2.2 (*.med)"), SMESH::MED_V2_2 ); + { + if (aMesh->HasDuplicatedGroupNamesMED()) { + int aRet = SUIT_MessageBox::warn2 + (SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_MED_DUPLICATED_GRP").arg(anIObject->getName()), + QObject::tr("SMESH_BUT_YES"), QObject::tr("SMESH_BUT_NO"), + 0, 1, 0); + if (aRet) + return; + } + + aFilterMap.insert( QObject::tr("MED 2.1 (*.med)"), SMESH::MED_V2_1 ); + aFilterMap.insert( QObject::tr("MED 2.2 (*.med)"), SMESH::MED_V2_2 ); + } break; case 124: case 121: aFilter = QObject::tr("DAT files (*.dat)"); break; case 126: - case 123: { - if(aMesh->NbPyramids()){ - int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_UNV").arg(anIObject->getName()), - QObject::tr("SMESH_BUT_YES"), - QObject::tr("SMESH_BUT_NO"), - 0,1,0); - if(aRet) - return; - } - aFilter = QObject::tr("IDEAS files (*.unv)"); + case 123: + { + if (aMesh->NbPyramids()) { + int aRet = SUIT_MessageBox::warn2 + (SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_UNV").arg(anIObject->getName()), + QObject::tr("SMESH_BUT_YES"), QObject::tr("SMESH_BUT_NO"), + 0, 1, 0); + if (aRet) + return; + } + aFilter = QObject::tr("IDEAS files (*.unv)"); + } break; default: return; - }} + } 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 - { - 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 ); - bool is_ok = false; - while(!is_ok){ - fd->exec(); - aFilename = fd->selectedFile(); - aFormat = aFilterMap[fd->selectedFilter()]; - is_ok = true; - if( !aFilename.isEmpty() - && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0) - && aFormat==SMESH::MED_V2_1){ - int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(), - QObject::tr("SMESH_WRN_WARNING"), - QObject::tr("SMESH_EXPORT_MED_V2_1").arg(anIObject->getName()), - QObject::tr("SMESH_BUT_YES"), - QObject::tr("SMESH_BUT_NO"), - 0,1,0); - if(aRet){ - is_ok = false; - } - } - } - delete fd; - } + else { + QStringList filters; + QMap::const_iterator it = aFilterMap.begin(); + for ( ; it != aFilterMap.end(); ++it ) + filters.push_back( it.key() ); + + //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(); + aFilename = fd->selectedFile(); + aFormat = aFilterMap[fd->selectedFilter()]; + is_ok = true; + if ( !aFilename.isEmpty() + && (aMesh->NbPolygons()>0 or aMesh->NbPolyhedrons()>0) + && aFormat==SMESH::MED_V2_1) { + int aRet = SUIT_MessageBox::warn2(SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("SMESH_EXPORT_MED_V2_1").arg(anIObject->getName()), + QObject::tr("SMESH_BUT_YES"), + QObject::tr("SMESH_BUT_NO"), + 0,1,0); + if (aRet) { + is_ok = false; + } + } + } + toCreateGroups = fd->IsChecked(); + delete fd; + } if ( !aFilename.isEmpty() ) { // Check whether the file already exists and delete it if yes QFile aFile( aFilename ); @@ -331,7 +357,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: @@ -360,7 +386,7 @@ namespace{ } void SetDisplayEntity(int theCommandID){ - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -395,7 +421,7 @@ namespace{ } void SetDisplayMode(int theCommandID){ - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -518,7 +544,7 @@ namespace{ void Control( int theCommandID ) { - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); @@ -583,7 +609,7 @@ namespace{ aControl = SMESH_Actor::eSkew; break; case 6009: - aTitle = QObject::tr( "VOLUME_3D_ELEMENTS" ); + aTitle = QObject::tr( "SMESH_VOLUME" ); aControl = SMESH_Actor::eVolume3D; break; } @@ -606,7 +632,7 @@ namespace{ if( !theIO.IsNull() ) { entry = theIO->getEntry(); - SalomeApp_DataOwner owner( entry ); + LightApp_DataOwner owner( entry ); if ( aTypeFilter.isOk( &owner )) { theOutTypeName = theInTypeName; return true; @@ -644,7 +670,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 ); @@ -666,8 +692,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() ) @@ -800,12 +826,11 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil(); //============================================================================= SMESHGUI::SMESHGUI() : SalomeApp_Module( "SMESH" ) -{ +{ if ( CORBA::is_nil( myComponentSMESH ) ) { - SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA( getApp()->namingService() ); - Engines::Component_var comp = ls->FindOrLoad_Component( "FactoryServer", "SMESH" ); - myComponentSMESH = SMESH::SMESH_Gen::_narrow( comp ); + CORBA::Boolean anIsEmbeddedMode; + myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode); } myActiveDialogBox = 0; @@ -835,11 +860,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; } @@ -1099,7 +1124,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 ); @@ -1146,7 +1171,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESH::UpdateView(); SALOME_ListIO l; - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + aSel->selectedObjects( l ); aSel->setSelectedObjects( l ); break; } @@ -1162,44 +1188,15 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 302: anAction = SMESH::eDisplayOnly; break; } - SalomeApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO sel_objects, to_process; 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 ); @@ -1267,10 +1264,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 701: // COMPUTE MESH { if(checkLock(aStudy)) break; - if ( vtkwnd ) { - SalomeApp_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; @@ -1279,7 +1277,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() ) { @@ -1287,69 +1285,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(); } @@ -1363,6 +1342,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr("SMESH_BUT_OK")); } updateObjBrowser(); + Sel->setSelectedObjects( selected ); break; } @@ -1427,9 +1407,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) else aDlg = new SMESHGUI_CuttingOfQuadsDlg(this); - int x, y ; - DefineDlgPosition( aDlg, x, y ); - aDlg->move( x, y ); aDlg->show(); break; } @@ -1516,7 +1493,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 ); @@ -1543,7 +1520,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 ); @@ -1606,7 +1583,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 ); @@ -1615,8 +1592,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) int nbSelectedGroups = 0; for ( ; It.More(); It.Next() ) { - SMESH::SMESH_Group_var aGroup = - SMESH::IObjectToInterface(It.Value()); + SMESH::SMESH_GroupBase_var aGroup = + SMESH::IObjectToInterface(It.Value()); if (!aGroup->_is_nil()) { nbSelectedGroups++; SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, "", aGroup); @@ -1625,7 +1602,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } if (nbSelectedGroups == 0) { - SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, "", SMESH::SMESH_Group::_nil()); + SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg( this, "", SMESH::SMESH_GroupBase::_nil()); aDlg->show(); } break; @@ -1697,7 +1674,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 ); @@ -1721,7 +1698,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 ); @@ -1747,7 +1724,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 ); @@ -1765,9 +1742,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 @@ -1783,7 +1758,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 ); @@ -1801,7 +1776,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 ); @@ -1826,10 +1801,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++) { @@ -1892,6 +1867,46 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } + case 4034: // QUADRATIC EDGE + case 4035: // QUADRATIC TRIANGLE + case 4036: // QUADRATIC QUADRANGLE + case 4037: // QUADRATIC TETRAHEDRON + case 4038: // QUADRATIC PYRAMID + case 4039: // QUADRATIC PENTAHEDRON + case 4040: // QUADRATIC HEXAHEDRON + { + if(checkLock(aStudy)) break; + if ( vtkwnd ) { + EmitSignalDeactivateDialog(); + int type; + + switch (theCommandID) { + case 4034: + type = QUAD_EDGE; break; + case 4035: + type = QUAD_TRIANGLE; break; + case 4036: + type = QUAD_QUADRANGLE; break; + case 4037: + type = QUAD_TETRAHEDRON; break; + case 4038: + type = QUAD_PYRAMID; break; + case 4039: + type = QUAD_PENTAHEDRON; break; + case 4040: + type = QUAD_HEXAHEDRON; + break; + default:; + } + new SMESHGUI_AddQuadraticElementDlg( this, type ); + } + else { + SUIT_MessageBox::warn1(SMESHGUI::desktop(), + tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"), + tr("SMESH_BUT_OK")); + } + break; + } case 4041: // REMOVES NODES { if(checkLock(aStudy)) break; @@ -2068,7 +2083,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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() ) { @@ -2099,7 +2114,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; case 9010: { - SalomeApp_SelectionMgr* mgr = selectionMgr(); + LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); if (selected.Extent() == 1) { @@ -2113,7 +2128,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) { @@ -2220,7 +2235,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; @@ -2343,6 +2361,13 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 301, "DISPLAY" ); createSMESHAction( 302, "DISPLAY_ONLY" ); createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" ); + createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" ); + createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" ); + createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" ); + createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" ); + createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" ); + createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" ); + createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" ); // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), @@ -2422,6 +2447,14 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 4031, addId, -1 ); createMenu( 4032, addId, -1 ); createMenu( 4033, addId, -1 ); + createMenu( separator(), addId, -1 ); + createMenu( 4034, addId, -1 ); + createMenu( 4035, addId, -1 ); + createMenu( 4036, addId, -1 ); + createMenu( 4037, addId, -1 ); + createMenu( 4038, addId, -1 ); + createMenu( 4039, addId, -1 ); + createMenu( 4040, addId, -1 ); createMenu( 4041, removeId, -1 ); createMenu( 4042, removeId, -1 ); @@ -2498,6 +2531,14 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 4032, addRemTb ); createTool( 4033, addRemTb ); createTool( separator(), addRemTb ); + createTool( 4034, addRemTb ); + createTool( 4035, addRemTb ); + createTool( 4036, addRemTb ); + createTool( 4037, addRemTb ); + createTool( 4038, addRemTb ); + createTool( 4039, addRemTb ); + createTool( 4040, addRemTb ); + createTool( separator(), addRemTb ); createTool( 4041, addRemTb ); createTool( 4042, addRemTb ); createTool( separator(), addRemTb ); @@ -2535,12 +2576,13 @@ void SMESHGUI::initialize( CAM_Application* app ) group = pat.arg( SMESHGUI_Selection::typeName( GROUP ) ), hypo = pat.arg( SMESHGUI_Selection::typeName( HYPOTHESIS ) ), algo = pat.arg( SMESHGUI_Selection::typeName( ALGORITHM ) ), - elems = QString( "'%1' '%2' '%3' '%4' '%5'" ). + elems = QString( "'%1' '%2' '%3' '%4' '%5' '%6'" ). arg( SMESHGUI_Selection::typeName( SUBMESH_VERTEX ) ). arg( SMESHGUI_Selection::typeName( SUBMESH_EDGE ) ). arg( SMESHGUI_Selection::typeName( SUBMESH_FACE ) ). arg( SMESHGUI_Selection::typeName( SUBMESH_SOLID ) ). - arg( SMESHGUI_Selection::typeName( SUBMESH_COMPOUND ) ), + arg( SMESHGUI_Selection::typeName( SUBMESH_COMPOUND ) ). + arg( SMESHGUI_Selection::typeName( SUBMESH ) ), subMesh = elems, mesh_group = mesh + " " + subMesh + " " + group, hyp_alg = hypo + " " + algo; @@ -2559,12 +2601,14 @@ 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 + + QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( QtxPopupMgr::Selection::defSelCountParam() ); + createPopupItem( 125, OB, mesh, only_one_non_empty ); // EXPORT_MED + createPopupItem( 126, OB, mesh, only_one_non_empty ); // EXPORT_UNV createPopupItem( 33, OB, subMesh + " " + group ); // DELETE popupMgr()->insert( separator(), -1, 0 ); @@ -2818,11 +2862,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; } @@ -2862,22 +2911,22 @@ 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" ); @@ -2891,24 +2940,27 @@ 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 ); - 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 ); @@ -2920,33 +2972,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" ) ); @@ -2963,16 +3015,16 @@ void SMESHGUI::createPreferences() 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" ); + 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" ) ); @@ -2981,10 +3033,10 @@ void SMESHGUI::createPreferences() 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 ); @@ -2999,10 +3051,10 @@ void SMESHGUI::createPreferences() 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 ); @@ -3022,11 +3074,68 @@ void SMESHGUI::createPreferences() void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) { - if( sect=="SMESH" ) + if( sect=="SMESH" ){ + float sbX1,sbY1,sbW,sbH; + float aTol = 1.00000009999999; + std::string aWarning; + SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this); 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 ); + else if (name == QString("scalar_bar_vertical_x") || name == QString("scalar_bar_vertical_width")){ + sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_x", sbX1); + sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_width", sbW); + if(sbX1+sbW > aTol){ + aWarning = "Origin and Size Vertical: X+Width > 1\n"; + sbX1=0.01; + sbW=0.05; + aResourceMgr->setValue("SMESH", "scalar_bar_vertical_x", sbX1); + aResourceMgr->setValue("SMESH", "scalar_bar_vertical_width", sbW); + } + } + else if(name == QString("scalar_bar_vertical_y") || name == QString("scalar_bar_vertical_height")){ + sbY1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_y", sbY1); + sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_vertical_height",sbH); + if(sbY1+sbH > aTol){ + aWarning = "Origin and Size Vertical: Y+Height > 1\n"; + sbY1=0.01; + sbH=0.5; + aResourceMgr->setValue("SMESH", "scalar_bar_vertical_y", sbY1); + aResourceMgr->setValue("SMESH", "scalar_bar_vertical_height",sbH); + } + } + else if(name == QString("scalar_bar_horizontal_x") || name == QString("scalar_bar_horizontal_width")){ + sbX1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_x", sbX1); + sbW = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_width", sbW); + if(sbX1+sbW > aTol){ + aWarning = "Origin and Size Horizontal: X+Width > 1\n"; + sbX1=0.2; + sbW=0.6; + aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_x", sbX1); + aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_width", sbW); + } + } + else if(name == QString("scalar_bar_horizontal_y") || name == QString("scalar_bar_horizontal_height")){ + sbY1 = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_y", sbY1); + sbH = aResourceMgr->doubleValue("SMESH", "scalar_bar_horizontal_height",sbH); + if(sbY1+sbH > aTol){ + aWarning = "Origin and Size Horizontal: Y+Height > 1\n"; + sbY1=0.01; + sbH=0.12; + aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_y", sbY1); + aResourceMgr->setValue("SMESH", "scalar_bar_horizontal_height",sbH); + } + } + + if(aWarning.size() != 0){ + aWarning += "The default values are applied instead."; + SUIT_MessageBox::warn1(SMESHGUI::desktop(), + QObject::tr("SMESH_ERR_SCALARBAR_PARAMS"), + QObject::tr(aWarning.c_str()), + QObject::tr("SMESH_BUT_OK")); + } + } } //================================================================================ @@ -3035,7 +3144,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 ) @@ -3086,9 +3195,9 @@ void SMESHGUI::onOperationAborted( SUIT_Operation* ) * 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 ) { @@ -3110,9 +3219,23 @@ SalomeApp_Operation* SMESHGUI::createOperation( const int id ) const return op; } -SalomeApp_Displayer* SMESHGUI::displayer() +//================================================================================ +/*! + * \brief Stops current operations and starts a given one + * \param id - The id of the operation to start + */ +//================================================================================ + +void SMESHGUI::switchToOperation(int id) +{ + if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() ) + activeStudy()->abortAllOperations(); + startOperation( id ); +} + +LightApp_Displayer* SMESHGUI::displayer() { if( !myDisplayer ) - myDisplayer = new SMESHGUI_Displayer( dynamic_cast( getApp()->activeStudy() ) ); + myDisplayer = new SMESHGUI_Displayer( getApp() ); return myDisplayer; }