X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_NodesDlg.cxx;h=84abe524296e47675ed4481ba66ccd74a33dcbda;hp=ebc42b1987e9ef85dc86a42c9c178814b500a4ad;hb=3a401076892f2f372c58a07199e36486a6c5c9af;hpb=48633271692b647b8b01eed5b6e0594f627b276c diff --git a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx index ebc42b198..84abe5242 100644 --- a/src/SMESHGUI/SMESHGUI_NodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_NodesDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2010 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 @@ -19,6 +19,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_NodesDlg.cxx // Author : Nicolas REJNERI, Open CASCADE S.A.S. @@ -50,6 +51,8 @@ #include #include +#include + #include #include #include @@ -350,9 +353,9 @@ void SMESHGUI_NodesDlg::Init() double step = 25.0; /* min, max, step and decimals for spin boxes */ - SpinBox_X->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY ); - SpinBox_Y->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY ); - SpinBox_Z->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, DBL_DIGITS_DISPLAY ); + SpinBox_X->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, "length_precision" ); + SpinBox_Y->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, "length_precision" ); + SpinBox_Z->RangeStepAndValidator( COORD_MIN, COORD_MAX, step, "length_precision" ); SpinBox_X->SetValue( 0.0 ); SpinBox_Y->SetValue( 0.0 ); SpinBox_Z->SetValue( 0.0 ); @@ -376,6 +379,7 @@ void SMESHGUI_NodesDlg::Init() connect( mySMESHGUI, SIGNAL( SignalDeactivateActiveDialog() ), SLOT( DeactivateActiveDialog() ) ); /* to close dialog if study frame change */ connect( mySMESHGUI, SIGNAL( SignalStudyFrameChanged() ), SLOT( ClickOnCancel() ) ); + connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), SLOT(ClickOnCancel())); // set selection mode SMESH::SetPointRepresentation( true ); @@ -438,35 +442,64 @@ bool SMESHGUI_NodesDlg::ClickOnApply() aParameters << SpinBox_Y->text(); aParameters << SpinBox_Z->text(); + bool addToGroup = GroupGroups->isChecked(); + QString aGroupName; + + SMESH::SMESH_GroupBase_var aGroup; + int idx = 0; + if( addToGroup ) { + aGroupName = ComboBox_GroupName->currentText(); + for ( int i = 1; i < ComboBox_GroupName->count(); i++ ) { + QString aName = ComboBox_GroupName->itemText( i ); + if ( aGroupName == aName && ( i == ComboBox_GroupName->currentIndex() || idx == 0 ) ) + idx = i; + } + if ( idx > 0 ) { + SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( myGroups[idx-1] ); + if ( !aGeomGroup->_is_nil() ) { + int res = SUIT_MessageBox::question( this, tr( "SMESH_WRN_WARNING" ), + tr( "MESH_STANDALONE_GRP_CHOSEN" ).arg( aGroupName ), + tr( "SMESH_BUT_YES" ), tr( "SMESH_BUT_NO" ), 0, 1 ); + if ( res == 1 ) return false; + } + aGroup = myGroups[idx-1]; + } + } + mySimulation->SetVisibility( false ); + long aNodeId = SMESH::AddNode( myMesh, x, y, z, aParameters ); + SMESH::SetPointRepresentation( true ); - if( aNodeId != -1 && GroupGroups->isChecked() ) { - SMESH::SMESH_Group_var aGroup; - QString aGroupName = ComboBox_GroupName->currentText(); - SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups(); - for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) { - SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i]; - if( !aGroupBase->_is_nil() ) { - SMESH::SMESH_Group_var aRefGroup = SMESH::SMESH_Group::_narrow( aGroupBase ); - if( !aRefGroup->_is_nil() ) { - QString aRefGroupName( aRefGroup->GetName() ); - if( aRefGroupName == aGroupName ) { - aGroup = aRefGroup; // // add node to existing group - break; - } - } + if ( aNodeId != -1 && addToGroup && !aGroupName.isEmpty() ) { + SMESH::SMESH_Group_var aGroupUsed; + if ( aGroup->_is_nil() ){ + // create new group + aGroupUsed = SMESH::AddGroup( myMesh, SMESH::NODE, aGroupName ); + if ( !aGroupUsed->_is_nil() ) { + myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroupUsed)); + ComboBox_GroupName->addItem( aGroupName ); } } - if( aGroup->_is_nil() ) // create new group - aGroup = SMESH::AddGroup( myMesh, SMESH::NODE, aGroupName ); + else { + SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGroup ); + if ( !aGeomGroup->_is_nil() ) { + aGroupUsed = myMesh->ConvertToStandalone( aGeomGroup ); + if ( !aGroupUsed->_is_nil() && idx > 0 ) { + myGroups[idx-1] = SMESH::SMESH_GroupBase::_duplicate(aGroupUsed); + SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser(); + } + } + else + aGroupUsed = SMESH::SMESH_Group::_narrow( aGroup ); + } - if( !aGroup->_is_nil() ) { + if ( !aGroupUsed->_is_nil() ) { SMESH::long_array_var anIdList = new SMESH::long_array; anIdList->length( 1 ); anIdList[0] = aNodeId; - aGroup->Add( anIdList.inout() ); + aGroupUsed->Add( anIdList.inout() ); } } @@ -494,6 +527,9 @@ bool SMESHGUI_NodesDlg::ClickOnApply() } } } + + SMESHGUI::Modified(); + return true; } @@ -580,17 +616,17 @@ void SMESHGUI_NodesDlg::SelectionIntoArgument() // process groups if ( !myMesh->_is_nil() && myEntry != aCurrentEntry ) { + myGroups.clear(); ComboBox_GroupName->clear(); ComboBox_GroupName->addItem( QString() ); SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups(); for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) { - SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i]; - if ( !aGroupBase->_is_nil() && aGroupBase->GetType() == SMESH::NODE ) { - SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupBase ); - if ( !aGroup->_is_nil() ) { - QString aGroupName( aGroup->GetName() ); - if ( !aGroupName.isEmpty() ) - ComboBox_GroupName->addItem( aGroupName ); + SMESH::SMESH_GroupBase_var aGroup = aListOfGroups[i]; + if ( !aGroup->_is_nil() && aGroup->GetType() == SMESH::NODE ) { + QString aGroupName( aGroup->GetName() ); + if ( !aGroupName.isEmpty() ) { + myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroup)); + ComboBox_GroupName->addItem( aGroupName ); } } }