X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=d89993957bc2af46550c8ef7d8bd354e9640b362;hp=7a02219d21a270072e40d94192c0ffaa03d82a04;hb=c43b3fb0e3a297e1284a718519ce91a4e67d5890;hpb=f5b69ee44c7918a89e5fd9d21d3bd2a10a724b5d diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 7a02219d2..d89993957 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 @@ -92,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 @@ -133,7 +133,6 @@ #include #include -#include #ifndef DISABLE_PLOT2DVIEWER #include @@ -151,6 +150,8 @@ #include #include #include +#include +#include // BOOST includes #include @@ -169,6 +170,7 @@ #include #include #include +#include "utilities.h" // OCCT includes #include @@ -715,6 +717,16 @@ namespace if ( !anInitialPath.isEmpty() ) fd->setDirectory( anInitialPath ); fd->selectFile(aMeshName); + + + QListView *lview = fd->findChild("listView"); + if( lview ) { + lview->setMinimumHeight(200); + } + QTreeView *tview = fd->findChild("treeView"); + if( tview ) { + tview->setMinimumHeight(200); + } SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd ); fd->setValidator( fv ); @@ -1175,7 +1187,7 @@ namespace } } - void ShowDistribution() { + void ShowElement(int theCommandID ) { LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr(); SALOME_ListIO selected; if ( aSel ) @@ -1187,7 +1199,12 @@ namespace SMESH_Actor* anActor = SMESH::FindActorByEntry( anIO->getEntry() ); if ( anActor && anActor->GetScalarBarActor() && anActor->GetControlMode() != SMESH_Actor::eNone ) { SMESH_ScalarBarActor *aScalarBarActor = anActor->GetScalarBarActor(); - aScalarBarActor->SetDistributionVisibility(!aScalarBarActor->GetDistributionVisibility()); + if ( theCommandID == SMESHOp::OpShowDistribution ) { + aScalarBarActor->SetDistributionVisibility(!aScalarBarActor->GetDistributionVisibility()); + } + else if ( theCommandID == SMESHOp::OpShowScalarBar ) { + aScalarBarActor->SetVisibility( !aScalarBarActor->GetVisibility()); + } } } } @@ -1311,7 +1328,7 @@ namespace QColor orientationColor, outlineColor, volumeColor; int deltaF = 0, deltaV = 0; int elem0dSize = 1; - int ballSize = 1; + //int ballSize = 1; double ballScale = 1.0; int edgeWidth = 1; int outlineWidth = 1; @@ -1356,7 +1373,7 @@ namespace // balls: color, size anActor->GetBallColor( color[0], color[1], color[2] ); ballColor.setRgbF( color[0], color[1], color[2] ); - ballSize = qMax( (int)anActor->GetBallSize(), 1 ); // minimum allowed size is 1 + //ballSize = qMax( (int)anActor->GetBallSize(), 1 ); // minimum allowed size is 1 ballScale = qMax( (double)anActor->GetBallScale(), 1e-2 ); // minimum allowed scale is 1e-2 // outlines: color anActor->GetOutlineColor( color[0], color[1], color[2] ); @@ -1413,7 +1430,7 @@ namespace dlg.setElem0dSize( elem0dSize ); // balls: color, size dlg.setBallColor( ballColor ); - dlg.setBallSize( ballSize ); + //dlg.setBallSize( ballSize ); dlg.setBallScale( ballScale ); // orientation: color, scale, 3d flag dlg.setOrientationColor( orientationColor ); @@ -1440,7 +1457,7 @@ namespace elem0dColor = dlg.elem0dColor(); elem0dSize = dlg.elem0dSize(); ballColor = dlg.ballColor(); - ballSize = dlg.ballSize(); + // ballSize = dlg.ballSize(); ballScale = dlg.ballScale(); orientationColor = dlg.orientationColor(); orientationScale = dlg.orientationSize() / 100.; @@ -1484,7 +1501,7 @@ namespace anActor->Set0DSize( elem0dSize ); // balls: color, size anActor->SetBallColor( ballColor.redF(), ballColor.greenF(), ballColor.blueF() ); - anActor->SetBallSize( ballSize ); + // anActor->SetBallSize( ballSize ); anActor->SetBallScale( ballScale ); // orientation: color, scale, 3d flag anActor->SetFacesOrientationColor( orientationColor.redF(), orientationColor.greenF(), orientationColor.blueF() ); @@ -1757,6 +1774,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() @@ -2457,6 +2487,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( this ); break; } + case SMESHOp::OpShowScalarBar: + { + // show/hide scalar bar + ::ShowElement(theCommandID); + break; + } case SMESHOp::OpSaveDistribution: { // dump control distribution data to the text file @@ -2466,8 +2502,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case SMESHOp::OpShowDistribution: { - // show/ distribution - ::ShowDistribution(); + // show/hide distribution + ::ShowElement(theCommandID); break; } @@ -3753,7 +3789,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" ); @@ -3790,8 +3826,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" ); @@ -3867,8 +3903,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" ); @@ -3896,6 +3932,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( SMESHOp::OpReset, "RESET" ); createSMESHAction( SMESHOp::OpScalarBarProperties, "SCALAR_BAR_PROP" ); + createSMESHAction( SMESHOp::OpShowScalarBar, "SHOW_SCALAR_BAR","",0, true ); createSMESHAction( SMESHOp::OpSaveDistribution, "SAVE_DISTRIBUTION" ); createSMESHAction( SMESHOp::OpShowDistribution, "SHOW_DISTRIBUTION","",0, true ); #ifndef DISABLE_PLOT2DVIEWER @@ -3977,7 +4014,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 ); @@ -4099,8 +4136,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 ); @@ -4145,7 +4182,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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" ) ), + //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" ) ), @@ -4233,8 +4270,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 ); @@ -4614,6 +4651,9 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), anId, -1 ); + popupMgr()->insert( action( SMESHOp::OpShowScalarBar ), anId, -1 ); + popupMgr()->setRule( action( SMESHOp::OpShowScalarBar ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( SMESHOp::OpShowScalarBar ), aMeshInVTK + "&& controlMode <> 'eNone' && isScalarBarVisible", QtxPopupMgr::ToggleRule ); popupMgr()->insert( action( SMESHOp::OpScalarBarProperties ), anId, -1 ); popupMgr()->setRule( action( SMESHOp::OpScalarBarProperties ), aMeshInVTK + "&& controlMode <> 'eNone'", QtxPopupMgr::VisibleRule ); @@ -4626,7 +4666,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( action( SMESHOp::OpShowDistribution ), aSubId, -1 ); popupMgr()->setRule( action( SMESHOp::OpShowDistribution ), aMeshInVTK + "&& isNumFunctor", QtxPopupMgr::VisibleRule ); - popupMgr()->setRule( action( SMESHOp::OpShowDistribution ), aMeshInVTK + "&& isNumFunctor && isDistributionVisible", QtxPopupMgr::ToggleRule); + popupMgr()->setRule( action( SMESHOp::OpShowDistribution ), aMeshInVTK + "&& isNumFunctor && isScalarBarVisible && isDistributionVisible", QtxPopupMgr::ToggleRule); #ifndef DISABLE_PLOT2DVIEWER popupMgr()->insert( action( SMESHOp::OpPlotDistribution ), aSubId, -1 ); @@ -4722,10 +4762,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 @@ -4757,10 +4793,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 ); @@ -4768,6 +4800,8 @@ bool SMESHGUI::deactivateModule( SUIT_Study* study ) void SMESHGUI::studyClosed( SUIT_Study* s ) { + if( !s ) + return; SMESH::RemoveVisuData( s->id() ); SalomeApp_Module::studyClosed( s ); } @@ -4815,7 +4849,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; @@ -4916,14 +4950,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; @@ -4939,7 +4973,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; @@ -5110,8 +5144,10 @@ void SMESHGUI::createPreferences() int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup, LightApp_Preferences::IntSpin, "SMESH", "elem0d_size"); - int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup, - LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size"); + /* int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup, + LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size"); */ + double ballDiameter = addPreference(tr("PREF_BALL_DIAMETER"), elemGroup, + LightApp_Preferences::DblSpin, "SMESH", "ball_elem_diameter"); double ballScale = addPreference(tr("PREF_BALL_SCALE"), elemGroup, LightApp_Preferences::DblSpin, "SMESH", "ball_elem_scale"); int elemW = addPreference(tr("PREF_WIDTH"), elemGroup, @@ -5124,8 +5160,12 @@ void SMESHGUI::createPreferences() setPreferenceProperty( size0d, "min", 1 ); setPreferenceProperty( size0d, "max", 10 ); - setPreferenceProperty( ballSize, "min", 1 ); - setPreferenceProperty( ballSize, "max", 10 ); + // setPreferenceProperty( ballSize, "min", 1 ); + // setPreferenceProperty( ballSize, "max", 10 ); + + setPreferenceProperty( ballDiameter, "min", 1e-7 ); + setPreferenceProperty( ballDiameter, "max", 1e9 ); + setPreferenceProperty( ballDiameter, "step", 0.1 ); setPreferenceProperty( ballScale, "min", 1e-2 ); setPreferenceProperty( ballScale, "max", 1e7 ); @@ -5802,7 +5842,8 @@ void SMESHGUI::storeVisualParameters (int savePoint) sizeStr << "elem0d"; sizeStr << QString::number((int)aSmeshActor->Get0DSize()); sizeStr << "ball"; - sizeStr << QString::number((int)aSmeshActor->GetBallSize()); + //sizeStr << QString::number((int)aSmeshActor->GetBallSize()); + sizeStr << QString::number((double)aSmeshActor->GetBallSize()); sizeStr << QString::number((double)aSmeshActor->GetBallScale()); sizeStr << "shrink"; sizeStr << QString::number(aSmeshActor->GetShrinkFactor()); @@ -6387,7 +6428,8 @@ void SMESHGUI::restoreVisualParameters (int savePoint) int lineWidth = -1; int outlineWidth = -1; int elem0dSize = -1; - int ballSize = -1; + //int ballSize = -1; + double ballDiameter = -1.0; double ballScale = -1.0; double shrinkSize = -1; double orientationSize = -1; @@ -6420,10 +6462,12 @@ void SMESHGUI::restoreVisualParameters (int savePoint) // - size - is a integer value specifying size // - scale - is a double value specifying scale factor if ( i+1 >= sizes.count() ) break; // format error - int v1 = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error + //int v1 = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error + double v1 = sizes[i+1].toInt( &bOk ); if ( !bOk ) break; // format error if ( i+2 >= sizes.count() ) break; // format error double v2 = sizes[i+2].toDouble( &bOk ); if ( !bOk ) break; // format error - ballSize = v1; + //ballSize = v1; + ballDiameter = v1; ballScale = v2; i += 2; } @@ -6459,8 +6503,11 @@ void SMESHGUI::restoreVisualParameters (int savePoint) if ( elem0dSize > 0 ) aSmeshActor->Set0DSize( elem0dSize ); // ball size - if ( ballSize > 0 ) - aSmeshActor->SetBallSize( ballSize ); + /*if ( ballSize > 0 ) + aSmeshActor->SetBallSize( ballSize );*/ + // ball diameter + if ( ballDiameter > 0 ) + aSmeshActor->SetBallSize( ballDiameter ); // ball scale if ( ballScale > 0.0 ) aSmeshActor->SetBallScale( ballScale ); @@ -6795,7 +6842,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; @@ -6938,7 +6985,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;