X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_DuplicateNodesDlg.cxx;h=407984de7696ddc03d7aaf288c413128816aa198;hp=0c49d152e4139748bab978a0c3fcdb8e53b27b8a;hb=b0a908c0d20341651771d0249fb10882f54b2aad;hpb=88b3dbe23b236bd1746405155ae33a76aaf59ecd diff --git a/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx index 0c49d152e..407984de7 100644 --- a/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 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 @@ -6,7 +6,7 @@ // 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. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -29,6 +29,7 @@ #include "SMESHGUI.h" #include "SMESHGUI_Utils.h" +#include "SMESHGUI_MeshUtils.h" #include "SMESHGUI_VTKUtils.h" #include @@ -63,6 +64,7 @@ #include #include +#include // IDL includes #include @@ -107,6 +109,7 @@ SMESHGUI_DuplicateNodesDlg::SMESHGUI_DuplicateNodesDlg( SMESHGUI* theModule ) SUIT_ResourceMgr* aResMgr = SMESH::GetResourceMgr( mySMESHGUI ); QPixmap iconWithoutElem (aResMgr->loadPixmap("SMESH", tr("ICON_SMESH_DUPLICATE_NODES"))); QPixmap iconWithElem (aResMgr->loadPixmap("SMESH", tr("ICON_SMESH_DUPLICATE_NODES_WITH_ELEM"))); + QPixmap iconElemOnly (aResMgr->loadPixmap("SMESH", tr("ICON_SMESH_DUPLICATE_ELEM_ONLY"))); QPixmap iconSelect (aResMgr->loadPixmap("SMESH", tr("ICON_SELECT"))); // Main layout @@ -125,11 +128,15 @@ SMESHGUI_DuplicateNodesDlg::SMESHGUI_DuplicateNodesDlg( SMESHGUI* theModule ) aRadioButton1->setIcon(iconWithoutElem); QRadioButton* aRadioButton2 = new QRadioButton(aConstructorsBox); aRadioButton2->setIcon(iconWithElem); + QRadioButton* aRadioButton3 = new QRadioButton(aConstructorsBox); + aRadioButton3->setIcon(iconElemOnly); aConstructorsBoxLayout->addWidget(aRadioButton1); aConstructorsBoxLayout->addWidget(aRadioButton2); + aConstructorsBoxLayout->addWidget(aRadioButton3); myGroupConstructors->addButton(aRadioButton1, 0); myGroupConstructors->addButton(aRadioButton2, 1); + myGroupConstructors->addButton(aRadioButton3, 2); // Arguments myGroupArguments = new QGroupBox(this); @@ -200,6 +207,9 @@ SMESHGUI_DuplicateNodesDlg::SMESHGUI_DuplicateNodesDlg( SMESHGUI* theModule ) aMainLayout->addWidget(myGroupArguments); aMainLayout->addWidget(aGroupButtons); + myCheckBoxNewElemGroup->setChecked(true); + myCheckBoxNewNodeGroup->setChecked(true); + // Initialize the dialog Init(); @@ -237,8 +247,6 @@ SMESHGUI_DuplicateNodesDlg::~SMESHGUI_DuplicateNodesDlg() void SMESHGUI_DuplicateNodesDlg::Init() { mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myCheckBoxNewElemGroup->setChecked(true); - myCheckBoxNewNodeGroup->setChecked(true); // Set initial parameters myBusy = false; @@ -294,6 +302,9 @@ void SMESHGUI_DuplicateNodesDlg::onConstructorsClicked (int constructorId) myCheckBoxNewNodeGroup->show(); // Hide the third field + myTextLabel2->show(); + mySelectButton2->show(); + myLineEdit2->show(); myTextLabel3->hide(); mySelectButton3->hide(); myLineEdit3->hide(); @@ -312,10 +323,32 @@ void SMESHGUI_DuplicateNodesDlg::onConstructorsClicked (int constructorId) myCheckBoxNewNodeGroup->show(); // Show the third field + myTextLabel2->show(); + mySelectButton2->show(); + myLineEdit2->show(); myTextLabel3->show(); mySelectButton3->show(); myLineEdit3->show(); + break; + } + case 2: + { + // Set text to the group of arguments and to all the labels + myGroupArguments->setTitle(tr("DUPLICATION_ONLY_ELEMS")); + myTextLabel1->setText(tr("GROUP_ELEMS_TO_DUPLICATE")); + + myCheckBoxNewElemGroup->show(); + myCheckBoxNewNodeGroup->hide(); + + // Hide the second and the third field + myTextLabel2->hide(); + mySelectButton2->hide(); + myLineEdit2->hide(); + myTextLabel3->hide(); + mySelectButton3->hide(); + myLineEdit3->hide(); + break; } } @@ -336,17 +369,20 @@ bool SMESHGUI_DuplicateNodesDlg::onApply() bool toCreateElemGroup = myCheckBoxNewElemGroup->isChecked(); bool toCreateNodeGroup = myCheckBoxNewNodeGroup->isChecked(); - int operationMode = myGroupConstructors->checkedId(); + int operationMode = myGroupConstructors->checkedId(); // Apply changes bool result = false; SUIT_OverrideCursor aWaitCursor; + QStringList anEntryList; try { SMESH::SMESH_Mesh_var aMesh = myGroups1[0]->GetMesh(); SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); - if ( operationMode == 0 ) { + switch ( operationMode ) { + case 0: + { SMESH::ListOfGroups_var g1 = new SMESH::ListOfGroups(); g1->length( myGroups1.count() ); for ( int i = 0; i < myGroups1.count(); i++ ) @@ -364,8 +400,10 @@ bool SMESHGUI_DuplicateNodesDlg::onApply() else { result = aMeshEditor->DoubleNodeGroups( g1.in(), g2.in() ); } + break; } - else { + case 1: + { SMESH::ListOfGroups_var g1 = new SMESH::ListOfGroups(); g1->length( myGroups1.count() ); for ( int i = 0; i < myGroups1.count(); i++ ) @@ -388,6 +426,31 @@ bool SMESHGUI_DuplicateNodesDlg::onApply() else { result = aMeshEditor->DoubleNodeElemGroups( g1.in(), g2.in(), g3.in() ); } + break; + } + case 2: + { + result = true; + QString groupName; + if ( toCreateElemGroup ) + groupName = SMESH::UniqueName("DoubleElements"); + for ( int i = 0; i < myGroups1.count(); i++ ) + { + SMESH::SMESH_Group_var group = + aMeshEditor->DoubleElements( myGroups1[i], groupName.toLatin1().data() ); + if ( group->_is_nil() ) + { + if ( toCreateElemGroup ) + result = false; + } + else + { + if ( _PTR(SObject) so = SMESH::FindSObject( group )) + anEntryList.append( so->GetID().c_str() ); + } + } + break; + } } } catch (const SALOME::SALOME_Exception& S_ex) { @@ -396,7 +459,7 @@ bool SMESHGUI_DuplicateNodesDlg::onApply() catch ( const std::exception& exc ) { INFOS( "Follow exception was cought:\n\t" << exc.what() ); } - catch (...){ + catch (...) { INFOS( "Unknown exception was cought !!!" ); } @@ -413,9 +476,14 @@ bool SMESHGUI_DuplicateNodesDlg::onApply() SMESHGUI::Modified(); mySMESHGUI->updateObjBrowser(true); + if ( !anEntryList.isEmpty()) + if( LightApp_Application* anApp = + dynamic_cast( SUIT_Session::session()->activeApplication() )) + anApp->browseObjects( anEntryList, true, false ); + // Reinitialize the dialog Init(); - + return true; } @@ -471,15 +539,20 @@ void SMESHGUI_DuplicateNodesDlg::onSelectionChanged() // check group of proper type is selected if ( ok ) { SMESH::ElementType aGroupType = aGroup->GetType(); - if ( operationMode == 0 ) { + switch ( operationMode ) { + case 0: ok = ( myCurrentLineEdit == myLineEdit1 && aGroupType == SMESH::NODE ) || ( myCurrentLineEdit == myLineEdit2 && aGroupType != SMESH::NODE ); - } - else { + break; + case 1: ok = ( myCurrentLineEdit == myLineEdit1 && ( aGroupType == SMESH::EDGE || aGroupType == SMESH::FACE ) ) || ( myCurrentLineEdit == myLineEdit2 && aGroupType == SMESH::NODE ) || ( myCurrentLineEdit == myLineEdit3 && aGroupType != SMESH::NODE ); + break; + case 2: + ok = ( aGroupType != SMESH::NODE ); + break; } } if ( ok ) aGroups << aGroup; @@ -533,7 +606,7 @@ void SMESHGUI_DuplicateNodesDlg::onEditCurrentArgument() /*! \brief Check if the input data is valid. - \return \c true id the data is valid + \return \c true if the data is valid */ bool SMESHGUI_DuplicateNodesDlg::isValid() {