From: eap Date: Tue, 28 May 2013 16:47:51 +0000 (+0000) Subject: 0022108: EDF 2547 SMESH: Duplicate elements only X-Git-Tag: V7_3_0a1~387 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=4effbfc0dc23372e80d548765424ccbf2fc886cc;p=modules%2Fsmesh.git 0022108: EDF 2547 SMESH: Duplicate elements only --- diff --git a/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx b/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx index 27c1c9d66..6bd33e73c 100644 --- a/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx @@ -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; @@ -316,6 +324,25 @@ void SMESHGUI_DuplicateNodesDlg::onConstructorsClicked (int constructorId) 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 +363,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 +394,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 +420,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 +453,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 +470,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 +533,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 +600,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() { diff --git a/src/SMESHGUI/SMESH_images.ts b/src/SMESHGUI/SMESH_images.ts index 17eafcde3..161dfc900 100644 --- a/src/SMESHGUI/SMESH_images.ts +++ b/src/SMESHGUI/SMESH_images.ts @@ -435,6 +435,10 @@ ICON_SMESH_DUPLICATE_NODES_WITH_ELEM mesh_duplicate_nodes_with_elem.png + + ICON_SMESH_DUPLICATE_ELEM_ONLY + mesh_duplicate_elem_only.png + ICON_SMESH_TREE_ALGO mesh_tree_algo.png diff --git a/src/SMESHGUI/SMESH_msg_en.ts b/src/SMESHGUI/SMESH_msg_en.ts index c10c3bad0..0700b59a9 100644 --- a/src/SMESHGUI/SMESH_msg_en.ts +++ b/src/SMESHGUI/SMESH_msg_en.ts @@ -946,7 +946,7 @@ MEN_DUPLICATE_NODES - Duplicate Nodes + Duplicate Nodes or/and Elements MEN_TRANSF @@ -2555,7 +2555,7 @@ Check algorithm documentation for supported geometry SMESH_DUPLICATE_TITLE - Duplicate Nodes + Duplicate Nodes and/or Elements SMESH_SCALE @@ -3283,7 +3283,7 @@ Please check preferences of Mesh module. STB_DUPLICATE_NODES - Duplicate Nodes + Duplicate Nodes or/and Elements STB_TRANSP @@ -3891,7 +3891,7 @@ Please check preferences of Mesh module. TOP_DUPLICATE_NODES - Duplicate Nodes + Duplicate Nodes or/and Elements TOP_TRANSP @@ -6463,7 +6463,7 @@ It is impossible to read point coordinates from file DUPLICATION_WITHOUT_ELEMS - Without duplication of border elements + Duplicate nodes only GROUP_NODES_TO_DUPLICATE @@ -6475,7 +6475,11 @@ It is impossible to read point coordinates from file DUPLICATION_WITH_ELEMS - With duplication of border elements + Duplicate nodes and border elements + + + DUPLICATION_ONLY_ELEMS + Duplicate elements only GROUP_ELEMS_TO_DUPLICATE