X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_CreatePolyhedralVolumeDlg.cxx;h=835d24066d637bd1fdd0d79728ef45f3520a5c8b;hb=a286422371fc20d207d28042a23333b6d0bd007c;hp=b97b4d7f2a22d9df93283fdff758b42cfc2712a5;hpb=48633271692b647b8b01eed5b6e0594f627b276c;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx index b97b4d7f2..835d24066 100644 --- a/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx @@ -1,24 +1,25 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2011 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_CreatePolyhedralVolumeDlg.cxx // Author : Michael ZORIN, Open CASCADE S.A.S. @@ -258,6 +259,7 @@ SMESHGUI_CreatePolyhedralVolumeDlg::SMESHGUI_CreatePolyhedralVolumeDlg( SMESHGUI TextLabel_GroupName = new QLabel( tr( "SMESH_GROUP" ), GroupGroups ); ComboBox_GroupName = new QComboBox( GroupGroups ); ComboBox_GroupName->setEditable( true ); + ComboBox_GroupName->setInsertPolicy( QComboBox::NoInsert ); GroupGroupsLayout->addWidget( TextLabel_GroupName ); GroupGroupsLayout->addWidget( ComboBox_GroupName, 1 ); @@ -341,7 +343,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::Init() connect(SelectElementsButton, SIGNAL( clicked() ), SLOT( SetEditCurrentArgument() ) ); connect(LineEditElements, SIGNAL( textChanged(const QString&) ), SLOT(onTextChange(const QString&))); - connect(myFacesByNodes, SIGNAL(selectionChanged()), this, SLOT(onListSelectionChanged())); + connect(myFacesByNodes, SIGNAL(itemSelectionChanged()), this, SLOT(onListSelectionChanged())); connect(AddButton, SIGNAL(clicked()), this, SLOT(onAdd())); connect(RemoveButton, SIGNAL(clicked()), this, SLOT(onRemove())); @@ -448,6 +450,31 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply() if(checkEditLine(false) == -1) {return;} busy = true; long anElemId = -1; + + 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 && idx < myGroups.count() ) { + 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; + } + aGroup = myGroups[idx-1]; + } + } + if (GetConstructorId() == 0) { SMESH::long_array_var anIdsOfNodes = new SMESH::long_array; @@ -508,31 +535,34 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply() } } - if( anElemId != -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 ( anElemId != -1 && addToGroup && !aGroupName.isEmpty() ) { + SMESH::SMESH_Group_var aGroupUsed; + if ( aGroup->_is_nil() ) { + // create new group + aGroupUsed = SMESH::AddGroup( myMesh, SMESH::VOLUME, aGroupName ); + if ( !aGroupUsed->_is_nil() ) { + myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroupUsed)); + ComboBox_GroupName->addItem( 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() ) // create new group - aGroup = SMESH::AddGroup( myMesh, SMESH::VOLUME, aGroupName ); - - if( !aGroup->_is_nil() ) { + + if ( !aGroupUsed->_is_nil() ) { SMESH::long_array_var anIdList = new SMESH::long_array; anIdList->length( 1 ); anIdList[0] = anElemId; - aGroup->Add( anIdList.inout() ); + aGroupUsed->Add( anIdList.inout() ); } } @@ -545,7 +575,10 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply() } //ConstructorsClicked( GetConstructorId() ); busy = false; + + SMESHGUI::Modified(); } + myFacesByNodes->clear(); } //================================================================================= @@ -733,17 +766,17 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::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::VOLUME ) { - 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::VOLUME ) { + QString aGroupName( aGroup->GetName() ); + if ( !aGroupName.isEmpty() ) { + myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroup)); + ComboBox_GroupName->addItem( aGroupName ); } } } @@ -1058,8 +1091,8 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onAdd() myNbOkElements = 1; myEditCurrentArgument->clear(); AddButton->setEnabled(false); - buttonOk->setEnabled( true ); - if(myFacesByNodes->count()>1) buttonApply->setEnabled( true ); + buttonApply->setEnabled( myFacesByNodes->count() > 1 ); + buttonOk->setEnabled( myFacesByNodes->count() > 1 ); } busy = false; onListSelectionChanged();