X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=a3a601a831b81859f51529fb251f0ca797e347cb;hb=e16988d5817fbd1a95bdec89a7307fc3447143e5;hp=77b1b66b35542418bf535665ed6df60640198079;hpb=493747e8ea338a2d88204a5f12ba924d72ecbb5b;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 77b1b66b3..a3a601a83 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -437,8 +437,12 @@ { // warn the user about presence of not supported elements SMESH::long_array_var nbElems = aMeshOrGroup->GetMeshInfo(); - int nbPyramids = nbElems[ SMESH::Entity_Pyramid ] + nbElems[ SMESH::Entity_Quad_Pyramid ]; - if ( nbPyramids > 0 ) { + int nbNotSupported = ( nbElems[ SMESH::Entity_Pyramid ] + + nbElems[ SMESH::Entity_Quad_Pyramid ] + + nbElems[ SMESH::Entity_Hexagonal_Prism ] + + nbElems[ SMESH::Entity_Polygon ] + + nbElems[ SMESH::Entity_Polyhedra ] ); + if ( nbNotSupported > 0 ) { int aRet = SUIT_MessageBox::warning (SMESHGUI::desktop(), QObject::tr("SMESH_WRN_WARNING"), @@ -879,6 +883,14 @@ type = QObject::tr( "OVER_CONSTRAINED_VOLUME" ); else if ( dynamic_cast< SMESH::Controls::OverConstrainedFace* >( f.get() ) ) type = QObject::tr( "OVER_CONSTRAINED_FACE" ); + else if ( dynamic_cast< SMESH::Controls::CoincidentNodes* >( f.get() ) ) + type = QObject::tr( "EQUAL_NODE" ); + else if ( dynamic_cast< SMESH::Controls::CoincidentElements1D* >( f.get() ) ) + type = QObject::tr( "EQUAL_EDGE" ); + else if ( dynamic_cast< SMESH::Controls::CoincidentElements2D* >( f.get() ) ) + type = QObject::tr( "EQUAL_FACE" ); + else if ( dynamic_cast< SMESH::Controls::CoincidentElements3D* >( f.get() ) ) + type = QObject::tr( "EQUAL_VOLUME" ); return type; } @@ -1336,7 +1348,7 @@ Handle(SALOME_InteractiveObject) anIO = selected.First(); if(!anIO.IsNull()){ SMESH_Actor::eControl aControl = SMESH_Actor::eNone; - if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())){ + if(SMESH_Actor *anActor = SMESH::FindActorByEntry(anIO->getEntry())) { switch ( theCommandID ){ case 6001: aControl = SMESH_Actor::eLength; @@ -1404,7 +1416,20 @@ case 6027: aControl = SMESH_Actor::eOverConstrainedFace; break; + case 6028: + aControl = SMESH_Actor::eCoincidentNodes; + break; + case 6029: + aControl = SMESH_Actor::eCoincidentElems1D; + break; + case 6030: + aControl = SMESH_Actor:: eCoincidentElems2D; + break; + case 6031: + aControl = SMESH_Actor::eCoincidentElems3D; + break; } + anActor->SetControlMode(aControl); anActor->GetScalarBarActor()->SetTitle( functorToString( anActor->GetFunctor() ).toLatin1().constData() ); SMESH::RepaintCurrentView(); @@ -1688,6 +1713,14 @@ LightApp_Module( "SMESH" ) myComponentSMESH->SetBoundaryBoxSegmentation( nbSeg ); nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 ); myComponentSMESH->SetDefaultNbSegments( nbSeg ); + + const char* options[] = { "historical_python_dump", "forget_mesh_on_hyp_modif" }; + for ( size_t i = 0; i < sizeof(options)/sizeof(char*); ++i ) + if ( aResourceMgr->hasValue( "SMESH", options[i] )) + { + QString val = aResourceMgr->stringValue( "SMESH", options[i] ); + myComponentSMESH->SetOption( options[i], val.toLatin1().constData() ); + } } myActiveDialogBox = 0; @@ -2112,7 +2145,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 1134: // Clipping case 1133: // Tranparency - case 1132: // Colors / Size + case 1132: // Display preferences (colors, shrink size, line width, ...) // Display Mode case 215: // Nodes @@ -2799,36 +2832,42 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case 4009: // ELEM0D - case 4010: // GEOM::EDGE + case 4010: // EDGE case 4021: // TRIANGLE case 4022: // QUAD case 4023: // POLYGON case 4031: // TETRA case 4032: // HEXA + case 4133: // PENTA + case 4134: // PYRAMID + case 4135: // OCTA12 { if(checkLock(aStudy)) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); - SMDSAbs_ElementType type = SMDSAbs_Edge; - int nbNodes = 2; + SMDSAbs_EntityType type = SMDSEntity_Edge; switch (theCommandID) { - case 4009: // ELEM0D - type = SMDSAbs_0DElement; nbNodes = 1; break; - case 4021: // TRIANGLE - type = SMDSAbs_Face; nbNodes = 3; break; - case 4022: // QUAD - type = SMDSAbs_Face; nbNodes = 4; break; - case 4031: // TETRA - type = SMDSAbs_Volume; nbNodes = 4; break; - case 4023: // POLYGON - type = SMDSAbs_Face; nbNodes = 5; break; // 5 - identificator for POLYGON - case 4032: // HEXA - type = SMDSAbs_Volume; nbNodes = 8; break; - case 4033: // POLYHEDRE - type = SMDSAbs_Volume; nbNodes = 9; break; // 9 - identificator for POLYHEDRE + case 4009: + type = SMDSEntity_0D; break; + case 4021: + type = SMDSEntity_Triangle; break; + case 4022: + type = SMDSEntity_Quadrangle; break; + case 4031: + type = SMDSEntity_Tetra; break; + case 4023: + type = SMDSEntity_Polygon; break; + case 4032: + type = SMDSEntity_Hexa; break; + case 4133: + type = SMDSEntity_Penta; break; + case 4134: + type = SMDSEntity_Pyramid; break; + case 4135: + type = SMDSEntity_Hexagonal_Prism; break; default:; } - ( new SMESHGUI_AddMeshElementDlg( this, type, nbNodes ) )->show(); + ( new SMESHGUI_AddMeshElementDlg( this, type ) )->show(); } else { SUIT_MessageBox::warning(desktop(), @@ -2852,31 +2891,37 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 4034: // QUADRATIC EDGE case 4035: // QUADRATIC TRIANGLE case 4036: // QUADRATIC QUADRANGLE + case 4136: // BIQUADRATIC QUADRANGLE case 4037: // QUADRATIC TETRAHEDRON case 4038: // QUADRATIC PYRAMID case 4039: // QUADRATIC PENTAHEDRON case 4040: // QUADRATIC HEXAHEDRON + case 4140: // TRIQUADRATIC HEXAHEDRON { if(checkLock(aStudy)) break; if ( vtkwnd ) { EmitSignalDeactivateDialog(); - int type; + SMDSAbs_EntityType type; switch (theCommandID) { case 4034: - type = QUAD_EDGE; break; + type = SMDSEntity_Quad_Edge; break; case 4035: - type = QUAD_TRIANGLE; break; + type = SMDSEntity_Quad_Triangle; break; case 4036: - type = QUAD_QUADRANGLE; break; + type = SMDSEntity_Quad_Quadrangle; break; + case 4136: + type = SMDSEntity_BiQuad_Quadrangle; break; case 4037: - type = QUAD_TETRAHEDRON; break; + type = SMDSEntity_Quad_Tetra; break; case 4038: - type = QUAD_PYRAMID; break; + type = SMDSEntity_Quad_Pyramid; break; case 4039: - type = QUAD_PENTAHEDRON; break; + type = SMDSEntity_Quad_Penta; break; case 4040: - type = QUAD_HEXAHEDRON; + type = SMDSEntity_Quad_Hexa; + case 4140: + type = SMDSEntity_TriQuad_Hexa; break; default:; } @@ -2985,7 +3030,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } catch (const SALOME::SALOME_Exception& S_ex) { SalomeApp_Tools::QtCatchCorbaException(S_ex); - } + } catch (...) { } } @@ -3171,6 +3216,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 6025: case 6026: case 6027: + case 6028: + case 6029: + case 6030: + case 6031: if ( vtkwnd ) { LightApp_SelectionMgr* mgr = selectionMgr(); @@ -3295,7 +3344,7 @@ void SMESHGUI::BuildPresentation( const Handle(SALOME_InteractiveObject) & theIO // function : createSMESHAction // purpose : //======================================================================= -void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QString& icon_id, +void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle, const QString& shortcutAction ) { QIcon icon; @@ -3313,7 +3362,7 @@ void SMESHGUI::createSMESHAction( const int id, const QString& po_id, const QStr menu = tr( QString( "MEN_%1" ).arg( po_id ).toLatin1().data() ), status_bar = tr( QString( "STB_%1" ).arg( po_id ).toLatin1().data() ); - createAction( id, tooltip, icon, menu, status_bar, key, parent, + createAction( id, tooltip, icon, menu, status_bar, key, parent, toggle, this, SLOT( OnGUIEvent() ), shortcutAction ); } @@ -3418,12 +3467,16 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 6001, "LENGTH", "ICON_LENGTH", 0, true ); createSMESHAction( 6002, "FREE_EDGE", "ICON_FREE_EDGE", 0, true ); createSMESHAction( 6021, "FREE_FACES", "ICON_FREE_FACES", 0, true ); - createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true ); - createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true ); - createSMESHAction( 6024, "BARE_BORDER_VOLUME","ICON_BARE_BORDER_VOLUME", 0, true ); - createSMESHAction( 6025, "BARE_BORDER_FACE","ICON_BARE_BORDER_FACE", 0, true ); + createSMESHAction( 6022, "MAX_ELEMENT_LENGTH_2D", "ICON_MAX_ELEMENT_LENGTH_2D", 0, true ); + createSMESHAction( 6023, "MAX_ELEMENT_LENGTH_3D", "ICON_MAX_ELEMENT_LENGTH_3D", 0, true ); + createSMESHAction( 6024, "BARE_BORDER_VOLUME", "ICON_BARE_BORDER_VOLUME", 0, true ); + createSMESHAction( 6025, "BARE_BORDER_FACE", "ICON_BARE_BORDER_FACE", 0, true ); createSMESHAction( 6026, "OVER_CONSTRAINED_VOLUME","ICON_OVER_CONSTRAINED_VOLUME", 0, true ); - createSMESHAction( 6027, "OVER_CONSTRAINED_FACE","ICON_OVER_CONSTRAINED_FACE", 0, true ); + createSMESHAction( 6027, "OVER_CONSTRAINED_FACE", "ICON_OVER_CONSTRAINED_FACE", 0, true ); + createSMESHAction( 6028, "EQUAL_NODE", "ICON_EQUAL_NODE", 0, true ); + createSMESHAction( 6029, "EQUAL_EDGE", "ICON_EQUAL_EDGE", 0, true ); + createSMESHAction( 6030, "EQUAL_FACE", "ICON_EQUAL_FACE", 0, true ); + createSMESHAction( 6031, "EQUAL_VOLUME", "ICON_EQUAL_VOLUME", 0, true ); createSMESHAction( 6003, "FREE_BORDER", "ICON_FREE_EDGE_2D", 0, true ); createSMESHAction( 6004, "CONNECTION", "ICON_CONNECTION", 0, true ); createSMESHAction( 6005, "FREE_NODE", "ICON_FREE_NODE", 0, true ); @@ -3445,9 +3498,22 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 4023, "POLYGON", "ICON_DLG_POLYGON" ); createSMESHAction( 4031, "TETRA", "ICON_DLG_TETRAS" ); createSMESHAction( 4032, "HEXA", "ICON_DLG_HEXAS" ); - createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" ); - createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" ); - createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" ); + createSMESHAction( 4133, "PENTA", "ICON_DLG_PENTA" ); + createSMESHAction( 4134, "PYRAMID", "ICON_DLG_PYRAMID" ); + createSMESHAction( 4135, "OCTA", "ICON_DLG_OCTA" ); + createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" ); + createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" ); + createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" ); + createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" ); + createSMESHAction( 4136, "BIQUADRATIC_QUADRANGLE", "ICON_DLG_BIQUADRATIC_QUADRANGLE" ); + createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" ); + createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" ); + createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" ); + createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" ); + createSMESHAction( 4140, "TRIQUADRATIC_HEXAHEDRON", "ICON_DLG_TRIQUADRATIC_HEXAHEDRON" ); + createSMESHAction( 4041, "REMOVE_NODES", "ICON_DLG_REM_NODE" ); + createSMESHAction( 4042, "REMOVE_ELEMENTS", "ICON_DLG_REM_ELEMENT" ); + createSMESHAction( 4044, "REMOVE_ORPHAN_NODES", "ICON_DLG_REM_ORPHAN_NODES" ); createSMESHAction( 4043, "CLEAR_MESH" , "ICON_CLEAR_MESH" ); createSMESHAction( 4051, "RENUM_NODES", "ICON_DLG_RENUMBERING_NODES" ); createSMESHAction( 4052, "RENUM_ELEMENTS", "ICON_DLG_RENUMBERING_ELEMENTS" ); @@ -3514,14 +3580,6 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 300, "ERASE" ); createSMESHAction( 301, "DISPLAY" ); createSMESHAction( 302, "DISPLAY_ONLY" ); - createSMESHAction( 4033, "POLYHEDRON", "ICON_DLG_POLYHEDRON" ); - createSMESHAction( 4034, "QUADRATIC_EDGE", "ICON_DLG_QUADRATIC_EDGE" ); - createSMESHAction( 4035, "QUADRATIC_TRIANGLE", "ICON_DLG_QUADRATIC_TRIANGLE" ); - createSMESHAction( 4036, "QUADRATIC_QUADRANGLE", "ICON_DLG_QUADRATIC_QUADRANGLE" ); - createSMESHAction( 4037, "QUADRATIC_TETRAHEDRON", "ICON_DLG_QUADRATIC_TETRAHEDRON" ); - createSMESHAction( 4038, "QUADRATIC_PYRAMID", "ICON_DLG_QUADRATIC_PYRAMID" ); - createSMESHAction( 4039, "QUADRATIC_PENTAHEDRON", "ICON_DLG_QUADRATIC_PENTAHEDRON" ); - createSMESHAction( 4040, "QUADRATIC_HEXAHEDRON", "ICON_DLG_QUADRATIC_HEXAHEDRON" ); // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), @@ -3598,10 +3656,12 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( separator(), meshId, -1 ); createMenu( 6005, nodeId, -1 ); + createMenu( 6028, nodeId, -1 ); createMenu( 6002, edgeId, -1 ); createMenu( 6003, edgeId, -1 ); createMenu( 6001, edgeId, -1 ); createMenu( 6004, edgeId, -1 ); + createMenu( 6029, edgeId, -1 ); createMenu( 6021, faceId, -1 ); createMenu( 6025, faceId, -1 ); createMenu( 6027, faceId, -1 ); @@ -3614,11 +3674,13 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 6015, faceId, -1 ); createMenu( 6016, faceId, -1 ); createMenu( 6022, faceId, -1 ); + createMenu( 6030, faceId, -1 ); createMenu( 6017, volumeId, -1 ); createMenu( 6009, volumeId, -1 ); createMenu( 6023, volumeId, -1 ); createMenu( 6024, volumeId, -1 ); createMenu( 6026, volumeId, -1 ); + createMenu( 6031, volumeId, -1 ); createMenu( 4000, addId, -1 ); createMenu( 4009, addId, -1 ); @@ -3628,15 +3690,20 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 4023, addId, -1 ); createMenu( 4031, addId, -1 ); createMenu( 4032, addId, -1 ); + createMenu( 4133, addId, -1 ); + createMenu( 4134, addId, -1 ); + createMenu( 4135, addId, -1 ); createMenu( 4033, addId, -1 ); createMenu( separator(), addId, -1 ); createMenu( 4034, addId, -1 ); createMenu( 4035, addId, -1 ); createMenu( 4036, addId, -1 ); + createMenu( 4136, addId, -1 ); createMenu( 4037, addId, -1 ); createMenu( 4038, addId, -1 ); createMenu( 4039, addId, -1 ); createMenu( 4040, addId, -1 ); + createMenu( 4140, addId, -1 ); createMenu( 4041, removeId, -1 ); createMenu( 4042, removeId, -1 ); @@ -3708,11 +3775,13 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( separator(), meshTb ); createTool( 6005, ctrlTb ); + createTool( 6028, ctrlTb ); createTool( separator(), ctrlTb ); createTool( 6002, ctrlTb ); createTool( 6003, ctrlTb ); createTool( 6001, ctrlTb ); createTool( 6004, ctrlTb ); + createTool( 6029, ctrlTb ); createTool( separator(), ctrlTb ); createTool( 6021, ctrlTb ); createTool( 6025, ctrlTb ); @@ -3726,12 +3795,14 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 6015, ctrlTb ); createTool( 6016, ctrlTb ); createTool( 6022, ctrlTb ); + createTool( 6030, ctrlTb ); createTool( separator(), ctrlTb ); createTool( 6017, ctrlTb ); createTool( 6009, ctrlTb ); createTool( 6023, ctrlTb ); createTool( 6024, ctrlTb ); createTool( 6026, ctrlTb ); + createTool( 6031, ctrlTb ); createTool( separator(), ctrlTb ); createTool( 4000, addRemTb ); @@ -3742,15 +3813,20 @@ void SMESHGUI::initialize( CAM_Application* app ) createTool( 4023, addRemTb ); createTool( 4031, addRemTb ); createTool( 4032, addRemTb ); + createTool( 4133, addRemTb ); + createTool( 4134, addRemTb ); + createTool( 4135, addRemTb ); createTool( 4033, addRemTb ); createTool( separator(), addRemTb ); createTool( 4034, addRemTb ); createTool( 4035, addRemTb ); createTool( 4036, addRemTb ); + createTool( 4136, addRemTb ); createTool( 4037, addRemTb ); createTool( 4038, addRemTb ); createTool( 4039, addRemTb ); createTool( 4040, addRemTb ); + createTool( 4140, addRemTb ); createTool( separator(), addRemTb ); createTool( 4041, addRemTb ); createTool( 4042, addRemTb ); @@ -3852,7 +3928,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 417, OB, mesh + " " + subMesh ); // convert to quadratic createPopupItem( 418, OB, mesh + " " + group, // create 2D mesh from 3D - "&& dim>=2"); + "&& dim>=2"); popupMgr()->insert( separator(), -1, 0 ); QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc ); @@ -4014,6 +4090,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( 6005 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( 6005 ), "controlMode = 'eFreeNodes'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( 6028 ), aSubId, -1 ); // EQUAL_NODE + popupMgr()->setRule( action( 6028 ), aMeshInVtkHasNodes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( 6028 ), "controlMode = 'eCoincidentNodes'", QtxPopupMgr::ToggleRule); + aSubId = popupMgr()->insert( tr( "MEN_EDGE_CTRL" ), anId, -1 ); // EDGE CONTROLS popupMgr()->insert( action( 6002 ), aSubId, -1 ); // FREE_EDGE @@ -4031,6 +4111,9 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( action( 6004 ), aSubId, -1 ); // CONNECTION popupMgr()->setRule( action( 6004 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( 6004 ), "controlMode = 'eMultiConnection'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( 6029 ), aSubId, -1 ); // EQUAL_EDGE + popupMgr()->setRule( action( 6029 ), aMeshInVtkHasEdges, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( 6029 ), "controlMode = 'eCoincidentElems1D'", QtxPopupMgr::ToggleRule); aSubId = popupMgr()->insert( tr( "MEN_FACE_CTRL" ), anId, -1 ); // FACE CONTROLS @@ -4082,6 +4165,9 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert ( action( 6027 ), aSubId, -1 ); // OVER_CONSTRAINED_FACE popupMgr()->setRule( action( 6027 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( 6027 ), "controlMode = 'eOverConstrainedFace'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( 6030 ), aSubId, -1 ); // EQUAL_FACE + popupMgr()->setRule( action( 6030 ), aMeshInVtkHasFaces, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( 6030 ), "controlMode = 'eCoincidentElems2D'", QtxPopupMgr::ToggleRule ); aSubId = popupMgr()->insert( tr( "MEN_VOLUME_CTRL" ), anId, -1 ); // VOLUME CONTROLS @@ -4105,6 +4191,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->setRule( action( 6026 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); popupMgr()->setRule( action( 6026 ), "controlMode = 'eOverConstrainedVolume'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert ( action( 6031 ), aSubId, -1 ); // EQUAL_VOLUME + popupMgr()->setRule( action( 6031 ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule ); + popupMgr()->setRule( action( 6031 ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule ); + popupMgr()->insert( separator(), anId, -1 ); popupMgr()->insert( action( 201 ), anId, -1 ); // SCALAR_BAR_PROP @@ -4225,7 +4315,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study ) GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() ); updateObjBrowser(); // objects can be removed } - + // get all view currently opened in the study and connect their signals to // the corresponding slots of the class. SUIT_Desktop* aDesk = study->application()->desktop(); @@ -4333,7 +4423,7 @@ void SMESHGUI::onViewManagerActivated( SUIT_ViewManager* mgr ) { if ( dynamic_cast( mgr ) ) { SMESH::UpdateSelectionProp( this ); - + QVector aViews = mgr->getViews(); for(int i = 0; i < aViews.count() ; i++){ SUIT_ViewWindow *sf = aViews[i]; @@ -4404,6 +4494,11 @@ void SMESHGUI::createPreferences() int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" ); setPreferenceProperty( prec, "min", 0 ); setPreferenceProperty( prec, "max", 16 ); + 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 ); setPreferenceProperty( dispgroup, "columns", 2 ); @@ -4487,6 +4582,11 @@ void SMESHGUI::createPreferences() setPreferenceProperty( nbSeg, "min", 1 ); setPreferenceProperty( nbSeg, "max", 10000000 ); + int loadGroup = addPreference( tr( "SMESH_PREF_MESH_LOADING" ), genTab ); + addPreference( tr( "PREF_FORGET_MESH_AT_HYP_MODIF" ), loadGroup, LightApp_Preferences::Bool, + "SMESH", "forget_mesh_on_hyp_modif" ); + + // Quantities with individual precision settings int precGroup = addPreference( tr( "SMESH_PREF_GROUP_PRECISION" ), genTab ); setPreferenceProperty( precGroup, "columns", 2 ); @@ -4519,7 +4619,10 @@ void SMESHGUI::createPreferences() setPreferenceProperty( chunkSize, "min", 0 ); setPreferenceProperty( chunkSize, "max", 1000 ); setPreferenceProperty( chunkSize, "step", 50 ); - + + int pyDumpGroup = addPreference( tr( "PREF_PYTHON_DUMP" ), genTab ); + addPreference( tr( "PREF_HISTORICAL_PYTHON_DUMP" ), pyDumpGroup, LightApp_Preferences::Bool, "SMESH", "historical_python_dump" ); + // Mesh tab ------------------------------------------------------------------------ int meshTab = addPreference( tr( "PREF_TAB_MESH" ) ); int nodeGroup = addPreference( tr( "PREF_GROUP_NODES" ), meshTab ); @@ -4557,10 +4660,10 @@ void SMESHGUI::createPreferences() int ColorId = addPreference( tr( "PREF_FILL" ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" ); addPreference( tr( "PREF_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" ); - + addPreference( tr( "PREF_OUTLINE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" ); addPreference( tr( "PREF_WIREFRAME" ), elemGroup, LightApp_Preferences::Color, "SMESH", "wireframe_color" ); - + setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") ); int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab ); @@ -4604,19 +4707,11 @@ void SMESHGUI::createPreferences() addPreference( tr( "PREF_OBJECT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_object_color" ); addPreference( tr( "PREF_ELEMENT_COLOR" ), selGroup, LightApp_Preferences::Color, "SMESH", "selection_element_color" ); - int selW = addPreference( tr( "PREF_WIDTH" ), selGroup, LightApp_Preferences::IntSpin, "SMESH", "selection_width" ); - - setPreferenceProperty( selW, "min", 1 ); - setPreferenceProperty( selW, "max", 5 ); int preGroup = addPreference( tr( "PREF_GROUP_PRESELECTION" ), selTab ); setPreferenceProperty( preGroup, "columns", 2 ); addPreference( tr( "PREF_HIGHLIGHT_COLOR" ), preGroup, LightApp_Preferences::Color, "SMESH", "highlight_color" ); - int preW = addPreference( tr( "PREF_WIDTH" ), preGroup, LightApp_Preferences::IntSpin, "SMESH", "highlight_width" ); - - setPreferenceProperty( preW, "min", 1 ); - setPreferenceProperty( preW, "max", 5 ); int precSelGroup = addPreference( tr( "PREF_GROUP_PRECISION" ), selTab ); setPreferenceProperty( precSelGroup, "columns", 2 ); @@ -4697,12 +4792,12 @@ void SMESHGUI::createPreferences() setPreferenceProperty( hh, "min", 0.0 ); setPreferenceProperty( hh, "max", 1.0 ); setPreferenceProperty( hh, "step", 0.1 ); - + int distributionGr = addPreference( tr( "SMESH_DISTRIBUTION_SCALARBAR" ), sbarTab, LightApp_Preferences::Auto, "SMESH", "distribution_visibility" ); int coloringType = addPreference( tr( "SMESH_DISTRIBUTION_COLORING_TYPE" ), distributionGr, LightApp_Preferences::Selector, "SMESH", "distribution_coloring_type" ); setPreferenceProperty( distributionGr, "columns", 3 ); QStringList types; - types.append( tr( "SMESH_MONOCOLOR" ) ); + types.append( tr( "SMESH_MONOCOLOR" ) ); types.append( tr( "SMESH_MULTICOLOR" ) ); indices.clear(); indices.append( 0 ); indices.append( 1 ); setPreferenceProperty( coloringType, "strings", types ); @@ -4719,7 +4814,7 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) std::string aWarning; SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this); if( name=="selection_object_color" || name=="selection_element_color" || - name=="selection_width" || name=="highlight_color" || name=="highlight_width" || + name=="highlight_color" || name=="selection_precision_node" || name=="selection_precision_element" || name=="selection_precision_object") SMESH::UpdateSelectionProp( this ); @@ -4773,6 +4868,11 @@ void SMESHGUI::preferencesChanged( const QString& sect, const QString& name ) int nbSeg = aResourceMgr->integerValue( "SMESH", "nb_segments_per_edge", 15 ); myComponentSMESH->SetDefaultNbSegments( nbSeg ); } + else if ( name == "historical_python_dump" || + name == "forget_mesh_on_hyp_modif") { + QString val = aResourceMgr->stringValue( "SMESH", name ); + myComponentSMESH->SetOption( name.toLatin1().constData(), val.toLatin1().constData() ); + } if(aWarning.size() != 0){ aWarning += "The default values are applied instead."; @@ -5132,7 +5232,7 @@ void SMESHGUI::storeVisualParameters (int savePoint) // Colors (surface:edge:) vtkFloatingPointType r, g, b; int delta; - + aSmeshActor->GetSufaceColor(r, g, b, delta); QString colorStr ("surface"); colorStr += gDigitsSep; colorStr += QString::number(r); @@ -5141,7 +5241,7 @@ void SMESHGUI::storeVisualParameters (int savePoint) colorStr += gDigitsSep; colorStr += "backsurface"; colorStr += gDigitsSep; colorStr += QString::number(delta); - + aSmeshActor->GetEdgeColor(r, g, b); colorStr += gDigitsSep; colorStr += "edge"; @@ -5211,7 +5311,7 @@ void SMESHGUI::storeVisualParameters (int savePoint) for ( ; anIter2 != anActorList.end(); anIter2++ ) { if( aSmeshActor == *anIter2 ) { ip->setParameter( entry, param + QString::number( ++aPlaneId ).toLatin1().constData(), - QString::number( anId ).toLatin1().constData() ); + QString::number( anId ).toLatin1().constData() ); break; } } @@ -5376,7 +5476,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) continue; TPlaneDataList& aPlaneDataList = aPlaneDataMap[ aViewId ]; - aPlaneDataList.push_back( aPlaneData ); + aPlaneDataList.push_back( aPlaneData ); } } @@ -5520,18 +5620,18 @@ void SMESHGUI::restoreVisualParameters (int savePoint) "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b:outline:r:g:b"); } else { - int delta = 0; + int delta = 0; float er,eg,eb; float nr,ng,nb; vtkFloatingPointType otr,otg,otb; //Old case backsurface color is independent if( colors.count() == 16 ) { QColor ffc; - SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ; + SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ; er = colors[9].toFloat(); eg = colors[10].toFloat(); eb = colors[11].toFloat(); - + nr = colors[13].toFloat(); ng = colors[14].toFloat(); nb = colors[15].toFloat(); @@ -5543,7 +5643,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint) er = colors[7].toFloat(); eg = colors[8].toFloat(); eb = colors[9].toFloat(); - + nr = colors[11].toFloat(); ng = colors[12].toFloat(); nb = colors[13].toFloat(); @@ -5842,7 +5942,7 @@ void SMESHGUI::onViewClosed( SUIT_ViewWindow* pview ) { #ifndef DISABLE_PLOT2DVIEWER //Crear all Plot2d Viewers if need. SMESH::ClearPlot2Viewers(pview); -#endif +#endif } /*! @@ -5852,17 +5952,17 @@ void SMESHGUI::onViewClosed( SUIT_ViewWindow* pview ) { void SMESHGUI::connectView( const SUIT_ViewWindow* pview ) { if(!pview) return; - + SUIT_ViewManager* viewMgr = pview->getViewManager(); if ( viewMgr ) { disconnect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ), this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) ); - + connect( viewMgr, SIGNAL( deleteView( SUIT_ViewWindow* ) ), this, SLOT( onViewClosed( SUIT_ViewWindow* ) ) ); } } - + /*! \brief Return \c true if object can be renamed */ @@ -5878,7 +5978,7 @@ bool SMESHGUI::renameAllowed( const QString& entry) const { bool appRes = SalomeApp_Module::renameAllowed(entry); if( !appRes ) return false; - + // check type to prevent renaming of inappropriate objects int aType = SMESHGUI_Selection::type(qPrintable(entry), aStudy); if (aType == MESH || aType == GROUP || @@ -5898,11 +5998,11 @@ bool SMESHGUI::renameAllowed( const QString& entry) const { \brief Return \c true if rename operation finished successfully, \c false otherwise. */ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { - + SalomeApp_Application* anApp = dynamic_cast( application() ); if( !anApp ) return false; - + _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active if( !aStudy ) return false; @@ -5910,7 +6010,7 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { bool appRes = SalomeApp_Module::renameObject(entry,name); if( !appRes ) return false; - + _PTR(SObject) obj = aStudy->FindObjectID( qPrintable(entry) ); _PTR(GenericAttribute) anAttr; _PTR(AttributeName) aName; @@ -5926,11 +6026,11 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { aType == HYPOTHESIS || aType == ALGORITHM) { if ( !name.isEmpty() ) { SMESHGUI::GetSMESHGen()->SetName(obj->GetIOR().c_str(), qPrintable(name) ); - + // update name of group object and its actor - Handle(SALOME_InteractiveObject) IObject = + Handle(SALOME_InteractiveObject) IObject = new SALOME_InteractiveObject ( qPrintable(entry), "SMESH", qPrintable(name) ); - + SMESH::SMESH_GroupBase_var aGroupObject = SMESH::IObjectToInterface(IObject); if( !aGroupObject->_is_nil() ) { aGroupObject->SetName( qPrintable(name) ); @@ -5939,7 +6039,7 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) { } return true; } - } + } } } return false;