X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_BuildCompoundDlg.cxx;h=5130f4adb7398c668c450dd476bd4cd57d211b68;hp=5cd384f153c1d0f67eba82b137e9614e33923793;hb=e85e13ee2a8e2484050471ff8e4dea298abe481a;hpb=9d134b21b1ed187851322a6b5feef3bee83b6583 diff --git a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx index 5cd384f15..5130f4adb 100644 --- a/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2020 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 @@ -65,6 +65,8 @@ #define SPACING 6 #define MARGIN 11 +enum { NEW_MESH_ID, APPEND_TO_ID }; + //================================================================================= // name : SMESHGUI_BuildCompoundDlg // Purpose : @@ -103,16 +105,28 @@ SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule ) ButtonGroup->addButton(Constructor1, 0); /***************************************************************/ - GroupName = new QGroupBox(tr("RESULT_NAME"), this); - QHBoxLayout* GroupNameLayout = new QHBoxLayout(GroupName); - GroupNameLayout->setSpacing(SPACING); - GroupNameLayout->setMargin(MARGIN); - - TextLabelName = new QLabel(tr("SMESH_NAME"), GroupName); - LineEditName = new QLineEdit(GroupName); - - GroupNameLayout->addWidget(TextLabelName); - GroupNameLayout->addWidget(LineEditName); + GroupResult = new QGroupBox(tr("RESULT_NAME"), this); + QGridLayout* GroupResultLayout = new QGridLayout(GroupResult); + GroupResultLayout->setSpacing(SPACING); + GroupResultLayout->setMargin(MARGIN); + + QRadioButton* newMeshRadioBtn = new QRadioButton( tr("NEW_MESH_NAME"), GroupResult ); + QRadioButton* appendToRadioBtn = new QRadioButton( tr("MESH_APPEND_TO"), GroupResult ); + LineEditNewName = new QLineEdit(GroupResult); + LineEditAppendTo = new QLineEdit(GroupResult); + SelectButtonAppendTo = new QPushButton(GroupResult); + SelectButtonAppendTo->setIcon(image1); + SelectButtonAppendTo->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); + ResultButtonGroup = new QButtonGroup( GroupResult ); + ResultButtonGroup->addButton( newMeshRadioBtn, NEW_MESH_ID ); + ResultButtonGroup->addButton( appendToRadioBtn, APPEND_TO_ID ); + newMeshRadioBtn->setChecked( true ); + + GroupResultLayout->addWidget( newMeshRadioBtn, 0, 0, 1, 2 ); + GroupResultLayout->addWidget( LineEditNewName, 0, 2 ); + GroupResultLayout->addWidget( appendToRadioBtn, 1, 0 ); + GroupResultLayout->addWidget( SelectButtonAppendTo, 1, 1 ); + GroupResultLayout->addWidget( LineEditAppendTo, 1, 2 ); /***************************************************************/ GroupArgs = new QGroupBox(tr("SMESH_ARGUMENTS"), this); @@ -135,7 +149,7 @@ SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule ) CheckBoxMerge = new QCheckBox(tr("MERGE_NODES_AND_ELEMENTS"), GroupArgs); TextLabelTol = new QLabel(tr("SMESH_TOLERANCE"), GroupArgs); - TextLabelTol->setAlignment(Qt::AlignCenter); + //TextLabelTol->setAlignment(Qt::AlignCenter); SpinBoxTol = new SMESHGUI_SpinBox(GroupArgs); SpinBoxTol->RangeStepAndValidator(0.0, COORD_MAX, 0.00001, "len_tol_precision" ); @@ -146,8 +160,8 @@ SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule ) GroupArgsLayout->addWidget(ComboBoxUnion, 1, 3); GroupArgsLayout->addWidget(CheckBoxCommon, 2, 0, 1, 4); GroupArgsLayout->addWidget(CheckBoxMerge, 3, 0, 1, 4); - GroupArgsLayout->addWidget(TextLabelTol, 4, 0, 1, 2); - GroupArgsLayout->addWidget(SpinBoxTol, 4, 2, 1, 2); + GroupArgsLayout->addWidget(TextLabelTol, 4, 0); + GroupArgsLayout->addWidget(SpinBoxTol, 4, 1, 1, 3); /***************************************************************/ GroupButtons = new QGroupBox(this); @@ -175,11 +189,11 @@ SMESHGUI_BuildCompoundDlg::SMESHGUI_BuildCompoundDlg( SMESHGUI* theModule ) /***************************************************************/ aTopLayout->addWidget(GroupConstructors); - aTopLayout->addWidget(GroupName); + aTopLayout->addWidget(GroupResult); aTopLayout->addWidget(GroupArgs); aTopLayout->addWidget(GroupButtons); - myHelpFileName = "building_compounds_page.html"; + myHelpFileName = "building_compounds.html"; Init(); // Initialisations } @@ -200,11 +214,11 @@ void SMESHGUI_BuildCompoundDlg::Init() { mySMESHGUI->SetActiveDialogBox((QDialog*)this); - myMesh = SMESH::SMESH_Mesh::_nil(); + myMeshToAppendTo = SMESH::SMESH_Mesh::_nil(); + myMeshArray = new SMESH::ListOfIDSources(); - myMeshFilter = new SMESH_TypeFilter (SMESH::MESH); - - myMeshArray = new SMESH::mesh_array(); + myMeshFilter = new SMESH_TypeFilter (SMESH::IDSOURCE); + myAppendToFilter = new SMESH_TypeFilter (SMESH::MESH); // signals and slots connections connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); @@ -212,7 +226,10 @@ void SMESHGUI_BuildCompoundDlg::Init() connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); - connect(SelectButton, SIGNAL(clicked()), this, SLOT(SelectionIntoArgument())); + connect(ResultButtonGroup, SIGNAL(buttonClicked(int)), this, SLOT(onResultTypeChange(int))); + + connect(SelectButtonAppendTo, SIGNAL(clicked()), this, SLOT(onSelectionButton())); + connect(SelectButton, SIGNAL(clicked()), this, SLOT(onSelectionButton())); connect(CheckBoxMerge, SIGNAL(toggled(bool)), this, SLOT(onSelectMerge(bool))); @@ -221,24 +238,22 @@ void SMESHGUI_BuildCompoundDlg::Init() connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(reject())); - LineEditName->setText(GetDefaultName(tr("COMPOUND_MESH"))); - LineEditMeshes->setFocus(); + LineEditNewName->setText(GetDefaultName(tr("COMPOUND_MESH"))); ComboBoxUnion->addItem(tr("UNITE")); ComboBoxUnion->addItem(tr("RENAME")); ComboBoxUnion->setCurrentIndex(0); - CheckBoxMerge->setChecked(false); + CheckBoxMerge->setChecked(true); TextLabelTol->setEnabled(CheckBoxMerge->isChecked()); SpinBoxTol->SetValue(1e-05); SpinBoxTol->setEnabled(CheckBoxMerge->isChecked()); - mySelectionMgr->clearFilters(); - mySelectionMgr->installFilter(myMeshFilter); + onResultTypeChange( ResultButtonGroup->checkedId() ); - SelectionIntoArgument(); + onSelectionButton(); } //================================================================================= @@ -250,10 +265,7 @@ QString SMESHGUI_BuildCompoundDlg::GetDefaultName(const QString& theOperation) QString aName = ""; // collect all object names of SMESH component - SalomeApp_Study* appStudy = - dynamic_cast( SUIT_Session::session()->activeApplication()->activeStudy() ); - if ( !appStudy ) return aName; - _PTR(Study) aStudy = appStudy->studyDS(); + _PTR(Study) aStudy = SMESH::getStudy(); std::set aSet; _PTR(SComponent) aMeshCompo (aStudy->FindComponent("SMESH")); @@ -271,7 +283,7 @@ QString SMESHGUI_BuildCompoundDlg::GetDefaultName(const QString& theOperation) bool isUnique = false; while (!isUnique) { aName = theOperation + "_" + QString::number(++aNumber); - isUnique = (aSet.count(aName.toLatin1().data()) == 0); + isUnique = (aSet.count(aName.toUtf8().data()) == 0); } return aName; @@ -283,41 +295,48 @@ QString SMESHGUI_BuildCompoundDlg::GetDefaultName(const QString& theOperation) //================================================================================= bool SMESHGUI_BuildCompoundDlg::ClickOnApply() { - if (mySMESHGUI->isActiveStudyLocked()) + if (SMESHGUI::isStudyLocked()) return false; if (!isValid()) return false; - SMESH::SMESH_Mesh_var aCompoundMesh; + SUIT_OverrideCursor aWaitCursor; + + SMESH::SMESH_Mesh_var aMesh; - if (!myMesh->_is_nil()) + int nbMeshes = myMeshArray->length() + ( !myMeshToAppendTo->_is_nil() ); + + if ( nbMeshes > 1 ) { QStringList aParameters; aParameters << (CheckBoxMerge->isChecked() ? SpinBoxTol->text() : QString(" ")); QStringList anEntryList; try { - SUIT_OverrideCursor aWaitCursor; - myMeshArray[0]->SetParameters( aParameters.join(":").toLatin1().constData() ); + aMesh = myMeshArray[0]->GetMesh(); + aMesh->SetParameters( aParameters.join(":").toUtf8().constData() ); SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); // concatenate meshes if(CheckBoxCommon->isChecked()) - aCompoundMesh = aSMESHGen->ConcatenateWithGroups(myMeshArray, - !(ComboBoxUnion->currentIndex()), - CheckBoxMerge->isChecked(), - SpinBoxTol->GetValue()); + aMesh = aSMESHGen->ConcatenateWithGroups(myMeshArray, + !(ComboBoxUnion->currentIndex()), + CheckBoxMerge->isChecked(), + SpinBoxTol->GetValue(), + myMeshToAppendTo); else - aCompoundMesh = aSMESHGen->Concatenate(myMeshArray, - !(ComboBoxUnion->currentIndex()), - CheckBoxMerge->isChecked(), - SpinBoxTol->GetValue()); + aMesh = aSMESHGen->Concatenate(myMeshArray, + !(ComboBoxUnion->currentIndex()), + CheckBoxMerge->isChecked(), + SpinBoxTol->GetValue(), + myMeshToAppendTo); - _PTR(SObject) aSO = SMESH::FindSObject( aCompoundMesh ); + _PTR(SObject) aSO = SMESH::FindSObject( aMesh ); if( aSO ) { - SMESH::SetName( aSO, LineEditName->text() ); + if ( myMeshToAppendTo->_is_nil() ) + SMESH::SetName( aSO, LineEditNewName->text() ); anEntryList.append( aSO->GetID().c_str() ); } mySMESHGUI->updateObjBrowser(); @@ -325,15 +344,15 @@ bool SMESHGUI_BuildCompoundDlg::ClickOnApply() return false; } - LineEditName->setText(GetDefaultName(tr("COMPOUND_MESH"))); + LineEditNewName->setText(GetDefaultName(tr("COMPOUND_MESH"))); // IPAL21468 Compound is hidden after creation. if ( SMESHGUI::automaticUpdate() ) { mySelectionMgr->clearSelected(); SMESH::UpdateView(); - _PTR(SObject) aSO = SMESH::FindSObject(aCompoundMesh.in()); - if ( SMESH_Actor* anActor = SMESH::CreateActor(aSO->GetStudy(), aSO->GetID().c_str()) ) { + _PTR(SObject) aSO = SMESH::FindSObject(aMesh.in()); + if ( SMESH_Actor* anActor = SMESH::CreateActor( aSO->GetID().c_str()) ) { SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor); SMESH::UpdateView(); } @@ -402,30 +421,41 @@ void SMESHGUI_BuildCompoundDlg::SelectionIntoArgument() return; QString aString = ""; - SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); int nbSel = SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - if (nbSel != 0) { - myMeshArray->length(nbSel); - for (int i = 0; nbSel != 0; i++, nbSel--) { - Handle(SALOME_InteractiveObject) IO = aList.First(); + bool toAppend = ( CurrentLineEdit == LineEditAppendTo ); + bool isOk = toAppend ? ( nbSel == 1 ) : ( nbSel > 0 ); + if ( !isOk ) + aString = ""; + + if ( toAppend ) + { + myMeshToAppendTo = SMESH::SMESH_Mesh::_nil(); + if ( isOk ) + myMeshToAppendTo = SMESH::IObjectToInterface( aList.First() ); + } + else + { + myMeshArray->length( nbSel ); + for ( int i = 0; !aList.IsEmpty(); i++ ) { + myMeshArray[i] = SMESH::IObjectToInterface(aList.First()); aList.RemoveFirst(); - myMesh = SMESH::IObjectToInterface(IO); - myMeshArray[i] = myMesh; } } - else { - myMesh = SMESH::SMESH_Mesh::_nil(); - aString = ""; - } - - LineEditMeshes->setText(aString); - - bool isEnabled = (!myMesh->_is_nil()); - buttonOk->setEnabled(isEnabled); - buttonApply->setEnabled(isEnabled); + CurrentLineEdit->setText(aString); + + bool isEnabled; + if ( ResultButtonGroup->checkedId() == NEW_MESH_ID ) + isEnabled = ( myMeshArray->length() > 1 ); + else + isEnabled = ( myMeshArray->length() > 0 && + !myMeshToAppendTo->_is_nil() && + LineEditAppendTo->text() != LineEditMeshes->text() ); + buttonOk ->setEnabled( isEnabled ); + buttonApply->setEnabled( isEnabled ); } //================================================================================= @@ -436,7 +466,7 @@ void SMESHGUI_BuildCompoundDlg::DeactivateActiveDialog() { if (GroupConstructors->isEnabled()) { GroupConstructors->setEnabled(false); - GroupName->setEnabled(false); + GroupResult->setEnabled(false); GroupArgs->setEnabled(false); GroupButtons->setEnabled(false); mySMESHGUI->ResetState(); @@ -453,7 +483,7 @@ void SMESHGUI_BuildCompoundDlg::ActivateThisDialog() /* Emit a signal to deactivate the active dialog */ mySMESHGUI->EmitSignalDeactivateDialog(); GroupConstructors->setEnabled(true); - GroupName->setEnabled(true); + GroupResult->setEnabled(true); GroupArgs->setEnabled(true); GroupButtons->setEnabled(true); @@ -501,6 +531,56 @@ void SMESHGUI_BuildCompoundDlg::onSelectMerge(bool toMerge) SpinBoxTol->SetValue(1e-05); } +//======================================================================= +//function : onResultTypeChange +//purpose : +//======================================================================= + +void SMESHGUI_BuildCompoundDlg::onResultTypeChange( int buttonID ) +{ + LineEditNewName ->setEnabled( buttonID == NEW_MESH_ID ); + SelectButtonAppendTo->setEnabled( buttonID == APPEND_TO_ID ); + LineEditAppendTo ->setEnabled( buttonID == APPEND_TO_ID ); + + if ( CurrentLineEdit == LineEditAppendTo && buttonID == NEW_MESH_ID ) + onSelectionButton(); // to select into myMeshArray + + if ( buttonID == NEW_MESH_ID ) + { + myMeshToAppendTo = SMESH::SMESH_Mesh::_nil(); + LineEditAppendTo->setText(""); + } + else + { + // activate selection of myMeshToAppendTo + SelectButtonAppendTo->click(); + LineEditAppendTo->setFocus(); + } +} + +//======================================================================= +//function : onSelectionButton +//purpose : +//======================================================================= + +void SMESHGUI_BuildCompoundDlg::onSelectionButton() +{ + mySelectionMgr->clearFilters(); + if ( sender() == SelectButtonAppendTo ) + { + mySelectionMgr->installFilter( myAppendToFilter ); + CurrentLineEdit = LineEditAppendTo; + } + else + { + mySelectionMgr->installFilter( myMeshFilter ); + CurrentLineEdit = LineEditMeshes; + } + CurrentLineEdit->setFocus(); + + SelectionIntoArgument(); +} + //================================================================================= // function : isValid // purpose :