X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=c0f40b875ffaa15a5c79e33cb1f6b2a203090357;hb=2e6d41859930a694e6df9302898e9fab77809428;hp=7c386d35cde67c3299e719f12be0768da2f055e3;hpb=c511644fda61729b9dc67c4aabf2a97b2be15f39;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 7c386d35c..c0f40b875 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -30,6 +30,7 @@ // SMESH includes #include "SMESHGUI.h" +#include "SMESHGUI_AdaptDlg.h" #include "SMESHGUI_Add0DElemsOnAllNodesDlg.h" #include "SMESHGUI_AddMeshElementDlg.h" #include "SMESHGUI_AddQuadraticElementDlg.h" @@ -97,12 +98,12 @@ #include "SMESH_version.h" -#include "SMESH_ControlsDef.hxx" #include "SMESH_Actor.h" #include "SMESH_ActorUtils.h" #include "SMESH_Client.hxx" +#include "SMESH_Comment.hxx" +#include "SMESH_ControlsDef.hxx" #include "SMESH_ScalarBarActor.h" -#include #include "SMESH_TypeFilter.hxx" // SALOME GUI includes @@ -172,6 +173,7 @@ #include #include #include "utilities.h" +#include // OCCT includes #include @@ -1382,6 +1384,108 @@ namespace } } + // Break link with Shaper model + void breakShaperLink() + { + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; + if (aSel) { + aSel->selectedObjects(selected); + if (selected.Extent()) { + Handle(SALOME_InteractiveObject) anIObject = selected.First(); + _PTR(Study) aStudy = SMESH::getStudy(); + std::string aEntry = anIObject->getEntry(); + _PTR(SObject) aSObj = aStudy->FindObjectID(aEntry); + if (aSObj) { + std::string aName = aSObj->GetName(); + QMessageBox::StandardButton aRes = SUIT_MessageBox::warning(SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("MSG_BREAK_SHAPER_LINK").arg(aName.c_str()), + SUIT_MessageBox::Yes | SUIT_MessageBox::No, SUIT_MessageBox::No); + if (aRes == SUIT_MessageBox::Yes) { + SUIT_DataOwnerPtrList aList; + aSel->selected(aList, "ObjectBrowser", true); + SUIT_DataOwner* aOwn = aList.first(); + LightApp_DataOwner* sowner = dynamic_cast(aOwn); + QString aREntry = sowner->entry(); + + static GEOM::GEOM_Gen_var geomGen; + if (CORBA::is_nil(geomGen)) { + SalomeApp_Application* app = dynamic_cast + (SUIT_Session::session()->activeApplication()); + if (app) { + SALOME_LifeCycleCORBA* ls = new SALOME_LifeCycleCORBA(app->namingService()); + Engines::EngineComponent_var comp = + ls->FindOrLoad_Component("FactoryServer", "SHAPERSTUDY"); + geomGen = GEOM::GEOM_Gen::_narrow(comp); + } + } + if (!CORBA::is_nil(geomGen)) + { + geomGen->BreakLink(aREntry.toStdString().c_str()); + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + + // remove actors whose objects are removed by BreakLink() + QList wndList = SMESHGUI::desktop()->windows(); + SUIT_ViewWindow* wnd; + foreach(wnd, wndList) + SMESH::UpdateActorsAfterUpdateStudy(wnd); + } + } + } + } + } + } + + //================================================================================ + /*! + * \brief Return true if a mesh icon == ICON_SMESH_TREE_GEOM_MODIF + * which means that the mesh can't be modified. It should be either re-computed + * or breakShaperLink()'ed. Warn the user about it. + */ + //================================================================================ + + bool warnOnGeomModif() + { + SALOME_ListIO selected; + if ( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) + aSel->selectedObjects(selected,"",/*convertReferences=*/false); + + SALOME_ListIteratorOfListIO It( selected ); + for ( ; It.More(); It.Next() ) + { + Handle(SALOME_InteractiveObject) io = It.Value(); + if ( !io->hasEntry() ) continue; + _PTR(SObject) so = SMESH::getStudy()->FindObjectID( io->getEntry() ); + SMESH::SMESH_Mesh_var mesh; + while ( mesh->_is_nil() && so && so->GetID() != "0:" ) + { + CORBA::Object_var obj = SMESH::SObjectToObject( so ); + SMESH::SMESH_IDSource_var isrc = SMESH::SMESH_IDSource::_narrow( obj ); + if ( isrc->_is_nil() ) + so = so->GetFather(); + else + mesh = isrc->GetMesh(); + } + if ( mesh->_is_nil() ) continue; + so = SMESH::FindSObject( mesh ); + if ( !so ) continue; + _PTR(GenericAttribute) attr; + so->FindAttribute( attr, "AttributePixMap" ); + _PTR(AttributePixMap) pixmap = attr; + if ( !pixmap ) continue; + + if ( pixmap->GetPixMap() == "ICON_SMESH_TREE_GEOM_MODIF" ) + { + SUIT_MessageBox::warning(SMESHGUI::desktop(), + QObject::tr("SMESH_WRN_WARNING"), + QObject::tr("MSG_WARN_ON_GEOM_MODIF")); + return true; + } + } + return false; + } + void SetDisplayMode(int theCommandID, VTK::MarkerMap& theMarkerMap) { SALOME_ListIO selected; @@ -1750,7 +1854,7 @@ namespace int anEntitiesCount = anActor->GetNumberControlEntities(); if (anEntitiesCount >= 0) functorName = functorName + ": " + QString::number(anEntitiesCount); - anActor->GetScalarBarActor()->SetTitle( functorName.toLatin1().constData() ); + anActor->GetScalarBarActor()->SetTitle( functorName.toUtf8().constData() ); SMESH::RepaintCurrentView(); #ifndef DISABLE_PLOT2DVIEWER if ( anActor->GetPlot2Histogram() ) { @@ -1866,12 +1970,12 @@ void SMESHGUI::OnEditDelete() int objectCount = 0; QString aNameList; QString aParentComponent = QString::null; - + for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() ) { Handle(SALOME_InteractiveObject) anIO = anIt.Value(); if ( anIO.IsNull() ) continue; - + QString father = "unknown", name; _PTR(SObject) aSO = aStudy->FindObjectID( anIO->getEntry() ); @@ -1920,8 +2024,8 @@ void SMESHGUI::OnEditDelete() SalomeApp_Application* anApp = dynamic_cast( SUIT_Session::session()->activeApplication() ); - // Put the whole hierarchy of sub-objects of the selected SO's into a list and - // then treat them all starting from the deepest objects (at list back) + // Put one level of sub-objects of the selected SO's into a list + // in order to get objects inside folders like "Assigned Algorithms" std::list< _PTR(SObject) > listSO; SALOME_ListIteratorOfListIO It(selected); for( ; It.More(); It.Next()) // loop on selected IO's @@ -1942,43 +2046,47 @@ void SMESHGUI::OnEditDelete() aSO = aRefSObject; // Delete main Object instead of reference listSO.push_back( aSO ); - std::list< _PTR(SObject) >::iterator itSO = --listSO.end(); - for ( ; itSO != listSO.end(); ++itSO ) { - _PTR(ChildIterator) it = aStudy->NewChildIterator( *itSO ); - for (it->InitEx(false); it->More(); it->Next()) - listSO.push_back( it->Value() ); - } + + _PTR(ChildIterator) it = aStudy->NewChildIterator( aSO ); + for (it->InitEx(false); it->More(); it->Next()) + listSO.push_back( it->Value() ); } } // Check if none of objects to delete is referred from outside std::list< _PTR(SObject) >::reverse_iterator ritSO; + std::vector< _PTR(SObject) > subSO; for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO ) { _PTR(SObject) SO = *ritSO; if ( !SO ) continue; - std::vector<_PTR(SObject)> aReferences = aStudy->FindDependances( *ritSO ); - for (size_t i = 0; i < aReferences.size(); i++) { - _PTR(SComponent) aComponent = aReferences[i]->GetFatherComponent(); - std::string type = aComponent->ComponentDataType(); - if ( type != "SMESH" ) - { - SUIT_MessageBox::warning( anApp->desktop(), - QObject::tr("WRN_WARNING"), - QObject::tr("DEP_OBJECT") ); - return; // outside SMESH, there is an object depending on a SMESH object + + int nbChildren = SO->GetLastChildTag(); + subSO.clear(); + subSO.reserve( 1 + nbChildren ); + subSO.push_back( SO ); + if ( nbChildren > 0 ) + { + _PTR(ChildIterator) it = aStudy->NewChildIterator( SO ); + for ( it->InitEx( true ); it->More(); it->Next() ) + subSO.push_back( it->Value() ); + } + for ( size_t i = 0; i < subSO.size(); ++i ) + { + std::vector<_PTR(SObject)> aReferences = aStudy->FindDependances( subSO[i] ); + for ( size_t j = 0; j < aReferences.size(); j++ ) { + _PTR(SComponent) aComponent = aReferences[j]->GetFatherComponent(); + std::string type = aComponent->ComponentDataType(); + if ( type != "SMESH" ) + { + SUIT_MessageBox::warning( anApp->desktop(), + QObject::tr("WRN_WARNING"), + QObject::tr("DEP_OBJECT") ); + return; // outside SMESH, there is an object depending on a SMESH object + } } } } - // Call mesh->Clear() to prevent loading mesh from file caused by hypotheses removal - for( It.Initialize( selected ); It.More(); It.Next()) // loop on selected IO's - { - Handle(SALOME_InteractiveObject) IObject = It.Value(); - SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface< SMESH::SMESH_Mesh >( IObject ); - if ( !mesh->_is_nil() ) - mesh->Clear(); - } - // Treat SO's in the list starting from the back aStudyBuilder->NewCommand(); // There is a transaction for ( ritSO = listSO.rbegin(); ritSO != listSO.rend(); ++ritSO ) @@ -1988,7 +2096,7 @@ void SMESHGUI::OnEditDelete() std::string anEntry = SO->GetID(); /** Erase graphical object and remove all its data **/ - if(SO->FindAttribute(anAttr, "AttributeIOR")) { + if ( SO->FindAttribute( anAttr, "AttributeIOR" )) { SMESH::RemoveVisualObjectWithActors( anEntry.c_str(), true); } /** Remove an object from data structures **/ @@ -2652,7 +2760,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) OCC_CATCH_SIGNALS; SMESH::UpdateView(); } - catch (std::bad_alloc) { // PAL16774 (Crash after display of many groups) + catch (std::bad_alloc&) { // PAL16774 (Crash after display of many groups) SMESH::OnVisuException(); } catch (...) { // PAL16774 (Crash after display of many groups) @@ -2750,18 +2858,37 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) break; } - case SMESHOp::OpCreateMesh: - case SMESHOp::OpCreateSubMesh: case SMESHOp::OpEditMeshOrSubMesh: case SMESHOp::OpEditMesh: case SMESHOp::OpEditSubMesh: + case SMESHOp::OpMeshOrder: + case SMESHOp::OpCreateSubMesh: + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified + // fall through + case SMESHOp::OpCreateMesh: case SMESHOp::OpCompute: case SMESHOp::OpComputeSubMesh: case SMESHOp::OpPreCompute: case SMESHOp::OpEvaluate: - case SMESHOp::OpMeshOrder: + case SMESHOp::OpShowErrors: startOperation( theCommandID ); break; + case SMESHOp::OpRecompute: + { + if ( isStudyLocked() ) + break; + SALOME_ListIO selected; + if ( LightApp_SelectionMgr *sel = selectionMgr() ) + sel->selectedObjects( selected ); + if ( selected.Extent() == 1 ) { + SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( selected.First() ); + if ( !aMesh->_is_nil() ) + aMesh->Clear(); + startOperation( SMESHOp::OpCompute ); + } + } + break; case SMESHOp::OpCopyMesh: { if (isStudyLocked()) break; @@ -2788,6 +2915,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified /*Standard_Boolean aRes; SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface(IObject); @@ -2818,6 +2947,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); SMESHGUI_MultiEditDlg* aDlg = NULL; @@ -2836,6 +2967,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpSmoothing: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SmoothingDlg( this ) )->show(); @@ -2848,6 +2981,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpExtrusion: { if (isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionDlg ( this ) )->show(); @@ -2859,6 +2994,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpExtrusionAlongAPath: { if (isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ExtrusionAlongPathDlg( this ) )->show(); @@ -2870,6 +3007,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRevolution: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RevolutionDlg( this ) )->show(); @@ -2883,6 +3022,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if ( isStudyLocked() ) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); @@ -2893,12 +3034,29 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } break; } + // Adaptation - begin + case SMESHOp::OpUniformRefinement: + case SMESHOp::OpHONewCase: + case SMESHOp::OpHOCaseFollow: + case SMESHOp::OpHONewIter: + case SMESHOp::OpHOIterCompute: + case SMESHOp::OpHOIterComputePublish: + case SMESHOp::OpHOEdit: + case SMESHOp::OpHODelete: + case SMESHOp::OpMGAdapt: + { + SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); + SMESHGUI_AdaptDlg *objet = new SMESHGUI_AdaptDlg( this, theCommandID, aMesh); + } + // Adaptation - end case SMESHOp::OpSplitBiQuadratic: case SMESHOp::OpConvertMeshToQuadratic: case SMESHOp::OpCreateBoundaryElements: // create 2D mesh from 3D case SMESHOp::OpReorientFaces: case SMESHOp::OpCreateGeometryGroup: { + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified startOperation( theCommandID ); break; } @@ -2911,6 +3069,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil(); @@ -2938,6 +3098,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3015,6 +3177,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3112,6 +3276,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) if ( isStudyLocked() ) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); @@ -3132,6 +3298,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if ( isStudyLocked() ) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); SMESHGUI_GroupOpDlg* aDlg = new SMESHGUI_DimGroupDlg( this ); @@ -3144,6 +3312,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) { if ( isStudyLocked() ) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified EmitSignalDeactivateDialog(); SMESHGUI_FaceGroupsSeparatedByEdgesDlg* aDlg = new SMESHGUI_FaceGroupsSeparatedByEdgesDlg( this ); @@ -3203,6 +3373,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpEditHypothesis: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; @@ -3248,6 +3420,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpUnassign: // REMOVE HYPOTHESIS / ALGORITHMS { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified SUIT_OverrideCursor wc; LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); @@ -3279,6 +3453,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpHexagonalPrism: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Edge; @@ -3305,6 +3481,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpPolyhedron: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_CreatePolyhedralVolumeDlg( this ) )->show(); @@ -3328,6 +3506,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpTriQuadraticHexahedron: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); SMDSAbs_EntityType type = SMDSEntity_Last; @@ -3359,6 +3539,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRemoveNodes: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveNodesDlg( this ) )->show(); @@ -3372,6 +3554,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRemoveElements: // REMOVES ELEMENTS { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RemoveElementsDlg( this ) )->show(); @@ -3386,6 +3570,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpClearMesh: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) @@ -3425,6 +3611,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRemoveOrphanNodes: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified SALOME_ListIO selected; if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() ) aSel->selectedObjects( selected ); @@ -3464,6 +3652,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRenumberingNodes: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 0 ) )->show(); @@ -3478,6 +3668,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRenumberingElements: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RenumberingDlg( this, 1 ) )->show(); @@ -3492,6 +3684,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpTranslation: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_TranslationDlg( this ) )->show(); @@ -3505,6 +3699,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpRotation: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_RotationDlg( this ) )->show(); @@ -3518,6 +3714,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpSymmetry: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SymmetryDlg( this ) )->show(); @@ -3531,6 +3729,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpScale: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_ScaleDlg( this ) )->show(); @@ -3545,6 +3745,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpOffset: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_OffsetDlg( this ) )->show(); @@ -3559,6 +3761,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpSewing: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_SewingDlg( this ) )->show(); @@ -3572,6 +3776,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpMergeNodes: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if(vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 0 ) )->show(); @@ -3585,6 +3791,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpMergeElements: { if (isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if (vtkwnd) { EmitSignalDeactivateDialog(); ( new SMESHGUI_MergeDlg( this, 1 ) )->show(); @@ -3596,12 +3804,16 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpMoveNode: // MAKE MESH PASS THROUGH POINT + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified startOperation( SMESHOp::OpMoveNode ); break; case SMESHOp::OpDuplicateNodes: { if(isStudyLocked()) break; + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified if ( vtkwnd ) { EmitSignalDeactivateDialog(); ( new SMESHGUI_DuplicateNodesDlg( this ) )->show(); @@ -3614,6 +3826,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case SMESHOp::OpElem0DOnElemNodes: // 0D_ON_ALL_NODES + if ( warnOnGeomModif() ) + break; // action forbiden as geometry modified startOperation( SMESHOp::OpElem0DOnElemNodes ); break; @@ -3747,6 +3961,9 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpSortChild: ::sortChildren(); break; + case SMESHOp::OpBreakLink: + ::breakShaperLink(); + break; } @@ -3760,7 +3977,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) * */ //============================================================================= -bool SMESHGUI::OnMousePress( QMouseEvent * pe, SUIT_ViewWindow * wnd ) +bool SMESHGUI::OnMousePress( QMouseEvent * /*pe*/, SUIT_ViewWindow * /*wnd*/ ) { return false; } @@ -3770,7 +3987,7 @@ bool SMESHGUI::OnMousePress( QMouseEvent * pe, SUIT_ViewWindow * wnd ) * */ //============================================================================= -bool SMESHGUI::OnMouseMove( QMouseEvent * pe, SUIT_ViewWindow * wnd ) +bool SMESHGUI::OnMouseMove( QMouseEvent * /*pe*/, SUIT_ViewWindow * /*wnd*/ ) { return true; } @@ -3780,7 +3997,7 @@ bool SMESHGUI::OnMouseMove( QMouseEvent * pe, SUIT_ViewWindow * wnd ) * */ //============================================================================= -bool SMESHGUI::OnKeyPress( QKeyEvent * pe, SUIT_ViewWindow * wnd ) +bool SMESHGUI::OnKeyPress( QKeyEvent * /*pe*/, SUIT_ViewWindow * /*wnd*/ ) { return true; } @@ -3813,7 +4030,7 @@ void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QStr if ( !icon_id.isEmpty() ) pix = resMgr->loadPixmap( "SMESH", tr( icon_id.toLatin1().data() ) ); else - pix = resMgr->loadPixmap( "SMESH", tr( QString( "ICO_%1" ).arg( po_id ).toLatin1().data() ), false ); + pix = resMgr->loadPixmap( "SMESH", tr( QString( "ICON_%1" ).arg( po_id ).toLatin1().data() ), false ); if ( !pix.isNull() ) icon = QIcon( pix ); @@ -3920,7 +4137,9 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpCopyMesh, "COPY_MESH", "ICON_COPY_MESH" ); createSMESHAction( SMESHOp::OpCompute, "COMPUTE", "ICON_COMPUTE" ); createSMESHAction( SMESHOp::OpComputeSubMesh, "COMPUTE_SUBMESH", "ICON_COMPUTE" ); + createSMESHAction( SMESHOp::OpRecompute, "RE_COMPUTE", "ICON_COMPUTE" ); createSMESHAction( SMESHOp::OpPreCompute, "PRECOMPUTE", "ICON_PRECOMPUTE" ); + createSMESHAction( SMESHOp::OpShowErrors, "SHOW_ERRORS", "ICON_SHOW_ERRORS" ); createSMESHAction( SMESHOp::OpEvaluate, "EVALUATE", "ICON_EVALUATE" ); createSMESHAction( SMESHOp::OpMeshOrder, "MESH_ORDER", "ICON_MESH_ORDER"); createSMESHAction( SMESHOp::OpCreateGroup, "CREATE_GROUP", "ICON_CREATE_GROUP" ); @@ -4067,6 +4286,18 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpAutoColor, "AUTO_COLOR" ); createSMESHAction( SMESHOp::OpDisableAutoColor, "DISABLE_AUTO_COLOR" ); + // Adaptation - begin + createSMESHAction( SMESHOp::OpUniformRefinement, "REF_ALL", "ICON_REF_ALL" ); + createSMESHAction( SMESHOp::OpHONewCase, "HOMARD_CREATE_CASE", "ICON_HOMARD_CREATE_CASE" ); + createSMESHAction( SMESHOp::OpHOCaseFollow, "HOMARD_FOLLOW_ITERATION", "ICON_HOMARD_FOLLOW_ITERATION" ); + createSMESHAction( SMESHOp::OpHONewIter, "HOMARD_NEW_ITERATION", "ICON_HOMARD_NEW_ITERATION" ); + createSMESHAction( SMESHOp::OpHOIterCompute, "HOMARD_COMPUTE", "ICON_HOMARD_COMPUTE" ); + createSMESHAction( SMESHOp::OpHOIterComputePublish, "HOMARD_COMPUTE_PUBLISH", "ICON_HOMARD_COMPUTE_PUBLISH" ); + createSMESHAction( SMESHOp::OpHOEdit, "EDIT", "ICON_DLG_EDIT_MESH" ); + createSMESHAction( SMESHOp::OpHODelete, "DELETE", "ICON_DELETE" ); + createSMESHAction( SMESHOp::OpMGAdapt, "MG_ADAPT", "ICON_MG_ADAPT" ); + // Adaptation - end + createSMESHAction( SMESHOp::OpMinimumDistance, "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" ); createSMESHAction( SMESHOp::OpBoundingBox, "MEASURE_BND_BOX", "ICON_MEASURE_BND_BOX" ); createSMESHAction( SMESHOp::OpPropertiesLength, "MEASURE_LENGTH", "ICON_MEASURE_LENGTH" ); @@ -4080,6 +4311,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" ); + createSMESHAction( SMESHOp::OpBreakLink, "BREAK_SHAPER_LINK" ); + QList aCtrlActions; aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode << SMESHOp::OpNodeConnectivityNb // node controls @@ -4106,6 +4339,7 @@ void SMESHGUI::initialize( CAM_Application* app ) meshId = createMenu( tr( "MEN_MESH" ), -1, 70, 10 ), ctrlId = createMenu( tr( "MEN_CTRL" ), -1, 60, 10 ), modifyId = createMenu( tr( "MEN_MODIFY" ), -1, 40, 10 ), + adaptId = createMenu( tr( "MEN_ADAPT" ), -1, 80, 10 ), measureId = createMenu( tr( "MEN_MEASURE" ), -1, 50, 10 ), viewId = createMenu( tr( "MEN_VIEW" ), -1, 2 ); @@ -4123,6 +4357,7 @@ void SMESHGUI::initialize( CAM_Application* app ) removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ), //renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ), transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ), + refHomardId = createMenu( tr( "MEN_REF_HOMARD" ), adaptId, -1, 10 ), basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 ); //createMenu( SMESHOp::OpImportDAT, importId, -1 ); @@ -4278,6 +4513,20 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpSmoothing, modifyId, -1 ); createMenu( SMESHOp::OpPatternMapping, modifyId, -1 ); + // Adaptation - begin + createMenu( SMESHOp::OpUniformRefinement, adaptId, -1 ); + createMenu( SMESHOp::OpHONewCase, refHomardId, -1 ); + createMenu( SMESHOp::OpHOCaseFollow, refHomardId, -1 ); + createMenu( separator(), refHomardId, -1 ); + createMenu( SMESHOp::OpHONewIter, refHomardId, -1 ); + createMenu( SMESHOp::OpHOIterCompute, refHomardId, -1 ); + createMenu( SMESHOp::OpHOIterComputePublish, refHomardId, -1 ); + createMenu( separator(), refHomardId, -1 ); + createMenu( SMESHOp::OpHOEdit, refHomardId, -1 ); + createMenu( SMESHOp::OpHODelete, refHomardId, -1 ); + createMenu( SMESHOp::OpMGAdapt, adaptId, -1 ); + // Adaptation - end + createMenu( SMESHOp::OpMinimumDistance, measureId, -1 ); createMenu( SMESHOp::OpBoundingBox, measureId, -1 ); createMenu( SMESHOp::OpAngle, measureId, -1 ); @@ -4292,22 +4541,7 @@ void SMESHGUI::initialize( CAM_Application* app ) connect( volumeMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) ); // ----- create toolbars -------------- - int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ), - info = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ), - groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ), - ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ), - ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ), - ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ), - ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ), - addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ), - addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ), - remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ), - //renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ), - transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ), - modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ), - measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ), - dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) ); - + int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ) ; createTool( SMESHOp::OpCreateMesh, meshTb ); createTool( SMESHOp::OpCreateSubMesh, meshTb ); createTool( SMESHOp::OpEditMeshOrSubMesh, meshTb ); @@ -4319,25 +4553,30 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpEvaluate, meshTb ); createTool( SMESHOp::OpMeshOrder, meshTb ); + int infoTb = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ) ; + createTool( SMESHOp::OpMeshInformation, infoTb ); + //createTool( SMESHOp::OpStdInfo, meshTb ); + //createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) + createTool( SMESHOp::OpFindElementByPoint, infoTb ); + + int groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ) ; createTool( SMESHOp::OpCreateGroup, groupTb ); createTool( SMESHOp::OpCreateGeometryGroup, groupTb ); createTool( SMESHOp::OpConstructGroup, groupTb ); createTool( SMESHOp::OpEditGroup, groupTb ); - createTool( SMESHOp::OpMeshInformation, info ); - //createTool( SMESHOp::OpStdInfo, meshTb ); - //createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command) - createTool( SMESHOp::OpFindElementByPoint, info ); - + int ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ) ; createTool( SMESHOp::OpFreeNode, ctrl0dTb ); createTool( SMESHOp::OpEqualNode, ctrl0dTb ); //createTool( SMESHOp::OpNodeConnectivityNb, ctrl0dTb ); + int ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ) ; createTool( SMESHOp::OpFreeBorder, ctrl1dTb ); createTool( SMESHOp::OpLength, ctrl1dTb ); createTool( SMESHOp::OpConnection, ctrl1dTb ); createTool( SMESHOp::OpEqualEdge, ctrl1dTb ); + int ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ) ; createTool( SMESHOp::OpFreeEdge, ctrl2dTb ); createTool( SMESHOp::OpFreeFace, ctrl2dTb ); createTool( SMESHOp::OpBareBorderFace, ctrl2dTb ); @@ -4354,6 +4593,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpEqualFace, ctrl2dTb ); createTool( SMESHOp::OpDeflection2D, ctrl2dTb ); + int ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ) ; createTool( SMESHOp::OpAspectRatio3D, ctrl3dTb ); createTool( SMESHOp::OpVolume, ctrl3dTb ); createTool( SMESHOp::OpMaxElementLength3D, ctrl3dTb ); @@ -4361,6 +4601,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpOverConstrainedVolume, ctrl3dTb ); createTool( SMESHOp::OpEqualVolume, ctrl3dTb ); + int addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ) ; createTool( SMESHOp::OpNode, addElemTb ); createTool( SMESHOp::OpElem0D, addElemTb ); createTool( SMESHOp::OpElem0DOnElemNodes, addElemTb ); @@ -4376,6 +4617,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpHexagonalPrism, addElemTb ); createTool( SMESHOp::OpPolyhedron, addElemTb ); + int addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ) ; createTool( SMESHOp::OpQuadraticEdge, addNonElemTb ); createTool( SMESHOp::OpQuadraticTriangle, addNonElemTb ); createTool( SMESHOp::OpBiQuadraticTriangle, addNonElemTb ); @@ -4389,14 +4631,17 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpQuadraticHexahedron, addNonElemTb ); createTool( SMESHOp::OpTriQuadraticHexahedron, addNonElemTb ); + int remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ) ; createTool( SMESHOp::OpRemoveNodes, remTb ); createTool( SMESHOp::OpRemoveElements, remTb ); createTool( SMESHOp::OpRemoveOrphanNodes, remTb ); createTool( SMESHOp::OpClearMesh, remTb ); +// int renumbTb = createTool( tr( "TB_RENUMBER" ), QString( "SMESHRenumberingToolbar" ) ) ; //createTool( SMESHOp::OpRenumberingNodes, renumbTb ); //createTool( SMESHOp::OpRenumberingElements, renumbTb ); + int transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ) ; createTool( SMESHOp::OpMergeNodes, transformTb ); createTool( SMESHOp::OpMergeElements, transformTb ); createTool( SMESHOp::OpTranslation, transformTb ); @@ -4407,6 +4652,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpSewing, transformTb ); createTool( SMESHOp::OpDuplicateNodes, transformTb ); + int modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ) ; createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb ); createTool( SMESHOp::OpCreateBoundaryElements, modifyTb ); createTool( SMESHOp::OpExtrusion, modifyTb ); @@ -4424,8 +4670,21 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpSmoothing, modifyTb ); createTool( SMESHOp::OpPatternMapping, modifyTb ); + // Adaptation - begin + int adaptTb = createTool( tr( "TB_ADAPTATION" ),QString( "SMESHAdaptationToolbar" ) ) ; + createTool( SMESHOp::OpUniformRefinement, adaptTb ); + createTool( SMESHOp::OpHONewCase, adaptTb ); + createTool( SMESHOp::OpHOCaseFollow, adaptTb ); + createTool( SMESHOp::OpHONewIter, adaptTb ); + createTool( SMESHOp::OpHOIterCompute, adaptTb ); + createTool( SMESHOp::OpHOIterComputePublish, adaptTb ); + createTool( SMESHOp::OpMGAdapt, adaptTb ); + // Adaptation - end + + int measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ) ; createTool( SMESHOp::OpMinimumDistance, measuremTb ); + int dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) ); createTool( SMESHOp::OpUpdate, dispModeTb ); QString lc = "$"; // VSR : instead of QtxPopupSelection::defEquality(); @@ -4472,22 +4731,24 @@ void SMESHGUI::initialize( CAM_Application* app ) hasVolumes("({'Volume'} in elemTypes)"), hasFacesOrVolumes("(({'Face'} in elemTypes) || ({'Volume'} in elemTypes)) "); - createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); - createPopupItem( SMESHOp::OpCreateSubMesh, OB, mesh, "&& hasGeomReference"); createPopupItem( SMESHOp::OpEditMesh, OB, mesh, "&& selcount=1" ); + createPopupItem( SMESHOp::OpCreateSubMesh, OB, mesh, "&& hasGeomReference"); + createPopupItem( SMESHOp::OpMeshOrder, OB, mesh, "&& selcount=1 && hasAlgo && hasGeomReference" ); createPopupItem( SMESHOp::OpEditSubMesh, OB, subMesh, "&& selcount=1 && hasGeomReference" ); createPopupItem( SMESHOp::OpEditGroup, OB, group ); createPopupItem( SMESHOp::OpEditGeomGroupAsGroup, OB, group, "&& groupType != 'Group'" ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpCompute, OB, mesh, "&& selcount=1 && isComputable" ); - createPopupItem( SMESHOp::OpComputeSubMesh, OB, subMesh, "&& selcount=1 && isComputable" ); - createPopupItem( SMESHOp::OpPreCompute, OB, mesh, "&& selcount=1 && isPreComputable" ); - createPopupItem( SMESHOp::OpEvaluate, OB, mesh, "&& selcount=1 && isComputable" ); - createPopupItem( SMESHOp::OpMeshOrder, OB, mesh, "&& selcount=1 && isComputable && hasGeomReference" ); - createPopupItem( SMESHOp::OpUpdate, OB, mesh_part ); + createPopupItem( SMESHOp::OpCompute, OB, mesh, "&& selcount=1 && hasAlgo && isComputable" ); + createPopupItem( SMESHOp::OpRecompute, OB, mesh, "&& selcount=1 && hasAlgo && " + isNotEmpty ); + createPopupItem( SMESHOp::OpShowErrors, OB, mesh, "&& selcount=1 && hasErrors" ); + createPopupItem( SMESHOp::OpComputeSubMesh, OB, subMesh, "&& selcount=1 && hasAlgo && isComputable" ); + createPopupItem( SMESHOp::OpPreCompute, OB, mesh, "&& selcount=1 && hasAlgo && isPreComputable" ); + createPopupItem( SMESHOp::OpEvaluate, OB, mesh, "&& selcount=1 && hasAlgo && isComputable" ); + popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpFileInformation, OB, mesh, "&& selcount=1 && isImported" ); createPopupItem( SMESHOp::OpMeshInformation, OB, mesh_part ); - createPopupItem( SMESHOp::OpFindElementByPoint,OB, mesh_group, "&& selcount=1" ); + createPopupItem( SMESHOp::OpFindElementByPoint,OB, mesh_group, "&& selcount=1 && " + hasElems ); createPopupItem( SMESHOp::OpOverallMeshQuality,OB, mesh_part ); popupMgr()->insert( separator(), -1, 0 ); createPopupItem( SMESHOp::OpCreateGroup, OB, mesh, "&& selcount=1" ); @@ -4497,17 +4758,26 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpEditHypothesis, OB, hypo, "&& isEditableHyp"); createPopupItem( SMESHOp::OpUnassign, OB, hyp_alg ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh ); + createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh, "&& " + hasElems ); createPopupItem( SMESHOp::OpCreateBoundaryElements, OB, mesh_group, "&& selcount=1 && dim>=2"); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpClearMesh, OB, mesh ); - //popupMgr()->insert( separator(), -1, 0 ); + + // Adaptation - begin + createPopupItem( SMESHOp::OpUniformRefinement, OB, mesh ); + createPopupItem( SMESHOp::OpHONewCase, OB, mesh ); +// createPopupItem( SMESHOp::OpHOCaseFollow, OB, mesh ); +// createPopupItem( SMESHOp::OpHONewIter, OB, mesh ); +// createPopupItem( SMESHOp::OpHOIterCompute, OB, mesh ); +// createPopupItem( SMESHOp::OpHOIterComputePublish, OB, mesh ); + createPopupItem( SMESHOp::OpMGAdapt, OB, mesh ); + // Adaptation - end QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc ); QString multiple_non_empty = QString( " && %1>0 && numberOfNodes>0" ).arg( dc ); QString only_one_2D = only_one_non_empty + " && dim>1"; int anId = popupMgr()->insert( tr( "MEN_EXPORT" ), -1, -1 ); // EXPORT submenu + popupMgr()->findMenu( anId )->menuAction()->setIcon( resourceMgr()->loadPixmap( "SMESH", tr( "ICON_EXPORT" ))); createPopupItem( SMESHOp::OpPopupExportMED, OB, mesh_group, multiple_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportUNV, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportSTL, OB, mesh_group, only_one_2D, anId ); @@ -4517,8 +4787,6 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportGMF, OB, mesh_group, only_one_non_empty, anId ); createPopupItem( SMESHOp::OpPopupExportDAT, OB, mesh_group, only_one_non_empty, anId ); - createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); - createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); anId = popupMgr()->insert( tr( "MEN_IMPORT" ), -1, -1 ); // IMPORT submenu createPopupItem( SMESHOp::OpPopupImportMED, OB, smesh, "", anId ); @@ -4532,18 +4800,22 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( SMESHOp::OpPopupImportDAT, OB, smesh, "", anId ); popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpClearMesh, OB, mesh ); + createPopupItem( SMESHOp::OpDelete, OB, mesh_part + " " + hyp_alg ); + createPopupItem( SMESHOp::OpDeleteGroup, OB, group ); + // popup for viewer createPopupItem( SMESHOp::OpEditGroup, View, group ); createPopupItem( SMESHOp::OpAddElemGroupPopup, View, elems, "&& guiState = 800" ); createPopupItem( SMESHOp::OpRemoveElemGroupPopup, View, elems, "&& guiState = 800" ); popupMgr()->insert( separator(), -1, 0 ); - createPopupItem( SMESHOp::OpUpdate, View, mesh_part ); createPopupItem( SMESHOp::OpMeshInformation, View, mesh_part ); createPopupItem( SMESHOp::OpOverallMeshQuality, View, mesh_part ); - createPopupItem( SMESHOp::OpFindElementByPoint, View, mesh ); + createPopupItem( SMESHOp::OpFindElementByPoint, View, mesh, "&& " + hasElems); popupMgr()->insert( separator(), -1, 0 ); + createPopupItem( SMESHOp::OpUpdate, OB + " " + View, mesh_part ); createPopupItem( SMESHOp::OpAutoColor, OB + " " + View, mesh, "&& (not isAutoColor)" ); createPopupItem( SMESHOp::OpDisableAutoColor, OB + " " + View, mesh, "&& isAutoColor" ); popupMgr()->insert( separator(), -1, 0 ); @@ -4853,6 +5125,9 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( SMESHOp::OpSortChild ), "$component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1", QtxPopupMgr::VisibleRule ); popupMgr()->insert( separator(), -1, -1 ); + popupMgr()->insert( action( SMESHOp::OpBreakLink), -1, -1 ); + popupMgr()->setRule( action( SMESHOp::OpBreakLink), "$component={'SHAPERSTUDY'} and client='ObjectBrowser' and canBreakLink", QtxPopupMgr::VisibleRule ); + connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ), this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) ); @@ -4878,8 +5153,9 @@ bool SMESHGUI::isSelectionCompatible() SALOME_ListIteratorOfListIO It( selected ); for ( ; isCompatible && It.More(); It.Next()) isCompatible = - ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || - ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); + ( strcmp("GEOM", It.Value()->getComponentDataType()) == 0 ) || + ( strcmp("SHAPERSTUDY", It.Value()->getComponentDataType()) == 0 ) || + ( strcmp("SMESH", It.Value()->getComponentDataType()) == 0 ); return isCompatible; } @@ -4888,7 +5164,7 @@ bool SMESHGUI::isSelectionCompatible() bool SMESHGUI::reusableOperation( const int id ) { // compute, evaluate and precompute are not reusable operations - return ( id == SMESHOp::OpCompute || id == SMESHOp::OpPreCompute || id == SMESHOp::OpEvaluate ) ? false : SalomeApp_Module::reusableOperation( id ); + return ( id == SMESHOp::OpCompute || id == SMESHOp::OpPreCompute || id == SMESHOp::OpEvaluate || id == SMESHOp::OpRecompute ) ? false : SalomeApp_Module::reusableOperation( id ); } bool SMESHGUI::activateModule( SUIT_Study* study ) @@ -4926,7 +5202,14 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) QList wndList = aDesk->windows(); SUIT_ViewWindow* wnd; foreach ( wnd, wndList ) + { connectView( wnd ); + + // remove actors whose objects are removed in GetSMESHGen()->UpdateStudy() + SMESH::UpdateActorsAfterUpdateStudy(wnd); + + wnd->update(); + } } Py_XDECREF(pluginsmanager); @@ -4992,9 +5275,9 @@ void SMESHGUI::contextMenuPopup( const QString& client, QMenu* menu, QString& ti _PTR(Study) study = appStudy->studyDS(); _PTR(SObject) obj = study->FindObjectID( io->getEntry() ); if ( obj ) { - QString aName = QString( SMESH::fromUtf8(obj->GetName()) ); - while ( aName.at( aName.length() - 1 ) == ' ' ) // Remove extraspaces in Name of Popup - aName.remove( (aName.length() - 1), 1 ); + QString aName = SMESH::fromUtf8( obj->GetName()); + while ( !aName.isEmpty() && aName.at( aName.length() - 1 ) == ' ' ) // Remove extraspaces in Name of Popup + aName.remove(( aName.length() - 1 ), 1 ); title = aName; } } @@ -5049,7 +5332,7 @@ void SMESHGUI::addActorAsObserver( SMESH_Actor* theActor ) void SMESHGUI::ProcessEvents( vtkObject* theObject, unsigned long theEvent, void* theClientData, - void* theCallData ) + void* /*theCallData*/ ) { if( SMESHGUI* aSMESHGUI = reinterpret_cast( theClientData ) ) { if( theObject && (int) theEvent == SMESH::DeleteActorEvent ) { @@ -5094,7 +5377,7 @@ void SMESHGUI::createPreferences() setPreferenceProperty( dispgroup, "columns", 2 ); addPreference( tr( "PREF_FITALL_ON_DISPLAYONLY" ), dispgroup, LightApp_Preferences::Bool, "SMESH", "fitall_on_displayonly" ); - + int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); QStringList modes; modes.append( tr("MEN_WIRE") ); @@ -5207,6 +5490,7 @@ void SMESHGUI::createPreferences() "SMESH", "nb_segments_per_edge" ); setPreferenceProperty( nbSeg, "min", 1 ); setPreferenceProperty( nbSeg, "max", 10000000 ); + addPreference( tr( "PREF_USE_MESHGEMS_HYPOSET" ), segGroup, LightApp_Preferences::Bool, "SMESH", "use-meshgems-hypo-sets" ); int loadGroup = addPreference( tr( "SMESH_PREF_MESH_LOADING" ), genTab ); addPreference( tr( "PREF_FORGET_MESH_AT_HYP_MODIF" ), loadGroup, LightApp_Preferences::Bool, @@ -5470,6 +5754,57 @@ void SMESHGUI::createPreferences() setPreferenceProperty( coloringType, "indexes", indices ); addPreference( tr( "SMESH_DISTRIBUTION_COLOR" ), distributionGr, LightApp_Preferences::Color, "SMESH", "distribution_color" ); + // Adaptation - begin + // Adaptation tab ------------------------------------------------------------------------ + int adaptTab = addPreference( tr( "ADAPT_PREF_TAB_GENERAL" ) ); + int bloc, pref ; + // Refinement with HOMARD + bloc = addPreference( tr( "ADAPT_PREF_HOMARD_PUBLICATION" ), adaptTab ); + setPreferenceProperty( bloc, "columns", 1 ); + pref = addPreference( tr( "ADAPT_PREF_HOMARD_PUBLICATION_MAILLAGE_IN" ), bloc, LightApp_Preferences::Bool, "HOMARD", "homard_publish_mesh_in" ); + pref = addPreference( tr( "ADAPT_PREF_HOMARD_PUBLICATION_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "homard_publish_mesh_out" ); + + // YACS with HOMARD + bloc = addPreference( tr( "ADAPT_PREF_HOMARD_YACS" ), adaptTab ); + setPreferenceProperty( bloc, "columns", 1 ); + pref = addPreference( tr( "ADAPT_PREF_HOMARD_YACS_MAX_ITER" ), bloc, LightApp_Preferences::IntSpin, "HOMARD", "homard_yacs_max_iter" ); + setPreferenceProperty( pref, "min", 0 ); + setPreferenceProperty( pref, "max", 100000000 ); + setPreferenceProperty( pref, "step", 1 ); + pref = addPreference( tr( "ADAPT_PREF_HOMARD_YACS_MAX_NODE" ), bloc, LightApp_Preferences::IntSpin, "HOMARD", "homard_yacs_max_node" ); + setPreferenceProperty( pref, "min", 0 ); + setPreferenceProperty( pref, "max", 100000000 ); + setPreferenceProperty( pref, "step", 1000 ); + pref = addPreference( tr( "ADAPT_PREF_HOMARD_YACS_MAX_ELEM" ), bloc, LightApp_Preferences::IntSpin, "HOMARD", "homard_yacs_max_elem" ); + setPreferenceProperty( pref, "min", 0 ); + setPreferenceProperty( pref, "max", 100000000 ); + setPreferenceProperty( pref, "step", 1000 ); + pref = addPreference( tr( "ADAPT_PREF_HOMARD_YACS_TYPE_CONVERGENCE" ), bloc, LightApp_Preferences::Selector, "HOMARD", "homard_yacs_type_test" ); + QStringList aListOfTypeTest; + aListOfTypeTest << tr( "ADAPT_PREF_NONE" ); + aListOfTypeTest << "VTest > VRef"; + aListOfTypeTest << "VTest < VRef"; + setPreferenceProperty( pref, "strings", aListOfTypeTest ); + + // MG-Adapt + bloc = addPreference( tr( "ADAPT_PREF_MG_ADAPT" ), adaptTab ); + setPreferenceProperty( bloc, "columns", 1 ); + pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "mg_adapt_file_mesh_out" ); + pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "mg_adapt_publish_mesh_out" ); + pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP" ), bloc, LightApp_Preferences::Selector, "HOMARD", "mg_adapt_size_map" ); + QStringList aListOfSizeMap; + aListOfSizeMap << tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL" ); + aListOfSizeMap << tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND" ); + aListOfSizeMap << tr( "ADAPT_PREF_NONE" );; + setPreferenceProperty( pref, "strings", aListOfSizeMap ); + pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP" ), bloc, LightApp_Preferences::Selector, "HOMARD", "mg_adapt_time_step" ); + QStringList aListOfTimeStep; + aListOfTimeStep << tr( "ADAPT_PREF_NONE" ); + aListOfTimeStep << tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST" ); + aListOfTimeStep << tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP_C" );; + setPreferenceProperty( pref, "strings", aListOfTimeStep ); + // Adaptation - end + } void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) @@ -5632,55 +5967,70 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const // to do : create operation here switch( id ) { - case SMESHOp::OpSplitBiQuadratic: - op = new SMESHGUI_SplitBiQuadOp(); + case SMESHOp::OpSplitBiQuadratic: + op = new SMESHGUI_SplitBiQuadOp(); break; - case SMESHOp::OpConvertMeshToQuadratic: - op = new SMESHGUI_ConvToQuadOp(); + case SMESHOp::OpConvertMeshToQuadratic: + op = new SMESHGUI_ConvToQuadOp(); break; - case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D - op = new SMESHGUI_Make2DFrom3DOp(); + case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D + op = new SMESHGUI_Make2DFrom3DOp(); break; - case SMESHOp::OpReorientFaces: - op = new SMESHGUI_ReorientFacesOp(); - break; - case SMESHOp::OpCreateMesh: - op = new SMESHGUI_MeshOp( true, true ); + case SMESHOp::OpReorientFaces: + op = new SMESHGUI_ReorientFacesOp(); + break; + case SMESHOp::OpCreateMesh: + op = new SMESHGUI_MeshOp( true, true ); + break; + case SMESHOp::OpCreateSubMesh: + op = new SMESHGUI_MeshOp( true, false ); + break; + case SMESHOp::OpEditMeshOrSubMesh: + case SMESHOp::OpEditMesh: + case SMESHOp::OpEditSubMesh: + op = new SMESHGUI_MeshOp( false ); break; - case SMESHOp::OpCreateSubMesh: - op = new SMESHGUI_MeshOp( true, false ); + case SMESHOp::OpCompute: + case SMESHOp::OpComputeSubMesh: + op = new SMESHGUI_ComputeOp(); break; - case SMESHOp::OpEditMeshOrSubMesh: - case SMESHOp::OpEditMesh: - case SMESHOp::OpEditSubMesh: - op = new SMESHGUI_MeshOp( false ); + case SMESHOp::OpShowErrors: + op = new SMESHGUI_ShowErrorsOp(); break; - case SMESHOp::OpCompute: - case SMESHOp::OpComputeSubMesh: - op = new SMESHGUI_ComputeOp(); + case SMESHOp::OpPreCompute: + op = new SMESHGUI_PrecomputeOp(); break; - case SMESHOp::OpPreCompute: - op = new SMESHGUI_PrecomputeOp(); + case SMESHOp::OpEvaluate: + op = new SMESHGUI_EvaluateOp(); break; - case SMESHOp::OpEvaluate: - op = new SMESHGUI_EvaluateOp(); + case SMESHOp::OpMeshOrder: + op = new SMESHGUI_MeshOrderOp(); break; - case SMESHOp::OpMeshOrder: - op = new SMESHGUI_MeshOrderOp(); + case SMESHOp::OpCreateGeometryGroup: + op = new SMESHGUI_GroupOnShapeOp(); break; - case SMESHOp::OpCreateGeometryGroup: - op = new SMESHGUI_GroupOnShapeOp(); - break; - case SMESHOp::OpFindElementByPoint: - op = new SMESHGUI_FindElemByPointOp(); - break; - case SMESHOp::OpMoveNode: // Make mesh pass through point - op = new SMESHGUI_MakeNodeAtPointOp(); - break; - case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes - op = new SMESHGUI_Add0DElemsOnAllNodesOp(); - break; - default: + case SMESHOp::OpFindElementByPoint: + op = new SMESHGUI_FindElemByPointOp(); + break; + case SMESHOp::OpMoveNode: // Make mesh pass through point + op = new SMESHGUI_MakeNodeAtPointOp(); + break; + case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes + op = new SMESHGUI_Add0DElemsOnAllNodesOp(); + break; + // Adaptation - begin + case SMESHOp::OpUniformRefinement: + case SMESHOp::OpHONewCase: + case SMESHOp::OpHOCaseFollow: + case SMESHOp::OpHONewIter: + case SMESHOp::OpHOIterCompute: + case SMESHOp::OpHOIterComputePublish: + case SMESHOp::OpHOEdit: + case SMESHOp::OpHODelete: + case SMESHOp::OpMGAdapt: + break; + // Adaptation - end + default: break; } @@ -6134,8 +6484,6 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // componentName is used for encoding of entries when storing them in IParameters std::string componentName = myComponentSMESH->ComponentDataType(); - //_PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM"); - //if (!aSComponent) return; // IParameters _PTR(AttributeParameter) ap = studyDS->GetModuleParameters("Interface Applicative",