-// Copyright (C) 2007-2012 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
// 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
#define SPACING 6
#define MARGIN 11
-//To disable automatic genericobj management, the following line should be commented.
-//Otherwise, it should be uncommented. Refer to KERNEL_SRC/src/SALOMEDSImpl/SALOMEDSImpl_AttributeIOR.cxx
-#define WITHGENERICOBJ
+enum { NEW_MESH_ID, APPEND_TO_ID };
//=================================================================================
// name : SMESHGUI_BuildCompoundDlg
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);
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" );
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);
/***************************************************************/
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
}
{
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()));
- connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
+ connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
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)));
connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
- connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
+ 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();
}
//=================================================================================
QString aName = "";
// collect all object names of SMESH component
- SalomeApp_Study* appStudy =
- dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
- if ( !appStudy ) return aName;
- _PTR(Study) aStudy = appStudy->studyDS();
+ _PTR(Study) aStudy = SMESH::getStudy();
std::set<std::string> aSet;
_PTR(SComponent) aMeshCompo (aStudy->FindComponent("SMESH"));
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;
//=================================================================================
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;
+
+ int nbMeshes = myMeshArray->length() + ( !myMeshToAppendTo->_is_nil() );
- if (!myMesh->_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();
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();
+ }
}// end IPAL21468
if( LightApp_Application* anApp =
SMESHGUI::Modified();
-#ifdef WITHGENERICOBJ
- // obj has been published in study. Its refcount has been incremented.
- // It is safe to decrement its refcount
- // so that it will be destroyed when the entry in study will be removed
- if (!CORBA::is_nil(aCompoundMesh))
- aCompoundMesh->UnRegister();
-#endif
-
return true;
}
return false;
{
setIsApplyAndClose( true );
if (ClickOnApply())
- ClickOnCancel();
+ reject();
}
//=================================================================================
-// function : ClickOnCancel()
+// function : reject()
// purpose :
//=================================================================================
-void SMESHGUI_BuildCompoundDlg::ClickOnCancel()
+void SMESHGUI_BuildCompoundDlg::reject()
{
//mySelectionMgr->clearSelected();
mySelectionMgr->clearFilters();
disconnect(mySelectionMgr, 0, this, 0);
mySMESHGUI->ResetState();
- reject();
+ QDialog::reject();
}
//=================================================================================
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<SMESH::SMESH_Mesh>( aList.First() );
+ }
+ else
+ {
+ myMeshArray->length( nbSel );
+ for ( int i = 0; !aList.IsEmpty(); i++ ) {
+ myMeshArray[i] = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(aList.First());
aList.RemoveFirst();
- myMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(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 );
}
//=================================================================================
{
if (GroupConstructors->isEnabled()) {
GroupConstructors->setEnabled(false);
- GroupName->setEnabled(false);
+ GroupResult->setEnabled(false);
GroupArgs->setEnabled(false);
GroupButtons->setEnabled(false);
mySMESHGUI->ResetState();
/* 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);
ActivateThisDialog();
}
-//=================================================================================
-// function : closeEvent()
-// purpose :
-//=================================================================================
-void SMESHGUI_BuildCompoundDlg::closeEvent( QCloseEvent* )
-{
- /* same than click on cancel button */
- ClickOnCancel();
-}
-
-//=======================================================================
-//function : hideEvent
-//purpose : caused by ESC key
-//=======================================================================
-void SMESHGUI_BuildCompoundDlg::hideEvent( QHideEvent* )
-{
- if (!isMinimized())
- ClickOnCancel();
-}
-
-
//=================================================================================
// function : keyPressEvent()
// purpose :
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 :