X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI.cxx;h=4226a8a3f10cf2a12a6d905a6a24451332dbdc80;hb=1fa8c229871aff624d20ab6918d75e3907638f27;hp=0bbbf9bdad90aee8ea7667cc3344fb25f745b7df;hpb=e87a86a68d394635790206ff39c90b5ab8b775bc;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI.cxx b/src/SMESHGUI/SMESHGUI.cxx index 0bbbf9bda..4226a8a3f 100644 --- a/src/SMESHGUI/SMESHGUI.cxx +++ b/src/SMESHGUI/SMESHGUI.cxx @@ -162,6 +162,7 @@ #include #include #include +#include // OCCT includes #include @@ -591,6 +592,7 @@ if ( resMgr ) toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false ); bool toOverwrite = true; + bool toFindOutDim = true; QString aFilter, aTitle = QObject::tr("SMESH_EXPORT_MESH"); QString anInitialPath = ""; @@ -612,32 +614,6 @@ anInitialPath + QString("/") + aMeshName, aFilter, aTitle, false); } - // else if ( isGMF )// Export to GMF - // { - // SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg - // ( SMESHGUI::desktop(), false, QObject::tr("SMESH_REQUIRED_GROUPS"), true, true ); - // QStringList filters; - // filters << QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" - // << QObject::tr( "GMF_BINARY_FILES_FILTER" ) + " (*.meshb)"; - // fd->setWindowTitle( aTitle ); - // fd->setNameFilters( filters ); - - // if ( !aMeshOrGroup->_is_equivalent( aMesh )) - // toCreateGroups = false; - // else - // toCreateGroups = ( aMesh->NbGroups() > 0 ); - - // fd->SetChecked( true ); - // if ( !anInitialPath.isEmpty() ) - // fd->setDirectory( anInitialPath ); - // fd->selectFile(aMeshName); - - // if ( fd->exec() ) - // aFilename = fd->selectedFile(); - // toCreateGroups = fd->IsChecked(); - - // delete fd; - // } else if ( isCGNS )// Export to CGNS { SUIT_FileDlg* fd = new SUIT_FileDlg( SMESHGUI::desktop(), false, true, true ); @@ -705,13 +681,16 @@ if (it.value() == SMESH::MED_V2_2) aDefaultFilter = it.key(); } + QStringList checkBoxes; + checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM"); - SalomeApp_CheckFileDlg* fd = new SalomeApp_CheckFileDlg - ( SMESHGUI::desktop(), false, QObject::tr("SMESH_AUTO_GROUPS"), true, true ); + SalomeApp_CheckFileDlg* fd = + new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true ); fd->setWindowTitle( aTitle ); fd->setNameFilters( filters ); fd->selectNameFilter(aDefaultFilter); - fd->SetChecked(toCreateGroups); + fd->SetChecked(0,toCreateGroups); + fd->SetChecked(1,toFindOutDim); if ( !anInitialPath.isEmpty() ) fd->setDirectory( anInitialPath ); fd->selectFile(aMeshName); @@ -794,7 +773,8 @@ } } } - toCreateGroups = fd->IsChecked(); + toCreateGroups = fd->IsChecked(0); + toFindOutDim = fd->IsChecked(1); delete fd; } else @@ -833,10 +813,10 @@ SMESH::SMESH_Mesh_var aMeshItem = aMeshOrGroup->GetMesh(); if ( aMeshOrGroup->_is_equivalent( aMeshItem )) aMeshItem->ExportToMEDX( aFilename.toLatin1().data(), toCreateGroups, - aFormat, toOverwrite && aMeshIndex == 0 ); + aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim ); else aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toLatin1().data(), toCreateGroups, - aFormat, toOverwrite && aMeshIndex == 0 ); + aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim ); } } else if ( isSAUV ) @@ -1017,6 +997,22 @@ SMESH::RepaintCurrentView(); } + void OverallMeshQuality() { + SMESHGUI::GetSMESHGUI()->EmitSignalDeactivateDialog(); + LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr(); + SALOME_ListIO selected; + if( aSel ) + aSel->selectedObjects( selected ); + + if ( selected.IsEmpty() ) return; + SALOME_ListIteratorOfListIO It( selected ); + for ( ; It.More(); It.Next() ) { + SMESHGUI_CtrlInfoDlg* ctrlDlg = new SMESHGUI_CtrlInfoDlg( SMESHGUI::desktop() ); + ctrlDlg->showInfo( It.Value() ); + ctrlDlg->show(); + } + } + QString functorToString( SMESH::Controls::FunctorPtr f ) { QString type = QObject::tr( "UNKNOWN_CONTROL" ); @@ -1226,6 +1222,25 @@ } } + void sortChildren(){ + 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::GetActiveStudyDocument(); + _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry()); + if (aSObj) { + if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) { + SMESHGUI::GetSMESHGUI()->updateObjBrowser(); + } + } + } + } + } + void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap) { SALOME_ListIO selected; @@ -1981,6 +1996,82 @@ bool SMESHGUI::automaticUpdate(unsigned int requestedSize, bool* limitExceeded) return autoUpdate && !exceeded; } +//============================================================================= +/*! + * + */ +//============================================================================= +bool SMESHGUI::automaticUpdate( SMESH::SMESH_Mesh_ptr theMesh, + int* entities, bool* limitExceeded ) +{ + SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); + if ( !resMgr ) + return false; + + bool autoUpdate = resMgr->booleanValue( "SMESH", "auto_update", false ); + long updateLimit = resMgr->integerValue( "SMESH", "update_limit", 500000 ); + bool incrementalLimit = resMgr->booleanValue( "SMESH", "incremental_limit", false ); + + long requestedSize = theMesh->NbElements(); + + *entities = SMESH_Actor::eAllEntity; + + bool exceeded = updateLimit > 0 && requestedSize > updateLimit; + + if ( limitExceeded ) *limitExceeded = autoUpdate && exceeded; + + if ( incrementalLimit ) { + long nbOdElems = theMesh->Nb0DElements(); + long nbEdges = theMesh->NbEdges(); + long nbFaces = theMesh->NbFaces(); + long nbVolumes = theMesh->NbVolumes(); + long nbBalls = theMesh->NbBalls(); + long total = 0; + + if ( nbOdElems > 0 ) { + if ( total + nbOdElems > updateLimit ) + *entities = *entities & ~SMESH_Actor::e0DElements; + else + exceeded = false; + } + total += nbOdElems; + + if ( nbEdges > 0 ) { + if ( total + nbEdges > updateLimit ) + *entities = *entities & ~SMESH_Actor::eEdges; + else + exceeded = false; + } + total += nbEdges; + + if ( nbFaces > 0 ) { + if ( total + nbFaces > updateLimit ) + *entities = *entities & ~SMESH_Actor::eFaces; + else + exceeded = false; + } + total += nbFaces; + + if ( nbVolumes > 0 ) { + if ( total + nbVolumes > updateLimit ) + *entities = *entities & ~SMESH_Actor::eVolumes; + else + exceeded = false; + } + total += nbVolumes; + + if ( nbBalls > 0 ) { + if ( total + nbBalls > updateLimit ) + *entities = *entities & ~SMESH_Actor::eBallElem; + else + exceeded = false; + } + total += nbBalls; + } + + return autoUpdate && !exceeded; +} + //============================================================================= /*! * @@ -2386,6 +2477,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) case 214: // UPDATE { if(checkLock(aStudy)) break; + SUIT_OverrideCursor wc; try { #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; @@ -3073,26 +3165,16 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SMDSAbs_EntityType type = SMDSEntity_Last; switch (theCommandID) { - case 4034: - type = SMDSEntity_Quad_Edge; break; - case 4035: - type = SMDSEntity_Quad_Triangle; break; - case 4036: - type = SMDSEntity_Quad_Quadrangle; break; - case 4136: - type = SMDSEntity_BiQuad_Quadrangle; break; - case 4137: - type = SMDSEntity_BiQuad_Triangle; break; - case 4037: - type = SMDSEntity_Quad_Tetra; break; - case 4038: - type = SMDSEntity_Quad_Pyramid; break; - case 4039: - type = SMDSEntity_Quad_Penta; break; - case 4040: - type = SMDSEntity_Quad_Hexa; break; - case 4140: - type = SMDSEntity_TriQuad_Hexa; break; + case 4034: type = SMDSEntity_Quad_Edge; break; + case 4035: type = SMDSEntity_Quad_Triangle; break; + case 4036: type = SMDSEntity_Quad_Quadrangle; break; + case 4136: type = SMDSEntity_BiQuad_Quadrangle; break; + case 4137: type = SMDSEntity_BiQuad_Triangle; break; + case 4037: type = SMDSEntity_Quad_Tetra; break; + case 4038: type = SMDSEntity_Quad_Pyramid; break; + case 4039: type = SMDSEntity_Quad_Penta; break; + case 4040: type = SMDSEntity_Quad_Hexa; break; + case 4140: type = SMDSEntity_TriQuad_Hexa; break; default: break; } if ( type != SMDSEntity_Last ) @@ -3189,6 +3271,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) SUIT_MessageBox::No ) == SUIT_MessageBox::Yes; if( confirm ) { try { + SUIT_OverrideCursor wc; SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); int removed = aMeshEditor->RemoveOrphanNodes(); SUIT_MessageBox::information(SMESHGUI::desktop(), @@ -3408,6 +3491,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) 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; } @@ -3424,8 +3508,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) tr( "NOT_A_VTK_VIEWER" ) ); } break; + case 6032: + OverallMeshQuality(); + break; case 9010: { + SUIT_OverrideCursor wc; LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -3442,6 +3530,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) } case 9011: { + SUIT_OverrideCursor wc; LightApp_SelectionMgr* mgr = selectionMgr(); SALOME_ListIO selected; mgr->selectedObjects( selected ); @@ -3464,6 +3553,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID ) dlg->show(); break; } + case 41: + ::sortChildren(); + break; + } anApp->updateActions(); //SRN: To update a Save button in the toolbar @@ -3651,6 +3744,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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( 6032, "OVERALL_MESH_QUALITY" ); 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 ); @@ -3760,6 +3854,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createSMESHAction( 301, "SHOW" ); createSMESHAction( 302, "DISPLAY_ONLY" ); + createSMESHAction( 41, "SORT_CHILD_ITEMS" ); + // ----- create menu -------------- int fileId = createMenu( tr( "MEN_FILE" ), -1, 1 ), editId = createMenu( tr( "MEN_EDIT" ), -1, 3 ), @@ -3862,6 +3958,8 @@ void SMESHGUI::initialize( CAM_Application* app ) createMenu( 6024, volumeId, -1 ); createMenu( 6026, volumeId, -1 ); createMenu( 6031, volumeId, -1 ); + createMenu( separator(), ctrlId, -1 ); + createMenu( 6032, ctrlId, -1 ); createMenu( 4000, addId, -1 ); createMenu( 4009, addId, -1 ); @@ -4106,6 +4204,7 @@ void SMESHGUI::initialize( CAM_Application* app ) createPopupItem( 214, OB, mesh_part ); // UPDATE createPopupItem( 900, OB, mesh_part ); // ADV_INFO createPopupItem( 904, OB, mesh_group ); // FIND_ELEM + createPopupItem( 6032, OB, mesh_part ); // CTRL_INFO popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 801, OB, mesh ); // CREATE_GROUP createPopupItem( 806, OB, mesh ); // CREATE_GEO_GROUP @@ -4147,6 +4246,7 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), -1, 0 ); createPopupItem( 214, View, mesh_part ); // UPDATE createPopupItem( 900, View, mesh_part ); // ADV_INFO + createPopupItem( 6032,View, mesh_part ); // CTRL_INFO createPopupItem( 904, View, mesh ); // FIND_ELEM popupMgr()->insert( separator(), -1, 0 ); @@ -4391,7 +4491,7 @@ void SMESHGUI::initialize( CAM_Application* app ) 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 @@ -4438,6 +4538,10 @@ void SMESHGUI::initialize( CAM_Application* app ) popupMgr()->insert( separator(), -1, -1 ); + popupMgr()->insert( action( 41 ), -1, -1 ); + popupMgr()->setRule( action( 41 ), "$component={'SMESH'} and client='ObjectBrowser' and isContainer and nbChildren>1", QtxPopupMgr::VisibleRule ); + popupMgr()->insert( separator(), -1, -1 ); + connect( application(), SIGNAL( viewManagerActivated( SUIT_ViewManager* ) ), this, SLOT( onViewManagerActivated( SUIT_ViewManager* ) ) ); @@ -4678,11 +4782,13 @@ void SMESHGUI::createPreferences() int genTab = addPreference( tr( "PREF_TAB_GENERAL" ) ); int autoUpdate = addPreference( tr( "PREF_AUTO_UPDATE" ), genTab, LightApp_Preferences::Auto, "SMESH", "auto_update" ); + setPreferenceProperty( autoUpdate, "columns", 2 ); int lim = addPreference( tr( "PREF_UPDATE_LIMIT" ), autoUpdate, LightApp_Preferences::IntSpin, "SMESH", "update_limit" ); setPreferenceProperty( lim, "min", 0 ); setPreferenceProperty( lim, "max", 100000000 ); setPreferenceProperty( lim, "step", 1000 ); setPreferenceProperty( lim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); + addPreference( tr( "PREF_INCREMENTAL_LIMIT" ), autoUpdate, LightApp_Preferences::Bool, "SMESH", "incremental_limit" ); int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab ); setPreferenceProperty( qaGroup, "columns", 2 ); @@ -4767,10 +4873,16 @@ void SMESHGUI::createPreferences() setPreferenceProperty( nodesLim, "max", 10000000 ); setPreferenceProperty( nodesLim, "step", 10000 ); setPreferenceProperty( nodesLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); + int ctrlLim = addPreference( tr( "PREF_CTRL_LIMIT" ), infoGroup, LightApp_Preferences::IntSpin, "SMESH", "info_controls_limit" ); + setPreferenceProperty( ctrlLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) ); + setPreferenceProperty( ctrlLim, "min", 0 ); + setPreferenceProperty( ctrlLim, "max", 10000000 ); + setPreferenceProperty( ctrlLim, "step", 1000 ); addPreference( tr( "PREF_ELEM_INFO_GRP_DETAILS" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "elem_info_grp_details" ); addPreference( tr( "PREF_DUMP_BASE_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_base" ); addPreference( tr( "PREF_DUMP_ELEM_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_elem" ); addPreference( tr( "PREF_DUMP_ADD_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_add" ); + addPreference( tr( "PREF_DUMP_CTRL_INFO" ), infoGroup, LightApp_Preferences::Bool, "SMESH", "info_dump_ctrl" ); int segGroup = addPreference( tr( "PREF_GROUP_SEGMENT_LENGTH" ), genTab ); setPreferenceProperty( segGroup, "columns", 2 );