X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=9eb0ab0dab43fb2a578ceb24ebba37d06554d64c;hp=bc593e2ffc79c4b11256b85e5485685a30c5fe69;hb=e14c11e2d75d4cc48a234c4cf238bbfe12f49fca;hpb=630bd9d38d154da34432b67b7032a37db5c1c06e diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index bc593e2ff..9eb0ab0da 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 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 @@ -81,8 +81,10 @@ #include "SMESHGUI_SymmetryDlg.h" #include "SMESHGUI_TranslationDlg.h" #include "SMESHGUI_TransparencyDlg.h" +#include "SMESHGUI_DisplayEntitiesDlg.h" #include "SMESHGUI_FilterUtils.h" +#include "SMESHGUI_GEOMGenUtils.h" #include "SMESHGUI_GroupUtils.h" #include "SMESHGUI_HypothesesUtils.h" #include "SMESHGUI_MeshUtils.h" @@ -90,14 +92,14 @@ #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" -#include +#include "SMESH_version.h" #include "SMESH_ControlsDef.hxx" -#include -#include -#include -#include -#include +#include "SMESH_Actor.h" +#include "SMESH_ActorUtils.h" +#include "SMESH_Client.hxx" +#include "SMESH_ScalarBarActor.h" +#include "SMESH_TypeFilter.hxx" // SALOME GUI includes #include @@ -131,7 +133,6 @@ #include #include -#include #ifndef DISABLE_PLOT2DVIEWER #include @@ -167,6 +168,7 @@ #include #include #include +#include "utilities.h" // OCCT includes #include @@ -1565,111 +1567,124 @@ namespace void Control( int theCommandID ) { + SMESH_Actor::eControl aControl = SMESH_Actor::eNone; + switch ( theCommandID ){ + case SMESHOp::OpFreeNode: + aControl = SMESH_Actor::eFreeNodes; + break; + case SMESHOp::OpEqualNode: + aControl = SMESH_Actor::eCoincidentNodes; + break; + case SMESHOp::OpFreeEdge: + aControl = SMESH_Actor::eFreeEdges; + break; + case SMESHOp::OpFreeBorder: + aControl = SMESH_Actor::eFreeBorders; + break; + case SMESHOp::OpLength: + aControl = SMESH_Actor::eLength; + break; + case SMESHOp::OpConnection: + aControl = SMESH_Actor::eMultiConnection; + break; + case SMESHOp::OpEqualEdge: + aControl = SMESH_Actor::eCoincidentElems1D; + break; + case SMESHOp::OpFreeFace: + aControl = SMESH_Actor::eFreeFaces; + break; + case SMESHOp::OpBareBorderFace: + aControl = SMESH_Actor::eBareBorderFace; + break; + case SMESHOp::OpOverConstrainedFace: + aControl = SMESH_Actor::eOverConstrainedFace; + break; + case SMESHOp::OpLength2D: + aControl = SMESH_Actor::eLength2D; + break; + case SMESHOp::OpConnection2D: + aControl = SMESH_Actor::eMultiConnection2D; + break; + case SMESHOp::OpArea: + aControl = SMESH_Actor::eArea; + break; + case SMESHOp::OpTaper: + aControl = SMESH_Actor::eTaper; + break; + case SMESHOp::OpAspectRatio: + aControl = SMESH_Actor::eAspectRatio; + break; + case SMESHOp::OpMinimumAngle: + aControl = SMESH_Actor::eMinimumAngle; + break; + case SMESHOp::OpWarpingAngle: + aControl = SMESH_Actor::eWarping; + break; + case SMESHOp::OpSkew: + aControl = SMESH_Actor::eSkew; + break; + case SMESHOp::OpMaxElementLength2D: + aControl = SMESH_Actor::eMaxElementLength2D; + break; + case SMESHOp::OpEqualFace: + aControl = SMESH_Actor:: eCoincidentElems2D; + break; + case SMESHOp::OpAspectRatio3D: + aControl = SMESH_Actor::eAspectRatio3D; + break; + case SMESHOp::OpVolume: + aControl = SMESH_Actor::eVolume3D; + break; + case SMESHOp::OpMaxElementLength3D: + aControl = SMESH_Actor::eMaxElementLength3D; + break; + case SMESHOp::OpBareBorderVolume: + aControl = SMESH_Actor::eBareBorderVolume; + break; + case SMESHOp::OpOverConstrainedVolume: + aControl = SMESH_Actor::eOverConstrainedVolume; + break; + case SMESHOp::OpEqualVolume: + aControl = SMESH_Actor::eCoincidentElems3D; + break; + } + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if( aSel ) aSel->selectedObjects( selected ); if( !selected.IsEmpty() ){ - Handle(SALOME_InteractiveObject) anIO = selected.First(); - if(!anIO.IsNull()){ - SMESH_Actor::eControl aControl = SMESH_Actor::eNone; - if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) { - switch ( theCommandID ){ - case SMESHOp::OpFreeNode: - aControl = SMESH_Actor::eFreeNodes; - break; - case SMESHOp::OpEqualNode: - aControl = SMESH_Actor::eCoincidentNodes; - break; - case SMESHOp::OpFreeEdge: - aControl = SMESH_Actor::eFreeEdges; - break; - case SMESHOp::OpFreeBorder: - aControl = SMESH_Actor::eFreeBorders; - break; - case SMESHOp::OpLength: - aControl = SMESH_Actor::eLength; - break; - case SMESHOp::OpConnection: - aControl = SMESH_Actor::eMultiConnection; - break; - case SMESHOp::OpEqualEdge: - aControl = SMESH_Actor::eCoincidentElems1D; - break; - case SMESHOp::OpFreeFace: - aControl = SMESH_Actor::eFreeFaces; - break; - case SMESHOp::OpBareBorderFace: - aControl = SMESH_Actor::eBareBorderFace; - break; - case SMESHOp::OpOverConstrainedFace: - aControl = SMESH_Actor::eOverConstrainedFace; - break; - case SMESHOp::OpLength2D: - aControl = SMESH_Actor::eLength2D; - break; - case SMESHOp::OpConnection2D: - aControl = SMESH_Actor::eMultiConnection2D; - break; - case SMESHOp::OpArea: - aControl = SMESH_Actor::eArea; - break; - case SMESHOp::OpTaper: - aControl = SMESH_Actor::eTaper; - break; - case SMESHOp::OpAspectRatio: - aControl = SMESH_Actor::eAspectRatio; - break; - case SMESHOp::OpMinimumAngle: - aControl = SMESH_Actor::eMinimumAngle; - break; - case SMESHOp::OpWarpingAngle: - aControl = SMESH_Actor::eWarping; - break; - case SMESHOp::OpSkew: - aControl = SMESH_Actor::eSkew; - break; - case SMESHOp::OpMaxElementLength2D: - aControl = SMESH_Actor::eMaxElementLength2D; - break; - case SMESHOp::OpEqualFace: - aControl = SMESH_Actor:: eCoincidentElems2D; - break; - case SMESHOp::OpAspectRatio3D: - aControl = SMESH_Actor::eAspectRatio3D; - break; - case SMESHOp::OpVolume: - aControl = SMESH_Actor::eVolume3D; - break; - case SMESHOp::OpMaxElementLength3D: - aControl = SMESH_Actor::eMaxElementLength3D; - break; - case SMESHOp::OpBareBorderVolume: - aControl = SMESH_Actor::eBareBorderVolume; - break; - case SMESHOp::OpOverConstrainedVolume: - aControl = SMESH_Actor::eOverConstrainedVolume; - break; - case SMESHOp::OpEqualVolume: - aControl = SMESH_Actor::eCoincidentElems3D; - break; - } - - anActor->SetControlMode(aControl); - anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() ); - SMESH::RepaintCurrentView(); + SALOME_ListIteratorOfListIO It(selected); + for ( ; It.More(); It.Next()) + { + Handle(SALOME_InteractiveObject) anIO = It.Value(); + if(!anIO.IsNull()){ + _PTR(SObject) SO = aStudy->FindObjectID( It.Value()->getEntry() ); + if ( SO ) { + CORBA::Object_var aObject = SMESH::SObjectToObject( SO ); + SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject ); + SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject ); + SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject ); + if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) { + if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) { + anActor->SetControlMode(aControl); + anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() ); + SMESH::RepaintCurrentView(); #ifndef DISABLE_PLOT2DVIEWER - if(anActor->GetPlot2Histogram()) { - SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram(); - QString functorName = functorToString( anActor->GetFunctor()); - QString aHistogramName("%1 : %2"); - aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName); - aHistogram->setName(aHistogramName); - aHistogram->setHorTitle(functorName); - SMESH::ProcessIn2DViewers(anActor); - } + if(anActor->GetPlot2Histogram()) { + SPlot2d_Histogram* aHistogram = anActor->UpdatePlot2Histogram(); + QString functorName = functorToString( anActor->GetFunctor()); + QString aHistogramName("%1 : %2"); + aHistogramName = aHistogramName.arg(anIO->getName()).arg(functorName); + aHistogram->setName(aHistogramName); + aHistogram->setHorTitle(functorName); + SMESH::ProcessIn2DViewers(anActor); + } #endif + } + } + } } } } @@ -1742,6 +1757,19 @@ namespace return RefType; } + uint randomize( uint size ) + { + static bool initialized = false; + if ( !initialized ) { + qsrand( QDateTime::currentDateTime().toTime_t() ); + initialized = true; + } + uint v = qrand(); + v = uint( (double)( v ) / RAND_MAX * size ); + v = qMax( uint(0), qMin ( v, size-1 ) ); + return v; + } + } //namespace void SMESHGUI::OnEditDelete() @@ -2502,6 +2530,13 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) ::SetDisplayEntity(theCommandID); break; + // Choose entities to be displayed + case SMESHOp::OpDEChoose: + { + ( new SMESHGUI_DisplayEntitiesDlg( SMESHGUI::desktop() ) )->exec(); + break; + } + case SMESHOp::OpOrientationOnFaces: { LightApp_SelectionMgr* mgr = selectionMgr(); @@ -3093,15 +3128,26 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) Handle(SALOME_InteractiveObject) anIObject = selected.First(); SMESH::SMESH_Hypothesis_var aHypothesis = SMESH::IObjectToInterface(anIObject); - /* Look for all mesh objects that have this hypothesis affected in order to flag as ModifiedMesh */ - /* At end below '...->updateObjBrowser(true)' will change icon of mesh objects */ - /* Warning : however by internal mechanism all subMeshes icons are changed ! */ if ( !aHypothesis->_is_nil() ) { - // BUG 0020378 - //SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypothesis->GetName()); - SMESHGUI_GenericHypothesisCreator* aCreator = SMESH::GetHypothesisCreator(aHypothesis->GetName()); - if (aCreator) { + SMESHGUI_GenericHypothesisCreator* aCreator = + SMESH::GetHypothesisCreator( SMESH::toQStr( aHypothesis->GetName() )); + if (aCreator) + { + // set geometry of mesh and sub-mesh to aCreator + aSel->selectedObjects( selected, "", /*convertReferences=*/false); + if ( selected.Extent() == 1 ) + { + QString subGeomID, meshGeomID; + Handle(SALOME_InteractiveObject) hypIO = selected.First(); + if ( SMESH::GetGeomEntries( hypIO, subGeomID, meshGeomID )) + { + if ( subGeomID.isEmpty() ) subGeomID = meshGeomID; + aCreator->setShapeEntry( subGeomID ); + aCreator->setMainShapeEntry( meshGeomID ); + } + } + aCreator->edit( aHypothesis.in(), anIObject->getName(), desktop(), this, SLOT( onHypothesisEdit( int ) ) ); } else @@ -3518,19 +3564,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); - if ( selected.Extent() == 1 && selected.First()->hasEntry() ) { - _PTR(SObject) SO = aStudy->FindObjectID( selected.First()->getEntry() ); - if ( SO ) { - CORBA::Object_var aObject = SMESH::SObjectToObject( SO ); - SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject ); - SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject ); - SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow( aObject ); - if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) { - SUIT_OverrideCursor wc; - ::Control( theCommandID ); - break; - } - } + if( !selected.IsEmpty() ) { + SUIT_OverrideCursor wc; + ::Control( theCommandID ); + break; } SUIT_MessageBox::warning(desktop(), tr( "SMESH_WRN_WARNING" ), @@ -3729,7 +3766,7 @@ void SMESHGUI::initialize( CAM_Application* app ) // ----- create actions -------------- //createSMESHAction( SMESHOp::OpImportDAT, "IMPORT_DAT", "", (Qt::CTRL+Qt::Key_B) ); - createSMESHAction( SMESHOp::OpImportUNV, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_U) ); + createSMESHAction( SMESHOp::OpImportUNV, "IMPORT_UNV", "", (Qt::CTRL+Qt::Key_I) ); createSMESHAction( SMESHOp::OpImportMED, "IMPORT_MED", "", (Qt::CTRL+Qt::Key_M) ); //createSMESHAction( 114, "NUM" ); createSMESHAction( SMESHOp::OpImportSTL, "IMPORT_STL" ); @@ -3766,8 +3803,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpCopyMesh, "COPY_MESH", "ICON_COPY_MESH" ); createSMESHAction( SMESHOp::OpCompute, "COMPUTE", "ICON_COMPUTE" ); createSMESHAction( SMESHOp::OpPreCompute, "PRECOMPUTE", "ICON_PRECOMPUTE" ); - createSMESHAction( SMESHOp::OpEvaluate, "EVALUATE", "ICON_COMPUTE" ); - createSMESHAction( SMESHOp::OpMeshOrder, "MESH_ORDER", "ICON_COMPUTE" ); + createSMESHAction( SMESHOp::OpEvaluate, "EVALUATE", "ICON_EVALUATE" ); + createSMESHAction( SMESHOp::OpMeshOrder, "MESH_ORDER", "ICON_MESH_ORDER"); createSMESHAction( SMESHOp::OpCreateGroup, "CREATE_GROUP", "ICON_CREATE_GROUP" ); createSMESHAction( SMESHOp::OpCreateGeometryGroup, "CREATE_GEO_GROUP", "ICON_CREATE_GEO_GROUP" ); createSMESHAction( SMESHOp::OpConstructGroup, "CONSTRUCT_GROUP", "ICON_CONSTRUCT_GROUP" ); @@ -3843,8 +3880,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpRemoveOrphanNodes, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" ); createSMESHAction( SMESHOp::OpClearMesh, "CLEAR_MESH", "ICON_CLEAR_MESH" ); - createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); - createSMESHAction( SMESHOp::OpRenumberingElements, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); + //createSMESHAction( SMESHOp::OpRenumberingNodes, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); + //createSMESHAction( SMESHOp::OpRenumberingElements, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); createSMESHAction( SMESHOp::OpTranslation, "TRANS", "ICON_SMESH_TRANSLATION_VECTOR" ); createSMESHAction( SMESHOp::OpRotation, "ROT", "ICON_DLG_MESH_ROTATION" ); @@ -3887,7 +3924,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpDEFaces, "FACES", "ICON_DLG_TRIANGLE", 0, true ); createSMESHAction( SMESHOp::OpDEVolumes, "VOLUMES", "ICON_DLG_TETRAS", 0, true ); createSMESHAction( SMESHOp::OpDEBalls, "BALLS", "ICON_DLG_BALL", 0, true ); - createSMESHAction( SMESHOp::OpDEAllEntity, "ALL" ); + createSMESHAction( SMESHOp::OpDEChoose, "CHOOSE", "ICON_DLG_CHOOSE", 0, false ); + createSMESHAction( SMESHOp::OpDEAllEntity, "ALL", "ICON_DLG_CHOOSE_ALL", 0, false ); createSMESHAction( SMESHOp::OpOrientationOnFaces, "FACE_ORIENTATION", "", 0, true ); createSMESHAction( SMESHOp::OpRepresentationLines, "LINE_REPRESENTATION", "", 0, true ); @@ -3915,6 +3953,23 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpSortChild, "SORT_CHILD_ITEMS" ); + QList aCtrlActions; + aCtrlActions << SMESHOp::OpFreeNode << SMESHOp::OpEqualNode // node controls + << SMESHOp::OpFreeEdge << SMESHOp::OpFreeBorder + << SMESHOp::OpLength << SMESHOp::OpConnection << SMESHOp::OpEqualEdge // edge controls + << SMESHOp::OpFreeFace << SMESHOp::OpLength2D << SMESHOp::OpConnection2D + << SMESHOp::OpArea << SMESHOp::OpTaper << SMESHOp::OpAspectRatio + << SMESHOp::OpMinimumAngle << SMESHOp::OpWarpingAngle << SMESHOp::OpSkew + << SMESHOp::OpMaxElementLength2D << SMESHOp::OpBareBorderFace + << SMESHOp::OpOverConstrainedFace << SMESHOp::OpEqualFace // face controls + << SMESHOp::OpAspectRatio3D << SMESHOp::OpVolume + << SMESHOp::OpMaxElementLength3D << SMESHOp::OpBareBorderVolume + << SMESHOp::OpOverConstrainedVolume << SMESHOp::OpEqualVolume; // volume controls + QActionGroup* aCtrlGroup = new QActionGroup( application()->desktop() ); + aCtrlGroup->setExclusive( true ); + for( int i = 0; i < aCtrlActions.size(); i++ ) + aCtrlGroup->addAction( action( aCtrlActions[i] ) ); + // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), editId = createMenu( tr( "MEN_EDIT" ), -1, 3 ), @@ -3935,7 +3990,7 @@ void SMESHGUI::initialize( CAM_Application* app ) volumeId = createMenu( tr( "MEN_VOLUME_CTRL" ), ctrlId, -1, 10 ), addId = createMenu( tr( "MEN_ADD" ), modifyId, 402 ), removeId = createMenu( tr( "MEN_REMOVE" ), modifyId, 403 ), - renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ), + //renumId = createMenu( tr( "MEN_RENUM" ), modifyId, 404 ), transfId = createMenu( tr( "MEN_TRANSF" ), modifyId, 405 ), basicPropId = createMenu( tr( "MEN_BASIC_PROPERTIES" ), measureId, -1, 10 ); @@ -4019,6 +4074,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpOverConstrainedVolume, volumeId, -1 ); createMenu( SMESHOp::OpEqualVolume, volumeId, -1 ); createMenu( separator(), ctrlId, -1 ); + createMenu( SMESHOp::OpReset, ctrlId, -1 ); + createMenu( separator(), ctrlId, -1 ); createMenu( SMESHOp::OpOverallMeshQuality, ctrlId, -1 ); createMenu( SMESHOp::OpNode, addId, -1 ); @@ -4055,8 +4112,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( separator(), removeId, -1 ); createMenu( SMESHOp::OpClearMesh, removeId, -1 ); - createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 ); - createMenu( SMESHOp::OpRenumberingElements, renumId, -1 ); + //createMenu( SMESHOp::OpRenumberingNodes, renumId, -1 ); + //createMenu( SMESHOp::OpRenumberingElements, renumId, -1 ); createMenu( SMESHOp::OpTranslation, transfId, -1 ); createMenu( SMESHOp::OpRotation, transfId, -1 ); @@ -4091,21 +4148,21 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( SMESHOp::OpUpdate, viewId, -1 ); // ----- create toolbars -------------- - int meshTb = createTool( tr( "TB_MESH" ) ), - info = createTool( tr( "TB_INFO" ) ), - groupTb = createTool( tr( "TB_GROUP" ) ), - ctrl0dTb = createTool( tr( "TB_CTRL0D" ) ), - ctrl1dTb = createTool( tr( "TB_CTRL1D" ) ), - ctrl2dTb = createTool( tr( "TB_CTRL2D" ) ), - ctrl3dTb = createTool( tr( "TB_CTRL3D" ) ), - addElemTb = createTool( tr( "TB_ADD" ) ), - addNonElemTb = createTool( tr( "TB_ADDNON" ) ), - remTb = createTool( tr( "TB_REM" ) ), - renumbTb = createTool( tr( "TB_RENUMBER" ) ), - transformTb = createTool( tr( "TB_TRANSFORM" ) ), - modifyTb = createTool( tr( "TB_MODIFY" ) ), - measuremTb = createTool( tr( "TB_MEASUREM" ) ), - dispModeTb = createTool( tr( "TB_DISP_MODE" ) ); + 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" ) ); createTool( SMESHOp::OpCreateMesh, meshTb ); createTool( SMESHOp::OpCreateSubMesh, meshTb ); @@ -4189,8 +4246,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( SMESHOp::OpRemoveOrphanNodes, remTb ); createTool( SMESHOp::OpClearMesh, remTb ); - createTool( SMESHOp::OpRenumberingNodes, renumbTb ); - createTool( SMESHOp::OpRenumberingElements, renumbTb ); + //createTool( SMESHOp::OpRenumberingNodes, renumbTb ); + //createTool( SMESHOp::OpRenumberingElements, renumbTb ); createTool( SMESHOp::OpTranslation, transformTb ); createTool( SMESHOp::OpRotation, transformTb ); @@ -4401,6 +4458,11 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), anId, -1 ); + popupMgr()->insert( action( SMESHOp::OpDEChoose ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&&" + aType + "&&" + isNotEmpty, QtxPopupMgr::VisibleRule ); + + popupMgr()->insert( separator(), anId, -1 ); + popupMgr()->insert( action( SMESHOp::OpDEAllEntity ), anId, -1 ); popupMgr()->setRule( action( SMESHOp::OpDEAllEntity ), aDiffElemsInVTK + "&& isVisible && not( elemTypes in entityMode )", QtxPopupMgr::VisibleRule ); @@ -4673,10 +4735,6 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) // end of SMESH plugins loading // Reset actions accelerator keys - //action(SMESHOp::OpImportDAT)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_B)); - action(SMESHOp::OpImportUNV)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_U)); - action(SMESHOp::OpImportMED)->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M)); - action(SMESHOp::OpDelete)->setEnabled(true); // Delete: Key_Delete // 0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH @@ -4708,10 +4766,6 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) EmitSignalCloseAllDialogs(); // Unset actions accelerator keys - //action(SMESHOp::OpImportDAT)->setShortcut(QKeySequence()); - action(SMESHOp::OpImportUNV)->setShortcut(QKeySequence()); - action(SMESHOp::OpImportMED)->setShortcut(QKeySequence()); - action(SMESHOp::OpDelete)->setEnabled(false); // Delete: Key_Delete return SalomeApp_Module::deactivateModule( study ); @@ -4719,6 +4773,8 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) void SMESHGUI::studyClosed( SUIT_Study* s ) { + if( !s ) + return; SMESH::RemoveVisuData( s->id() ); SalomeApp_Module::studyClosed( s ); } @@ -4766,7 +4822,7 @@ 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( QString::fromUtf8(obj->GetName().c_str()) ); + 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 ); title = aName; @@ -4867,14 +4923,14 @@ void SMESHGUI::createPreferences() addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" ); int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); setPreferenceProperty( prec, "min", 0 ); - setPreferenceProperty( prec, "max", 16 ); + setPreferenceProperty( prec, "max", 100 ); int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" ); setPreferenceProperty( doubleNodesTol, "precision", 10 ); setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 ); setPreferenceProperty( doubleNodesTol, "max", 1000000.0 ); setPreferenceProperty( doubleNodesTol, "step", 0.0000001 ); - int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE" ), genTab ); + int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE_GROUP" ), genTab ); setPreferenceProperty( dispgroup, "columns", 2 ); int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" ); QStringList modes; @@ -4890,7 +4946,7 @@ void SMESHGUI::createPreferences() setPreferenceProperty( dispmode, "strings", modes ); setPreferenceProperty( dispmode, "indexes", indices ); - int arcgroup = addPreference( tr( "QUADRATIC_REPRESENT_MODE" ), genTab ); + int arcgroup = addPreference( tr( "QUADRATIC_REPRESENT_MODE_GROUP" ), genTab ); setPreferenceProperty( arcgroup, "columns", 2 ); int quadraticmode = addPreference( tr( "QUADRATIC_REPRESENT_MODE" ), arcgroup, LightApp_Preferences::Selector, "SMESH", "quadratic_mode" ); QStringList quadraticModes; @@ -6746,7 +6802,7 @@ void SMESHGUI::message( const QString& msg ) _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().constData() ); QString name; if ( obj ) - name = QString::fromUtf8(obj->GetName().c_str()); + name = SMESH::fromUtf8(obj->GetName()); if ( name.isEmpty() ) return; @@ -6889,7 +6945,7 @@ SALOMEDS::Color SMESHGUI::getPredefinedUniqueColor() } } } - static int currentColor = 0; + static int currentColor = randomize( colors.size() ); SALOMEDS::Color color; color.R = (double)colors[currentColor].red() / 255.0;