X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_RevolutionDlg.cxx;h=f6edc503fbbb4ad0f4b1171878485de2d49fdd41;hp=9b7be8bb4c9dae35b1c7d396078ab9209c5cbfa2;hb=aa67cc96d730566d202d1014d97b7f0b3a4d71f4;hpb=e4737e85f0da6d3f90fd08f6be1c2825195fe16f diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx index 9b7be8bb4..f6edc503f 100644 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx @@ -1,328 +1,362 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 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 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 -// -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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 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 +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// File : SMESHGUI_RevolutionDlg.cxx -// Author : Michael ZORIN -// Module : SMESH -// $Header: +// SMESH SMESHGUI : GUI for SMESH component +// File : SMESHGUI_RevolutionDlg.cxx +// Author : Michael ZORIN, Open CASCADE S.A.S. +// SMESH includes +// #include "SMESHGUI_RevolutionDlg.h" + #include "SMESHGUI.h" #include "SMESHGUI_SpinBox.h" #include "SMESHGUI_Utils.h" #include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_MeshUtils.h" #include "SMESHGUI_IdValidator.h" -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMDS_Mesh.hxx" - -#include "QAD_Application.h" -#include "QAD_Desktop.h" -#include "QAD_MessageBox.h" -#include "utilities.h" - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; +#include "SMESHGUI_MeshEditPreview.h" +#include "SMESHGUI_FilterDlg.h" + +#include +#include +#include +#include + +// SALOME GUI includes +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +// OCCT includes +#include + +// Qt includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// IDL includes +#include +#include CORBA_SERVER_HEADER(SMESH_Group) +#include CORBA_SERVER_HEADER(SMESH_MeshEditor) + +#define SPACING 6 +#define MARGIN 11 //================================================================================= // class : SMESHGUI_RevolutionDlg() -// purpose : +// purpose : //================================================================================= -SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( QWidget* parent, const char* name, SALOME_Selection* Sel, - bool modal, WFlags fl ) - : QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | - Qt::WDestructiveClose) +SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule ) + : QDialog( SMESH::GetDesktop( theModule ) ), + mySMESHGUI( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), + myVectorDefinition(NONE_SELECT), + myFilterDlg( 0 ), + mySelectedObject(SMESH::SMESH_IDSource::_nil()), + myActor(0) { - QPixmap image0(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_EDGE"))); - QPixmap image1(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_DLG_TRIANGLE"))); - QPixmap image2(QAD_Desktop::getResourceManager()->loadPixmap( "SMESH",tr("ICON_SELECT"))); - - if ( !name ) - setName( "SMESHGUI_RevolutionDlg" ); - resize( 303, 185 ); - setCaption( tr( "REVOLUTION_AROUND_AXIS" ) ); - setSizeGripEnabled( TRUE ); - SMESHGUI_RevolutionDlgLayout = new QGridLayout( this ); - SMESHGUI_RevolutionDlgLayout->setSpacing( 6 ); - SMESHGUI_RevolutionDlgLayout->setMargin( 11 ); + mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI )); - /***************************************************************/ - GroupConstructors = new QButtonGroup( this, "GroupConstructors" ); - GroupConstructors->setTitle( tr( "SMESH_REVOLUTION" ) ); - GroupConstructors->setExclusive( TRUE ); - GroupConstructors->setColumnLayout(0, Qt::Vertical ); - GroupConstructors->layout()->setSpacing( 0 ); - GroupConstructors->layout()->setMargin( 0 ); - GroupConstructorsLayout = new QGridLayout( GroupConstructors->layout() ); - GroupConstructorsLayout->setAlignment( Qt::AlignTop ); - GroupConstructorsLayout->setSpacing( 6 ); - GroupConstructorsLayout->setMargin( 11 ); - RadioButton1= new QRadioButton( GroupConstructors, "RadioButton1" ); - RadioButton1->setText( tr( "" ) ); - RadioButton1->setPixmap( image0 ); - GroupConstructorsLayout->addWidget( RadioButton1, 0, 0 ); - RadioButton2= new QRadioButton( GroupConstructors, "RadioButton2" ); - RadioButton2->setText( tr( "" ) ); - RadioButton2->setPixmap( image1 ); - GroupConstructorsLayout->addWidget( RadioButton2, 0, 2 ); - SMESHGUI_RevolutionDlgLayout->addWidget( GroupConstructors, 0, 0 ); + SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); + QPixmap image0 ( mgr->loadPixmap("SMESH", tr("ICON_DLG_EDGE"))); + QPixmap image1 ( mgr->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE"))); + QPixmap image2 ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); + + setModal(false); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowTitle(tr("REVOLUTION_AROUND_AXIS")); + setSizeGripEnabled(true); + QVBoxLayout* SMESHGUI_RevolutionDlgLayout = new QVBoxLayout(this); + SMESHGUI_RevolutionDlgLayout->setSpacing(SPACING); + SMESHGUI_RevolutionDlgLayout->setMargin(MARGIN); + /***************************************************************/ - GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setGeometry( QRect( 10, 10, 281, 48 ) ); - GroupButtons->setTitle( tr( "" ) ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - GroupButtonsLayout = new QGridLayout( GroupButtons->layout() ); - GroupButtonsLayout->setAlignment( Qt::AlignTop ); - GroupButtonsLayout->setSpacing( 6 ); - GroupButtonsLayout->setMargin( 11 ); - buttonCancel = new QPushButton( GroupButtons, "buttonCancel" ); - buttonCancel->setText( tr( "SMESH_BUT_CLOSE" ) ); - buttonCancel->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonCancel, 0, 3 ); - buttonApply = new QPushButton( GroupButtons, "buttonApply" ); - buttonApply->setText( tr( "SMESH_BUT_APPLY" ) ); - buttonApply->setAutoDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonApply, 0, 1 ); - QSpacerItem* spacer_9 = new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ); - GroupButtonsLayout->addItem( spacer_9, 0, 2 ); - buttonOk = new QPushButton( GroupButtons, "buttonOk" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - GroupButtonsLayout->addWidget( buttonOk, 0, 0 ); - SMESHGUI_RevolutionDlgLayout->addWidget( GroupButtons, 2, 0 ); + ConstructorsBox = new QGroupBox(tr("SMESH_REVOLUTION"), this); + GroupConstructors = new QButtonGroup(this); + QHBoxLayout* ConstructorsBoxLayout = new QHBoxLayout(ConstructorsBox); + ConstructorsBoxLayout->setSpacing(SPACING); + ConstructorsBoxLayout->setMargin(MARGIN); + + RadioButton1 = new QRadioButton(ConstructorsBox); + RadioButton1->setIcon(image0); + RadioButton2 = new QRadioButton(ConstructorsBox); + RadioButton2->setIcon(image1); + + ConstructorsBoxLayout->addWidget(RadioButton1); + ConstructorsBoxLayout->addWidget(RadioButton2); + GroupConstructors->addButton(RadioButton1, 0); + GroupConstructors->addButton(RadioButton2, 1); /***************************************************************/ - GroupArguments = new QGroupBox( this, "GroupArguments" ); - GroupArguments->setTitle( tr( "REVOLUTION_1D" ) ); - GroupArguments->setColumnLayout(0, Qt::Vertical ); - GroupArguments->layout()->setSpacing( 0 ); - GroupArguments->layout()->setMargin( 0 ); - GroupArgumentsLayout = new QGridLayout( GroupArguments->layout() ); - GroupArgumentsLayout->setAlignment( Qt::AlignTop ); - GroupArgumentsLayout->setSpacing( 6 ); - GroupArgumentsLayout->setMargin( 11 ); + GroupArguments = new QGroupBox(tr("REVOLUTION_1D"), this); + QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments); + GroupArgumentsLayout->setSpacing(SPACING); + GroupArgumentsLayout->setMargin(MARGIN); + + myIdValidator = new SMESHGUI_IdValidator(this); // Controls for elements selection - TextLabelElements = new QLabel( GroupArguments, "TextLabelElements" ); - TextLabelElements->setText( tr( "SMESH_ID_ELEMENTS" ) ); - TextLabelElements->setFixedWidth(74); - GroupArgumentsLayout->addWidget( TextLabelElements, 0, 0 ); + TextLabelElements = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments); - SelectElementsButton = new QPushButton( GroupArguments, "SelectElementsButton" ); - SelectElementsButton->setText( tr( "" ) ); - SelectElementsButton->setPixmap( image2 ); - SelectElementsButton->setToggleButton( FALSE ); - GroupArgumentsLayout->addWidget( SelectElementsButton, 0, 1 ); + SelectElementsButton = new QPushButton(GroupArguments); + SelectElementsButton->setIcon(image2); - LineEditElements = new QLineEdit( GroupArguments, "LineEditElements" ); - LineEditElements->setValidator( new SMESHGUI_IdValidator( this, "validator" )); - GroupArgumentsLayout->addWidget( LineEditElements, 0, 2 ); + LineEditElements = new QLineEdit(GroupArguments); + LineEditElements->setValidator(myIdValidator); + myFilterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments ); + connect(myFilterBtn, SIGNAL(clicked()), this, SLOT(setFilters())); // Control for the whole mesh selection - CheckBoxMesh = new QCheckBox( GroupArguments, "CheckBoxMesh" ); - CheckBoxMesh->setText( tr( "SMESH_SELECT_WHOLE_MESH" ) ); - GroupArgumentsLayout->addMultiCellWidget( CheckBoxMesh, 1, 1, 0, 3 ); + CheckBoxMesh = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments); // Controls for axis defining - GroupAxis = new QGroupBox( GroupArguments, "GroupAxis" ); - GroupAxis->setTitle( tr( "SMESH_AXIS" ) ); - GroupAxis->setColumnLayout(0, Qt::Vertical ); - GroupAxis->layout()->setSpacing( 0 ); - GroupAxis->layout()->setMargin( 0 ); - QGridLayout* GroupAxisLayout = new QGridLayout( GroupAxis->layout() ); - GroupAxisLayout->setAlignment( Qt::AlignTop ); - GroupAxisLayout->setSpacing( 6 ); - GroupAxisLayout->setMargin( 11 ); - - TextLabelPoint = new QLabel( GroupAxis, "TextLabelPoint" ); - TextLabelPoint->setText( tr( "SMESH_POINT" ) ); - GroupAxisLayout->addWidget( TextLabelPoint, 0, 0 ); + GroupAxis = new QGroupBox(tr("SMESH_AXIS"), GroupArguments); + QGridLayout* GroupAxisLayout = new QGridLayout(GroupAxis); + GroupAxisLayout->setSpacing(SPACING); + GroupAxisLayout->setMargin(MARGIN); + + TextLabelPoint = new QLabel(tr("SMESH_POINT"), GroupAxis); + SelectPointButton = new QPushButton(GroupAxis); + SelectPointButton->setIcon(image2); + + TextLabelX = new QLabel(tr("SMESH_X"), GroupAxis); + SpinBox_X = new SMESHGUI_SpinBox(GroupAxis); + + TextLabelY = new QLabel(tr("SMESH_Y"), GroupAxis); + SpinBox_Y = new SMESHGUI_SpinBox(GroupAxis); + + TextLabelZ = new QLabel(tr("SMESH_Z"), GroupAxis); + SpinBox_Z = new SMESHGUI_SpinBox(GroupAxis); + + TextLabelVector = new QLabel(tr("SMESH_VECTOR"), GroupAxis); + SelectVectorButton = new QPushButton(GroupAxis); + SelectVectorButton->setIcon(image2); + + TextLabelDX = new QLabel(tr("SMESH_DX"), GroupAxis); + SpinBox_DX = new SMESHGUI_SpinBox(GroupAxis); + + TextLabelDY = new QLabel(tr("SMESH_DY"), GroupAxis); + SpinBox_DY = new SMESHGUI_SpinBox(GroupAxis); + + TextLabelDZ = new QLabel(tr("SMESH_DZ"), GroupAxis); + SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis); + + GroupAxisLayout->addWidget(TextLabelPoint, 0, 0); + GroupAxisLayout->addWidget(SelectPointButton, 0, 1); + GroupAxisLayout->addWidget(TextLabelX, 0, 2); + GroupAxisLayout->addWidget(SpinBox_X, 0, 3); + GroupAxisLayout->addWidget(TextLabelY, 0, 4); + GroupAxisLayout->addWidget(SpinBox_Y, 0, 5); + GroupAxisLayout->addWidget(TextLabelZ, 0, 6); + GroupAxisLayout->addWidget(SpinBox_Z, 0, 7); + GroupAxisLayout->addWidget(TextLabelVector, 1, 0); + GroupAxisLayout->addWidget(SelectVectorButton, 1, 1); + GroupAxisLayout->addWidget(TextLabelDX, 1, 2); + GroupAxisLayout->addWidget(SpinBox_DX, 1, 3); + GroupAxisLayout->addWidget(TextLabelDY, 1, 4); + GroupAxisLayout->addWidget(SpinBox_DY, 1, 5); + GroupAxisLayout->addWidget(TextLabelDZ, 1, 6); + GroupAxisLayout->addWidget(SpinBox_DZ, 1, 7); + + // Controls for angle defining & number of steps defining + GroupAngleBox = new QGroupBox(tr("SMESH_ANGLE"), GroupArguments); + GroupAngle = new QButtonGroup(GroupAngleBox); + QGridLayout* GroupAngleLayout = new QGridLayout(GroupAngleBox); + GroupAngleLayout->setSpacing(6); + GroupAngleLayout->setMargin(11); + + RadioButton3 = new QRadioButton(tr("ANGLE_BY_STEP"), GroupAngleBox); + RadioButton4 = new QRadioButton(tr("TOTAL_ANGLE"), GroupAngleBox); + GroupAngle->addButton(RadioButton3, 0); + GroupAngle->addButton(RadioButton4, 1); + + TextLabelAngle = new QLabel(tr("SMESH_ANGLE"), GroupAngleBox); + SpinBox_Angle = new SMESHGUI_SpinBox(GroupAngleBox); + + TextLabelNbSteps = new QLabel(tr("SMESH_NUMBEROFSTEPS"), GroupAngleBox); + SpinBox_NbSteps = new SalomeApp_IntSpinBox(GroupAngleBox); + + GroupAngleLayout->addWidget(RadioButton3, 0, 0); + GroupAngleLayout->addWidget(RadioButton4, 0, 1); + GroupAngleLayout->addWidget(TextLabelAngle, 1, 0); + GroupAngleLayout->addWidget(SpinBox_Angle, 1, 1); + GroupAngleLayout->addWidget(TextLabelNbSteps, 2, 0); + GroupAngleLayout->addWidget(SpinBox_NbSteps, 2, 1); - SelectPointButton = new QPushButton( GroupAxis, "SelectPointButton" ); - SelectPointButton->setPixmap( image2 ); - GroupAxisLayout->addWidget( SelectPointButton, 0, 1 ); - - TextLabelX = new QLabel( GroupAxis, "TextLabelX" ); - TextLabelX->setText( tr( "SMESH_X" ) ); - GroupAxisLayout->addWidget( TextLabelX, 0, 2 ); + // Controls for tolerance defining + TextLabelTolerance = new QLabel(tr("SMESH_TOLERANCE"), GroupArguments); + SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments); + + // Control for mesh preview + CheckBoxPreview = new QCheckBox(tr("PREVIEW"), GroupArguments); + + // CheckBox for groups generation + MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); + MakeGroupsCheck->setChecked(true); + + GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); + GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); + GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); + GroupArgumentsLayout->addWidget(myFilterBtn, 0, 3); + GroupArgumentsLayout->addWidget(CheckBoxMesh, 1, 0, 1, 4); + GroupArgumentsLayout->addWidget(GroupAxis, 2, 0, 1, 4); + GroupArgumentsLayout->addWidget(GroupAngleBox, 3, 0, 1, 4); + GroupArgumentsLayout->addWidget(TextLabelTolerance, 4, 0, 1, 2); + GroupArgumentsLayout->addWidget(SpinBox_Tolerance, 4, 2, 1, 2); + GroupArgumentsLayout->addWidget(CheckBoxPreview, 5, 0, 1, 4); + GroupArgumentsLayout->addWidget(MakeGroupsCheck, 6, 0, 1, 4); - SpinBox_X = new SMESHGUI_SpinBox( GroupAxis, "SpinBox_X"); - GroupAxisLayout->addWidget( SpinBox_X, 0, 3 ); + /***************************************************************/ + GroupButtons = new QGroupBox(this); + QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons); + GroupButtonsLayout->setSpacing(SPACING); + GroupButtonsLayout->setMargin(MARGIN); - TextLabelY = new QLabel( GroupAxis, "TextLabelY" ); - TextLabelY->setText( tr( "SMESH_Y" ) ); - GroupAxisLayout->addWidget( TextLabelY, 0, 4 ); - - SpinBox_Y = new SMESHGUI_SpinBox( GroupAxis, "SpinBox_Y"); - GroupAxisLayout->addWidget( SpinBox_Y, 0, 5 ); + buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons); + buttonOk->setAutoDefault(true); + buttonOk->setDefault(true); + buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons); + buttonApply->setAutoDefault(true); + buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons); + buttonCancel->setAutoDefault(true); + buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons); + buttonHelp->setAutoDefault(true); + + GroupButtonsLayout->addWidget(buttonOk); + GroupButtonsLayout->addSpacing(10); + GroupButtonsLayout->addWidget(buttonApply); + GroupButtonsLayout->addSpacing(10); + GroupButtonsLayout->addStretch(); + GroupButtonsLayout->addWidget(buttonCancel); + GroupButtonsLayout->addWidget(buttonHelp); - TextLabelZ = new QLabel( GroupAxis, "TextLabelZ" ); - TextLabelZ->setText( tr( "SMESH_Z" ) ); - GroupAxisLayout->addWidget( TextLabelZ, 0, 6 ); - - SpinBox_Z = new SMESHGUI_SpinBox( GroupAxis, "SpinBox_Z"); - GroupAxisLayout->addWidget( SpinBox_Z, 0, 7 ); + /***************************************************************/ + SMESHGUI_RevolutionDlgLayout->addWidget(ConstructorsBox); + SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments); + SMESHGUI_RevolutionDlgLayout->addWidget(GroupButtons); - TextLabelVector = new QLabel( GroupAxis, "TextLabelVector" ); - TextLabelVector->setText( tr( "SMESH_VECTOR" ) ); - GroupAxisLayout->addWidget( TextLabelVector, 1, 0 ); - - SelectVectorButton = new QPushButton( GroupAxis, "SelectVectorButton" ); - SelectVectorButton->setPixmap( image2 ); - GroupAxisLayout->addWidget( SelectVectorButton, 1, 1 ); - - TextLabelDX = new QLabel( GroupAxis, "TextLabelDX" ); - TextLabelDX->setText( tr( "SMESH_DX" ) ); - GroupAxisLayout->addWidget( TextLabelDX, 1, 2 ); + /* Initialisations */ + SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); + SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); - SpinBox_DX = new SMESHGUI_SpinBox( GroupAxis, "SpinBox_DX"); - GroupAxisLayout->addWidget( SpinBox_DX, 1, 3 ); - - TextLabelDY = new QLabel( GroupAxis, "TextLabelDY" ); - TextLabelDY->setText( tr( "SMESH_DY" ) ); - GroupAxisLayout->addWidget( TextLabelDY, 1, 4 ); + RadioButton3->setChecked(true); - SpinBox_DY = new SMESHGUI_SpinBox( GroupAxis, "SpinBox_DY"); - GroupAxisLayout->addWidget( SpinBox_DY, 1, 5 ); + SpinBox_Angle->RangeStepAndValidator(COORD_MIN, COORD_MAX, 5.0, "angle_precision"); - TextLabelDZ = new QLabel( GroupAxis, "TextLabelDZ" ); - TextLabelDZ->setText( tr( "SMESH_DZ" ) ); - GroupAxisLayout->addWidget( TextLabelDZ, 1, 6 ); - - SpinBox_DZ = new SMESHGUI_SpinBox( GroupAxis, "SpinBox_DZ"); - GroupAxisLayout->addWidget( SpinBox_DZ, 1, 7 ); + SpinBox_NbSteps->setRange(1, 999999); - GroupArgumentsLayout->addMultiCellWidget( GroupAxis, 2, 2, 0, 3 ); - - // Controls for angle defining - TextLabelAngle = new QLabel( GroupArguments, "TextLabelAngle" ); - TextLabelAngle->setText( tr( "SMESH_ANGLE" ) ); - GroupArgumentsLayout->addMultiCellWidget( TextLabelAngle, 3, 3, 0, 1 ); + SpinBox_Tolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.00001, "len_tol_precision"); - SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle"); - GroupArgumentsLayout->addWidget( SpinBox_Angle, 3, 2 ); - - // Controls for nb. steps defining - TextLabelNbSteps = new QLabel( GroupArguments, "TextLabelNbSteps" ); - TextLabelNbSteps->setText( tr( "SMESH_NUMBEROFSTEPS" ) ); - GroupArgumentsLayout->addMultiCellWidget( TextLabelNbSteps, 4, 4, 0, 1 ); + RadioButton1->setChecked(true); - SpinBox_NbSteps = new QSpinBox(GroupArguments, "SpinBox_NbSteps"); - GroupArgumentsLayout->addWidget( SpinBox_NbSteps, 4, 2 ); - - // Controls for tolerance defining - TextLabelTolerance = new QLabel( GroupArguments, "TextLabelTolerance" ); - TextLabelTolerance->setText( tr( "SMESH_TOLERANCE" ) ); - GroupArgumentsLayout->addMultiCellWidget( TextLabelTolerance, 5, 5, 0, 1 ); + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); - SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Tolerance"); - GroupArgumentsLayout->addWidget( SpinBox_Tolerance, 5, 2 ); + mySMESHGUI->SetActiveDialogBox((QDialog*)this); - SMESHGUI_RevolutionDlgLayout->addWidget( GroupArguments, 1, 0 ); - - /* Initialisations */ - SpinBox_X->RangeStepAndValidator( -999999.999, +999999.999, 10.0, 3 ); - SpinBox_Y->RangeStepAndValidator( -999999.999, +999999.999, 10.0, 3 ); - SpinBox_Z->RangeStepAndValidator( -999999.999, +999999.999, 10.0, 3 ); - SpinBox_DX->RangeStepAndValidator( -999999.999, +999999.999, 10.0, 3 ); - SpinBox_DY->RangeStepAndValidator( -999999.999, +999999.999, 10.0, 3 ); - SpinBox_DZ->RangeStepAndValidator( -999999.999, +999999.999, 10.0, 3 ); - - SpinBox_Angle->RangeStepAndValidator( -999999.999, +999999.999, 5.0, 3 ); - - QIntValidator* anIntValidator = new QIntValidator(SpinBox_NbSteps); - SpinBox_NbSteps->setValidator(anIntValidator); - SpinBox_NbSteps->setRange( 1, 999999 ); - - SpinBox_Tolerance->RangeStepAndValidator( 0.0, +999999.999, 0.1, 6 ); - - GroupArguments->show(); - RadioButton1->setChecked( TRUE ); - mySelection = Sel; - - mySMESHGUI = SMESHGUI::GetSMESHGUI() ; - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; - // Costruction of the logical filter - SMESH_ListOfFilter aListOfFilters; - Handle(SMESH_TypeFilter) aMeshOrSubMeshFilter = new SMESH_TypeFilter( MESHorSUBMESH ); - if ( !aMeshOrSubMeshFilter.IsNull() ) - aListOfFilters.Append( aMeshOrSubMeshFilter ); - Handle(SMESH_TypeFilter) aSmeshGroupFilter = new SMESH_TypeFilter( GROUP ); - if ( !aSmeshGroupFilter.IsNull() ) - aListOfFilters.Append( aSmeshGroupFilter ); - - myMeshOrSubMeshOrGroupFilter = new SMESH_LogicalFilter( aListOfFilters, SMESH_LogicalFilter::LO_OR ); - + SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); + SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP); + + QList aListOfFilters; + if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter); + if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter); + + myMeshOrSubMeshOrGroupFilter = + new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR); + + myHelpFileName = "revolution_page.html"; + Init(); - /* signals and slots connections */ - connect( buttonOk, SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( ClickOnCancel() ) ) ; - connect( buttonApply, SIGNAL( clicked() ), this, SLOT(ClickOnApply() ) ); - connect( GroupConstructors, SIGNAL(clicked(int) ), SLOT( ConstructorsClicked(int) ) ); - - connect( SelectElementsButton, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ; - connect( SelectPointButton, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ; - connect( SelectVectorButton, SIGNAL (clicked() ), this, SLOT( SetEditCurrentArgument() ) ) ; - connect( SpinBox_DX, SIGNAL( valueChanged( double )), this, SLOT(onVectorChanged() ) ); - connect( SpinBox_DY, SIGNAL( valueChanged( double )), this, SLOT(onVectorChanged() ) ); - connect( SpinBox_DZ, SIGNAL( valueChanged( double )), this, SLOT(onVectorChanged() ) ); + /*Create menu to vector selection*/ + SelectVectorMenu = new QMenu(this); + myMenuActions[SelectVectorMenu->addAction( tr( "MEN_POINT_SELECT" ) )] = POINT_SELECT; + myMenuActions[SelectVectorMenu->addAction( tr( "MEN_FACE_SELECT" ) )] = FACE_SELECT; + connect( SelectVectorMenu, SIGNAL( triggered( QAction* ) ), SLOT( onSelectVectorMenu( QAction* ) ) ); - connect( mySMESHGUI, SIGNAL ( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ) ; - connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + /* signals and slots connections */ + connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel())); + connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); + connect(GroupConstructors, SIGNAL(buttonClicked(int)), SLOT(ConstructorsClicked(int))); + + connect(SelectElementsButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(SelectPointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); + connect(SelectVectorButton, SIGNAL(clicked()), this, SLOT(onSelectVectorButton())); + + connect(SpinBox_X, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_Y, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_Z, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + + connect(SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); + connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); + connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged())); + + connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog())); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); /* to close dialog if study change */ - connect( mySMESHGUI, SIGNAL ( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ) ; - connect( LineEditElements, SIGNAL( textChanged( const QString& )), - SLOT( onTextChange( const QString& ))); - connect( CheckBoxMesh, SIGNAL( toggled( bool )), - SLOT( onSelectMesh( bool ))); - - /* Move widget on the botton right corner of main widget */ - int x, y ; - mySMESHGUI->DefineDlgPosition( this, x, y ) ; - this->move( x, y ) ; - this->show() ; /* displays Dialog */ + connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel())); + connect(LineEditElements, SIGNAL(textChanged(const QString&)), SLOT(onTextChange(const QString&))); + connect(CheckBoxMesh, SIGNAL(toggled(bool)), SLOT(onSelectMesh(bool))); + + connect(GroupAngle, SIGNAL(buttonClicked(int)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_Angle, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_NbSteps, SIGNAL(valueChanged(int)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_Tolerance, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + connect(CheckBoxPreview, SIGNAL(toggled(bool)), this, SLOT(onDisplaySimulation(bool))); + + connect(SpinBox_Angle, SIGNAL(textChanged(const QString&)), this, SLOT(onAngleTextChange(const QString&))); ConstructorsClicked(0); + SelectionIntoArgument(); } //================================================================================= @@ -331,135 +365,201 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( QWidget* parent, const char* nam //================================================================================= SMESHGUI_RevolutionDlg::~SMESHGUI_RevolutionDlg() { - // no need to delete child widgets, Qt does it all for us + delete mySimulation; + if ( myFilterDlg ) { + myFilterDlg->setParent( 0 ); + delete myFilterDlg; + myFilterDlg = 0; + } } - //================================================================================= // function : Init() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::Init( bool ResetControls ) +void SMESHGUI_RevolutionDlg::Init (bool ResetControls) { myBusy = false; - + myEditCurrentArgument = 0; LineEditElements->clear(); myElementsId = ""; - myNbOkElements = 0 ; - - myActor = 0; + myNbOkElements = 0; + myIDs.clear(); + + myActor = 0; myMesh = SMESH::SMESH_Mesh::_nil(); - - if( ResetControls ) - { - SpinBox_X->SetValue(0.0); - SpinBox_Y->SetValue(0.0); - SpinBox_Z->SetValue(0.0); - SpinBox_DX->SetValue(0.0); - SpinBox_DY->SetValue(0.0); - SpinBox_DZ->SetValue(0.0); - - SpinBox_Angle->SetValue(45); - SpinBox_NbSteps->setValue(1); - SpinBox_Tolerance->SetValue(1e-05); - - CheckBoxMesh->setChecked(false); - onSelectMesh( false ); - } -} + if (ResetControls) { + SpinBox_X->SetValue(0.0); + SpinBox_Y->SetValue(0.0); + SpinBox_Z->SetValue(0.0); + SpinBox_DX->SetValue(0.0); + SpinBox_DY->SetValue(0.0); + SpinBox_DZ->SetValue(0.0); + + SpinBox_Angle->SetValue(45); + SpinBox_NbSteps->setValue(1); + SpinBox_Tolerance->SetValue(1e-05); + + CheckBoxMesh->setChecked(false); + onSelectMesh(false); + CheckBoxPreview->setChecked(false); + onDisplaySimulation(false); + } +} //================================================================================= // function : ConstructorsClicked() // purpose : Radio button management //================================================================================= -void SMESHGUI_RevolutionDlg::ConstructorsClicked(int constructorId) +void SMESHGUI_RevolutionDlg::ConstructorsClicked (int constructorId) { - disconnect(mySelection, 0, this, 0); - + disconnect(mySelectionMgr, 0, this, 0); + + /* SALOME_ListIO io; + mySelectionMgr->selectedObjects( io ); + SALOME_ListIO aList; + mySelectionMgr->setSelectedObjects( aList );*/ + + buttonApply->setEnabled(false); + buttonOk->setEnabled(false); + mySimulation->SetVisibility(false); + Selection_Mode aSelMode = ActorSelection; - switch(constructorId) - { - case 0 : - { - GroupArguments->setTitle( tr( "REVOLUTION_1D" ) ); - aSelMode = EdgeSelection; - break; - } - case 1 : - { - GroupArguments->setTitle( tr( "REVOLUTION_2D" ) ); - aSelMode = FaceSelection; - break; - } + switch (constructorId) { + case 0: + { + GroupArguments->setTitle(tr("REVOLUTION_1D")); + aSelMode = EdgeSelection; + break; } - - if (myEditCurrentArgument != (QWidget*)LineEditElements) + case 1: + { + GroupArguments->setTitle(tr("REVOLUTION_2D")); + aSelMode = FaceSelection; + break; + } + } + + if (myEditCurrentArgument != (QWidget*)LineEditElements) { SMESH::SetPointRepresentation(false); - + } + if (!CheckBoxMesh->isChecked()) - QAD_Application::getDesktop()->SetSelectionMode( aSelMode, true ); - + { + LineEditElements->clear(); + myIDs.clear(); + myNbOkElements = 0; + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(aSelMode); + } + myEditCurrentArgument = (QWidget*)LineEditElements; LineEditElements->setFocus(); - + if (CheckBoxMesh->isChecked()) onSelectMesh(true); - - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); -} + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + // mySelectionMgr->setSelectedObjects( io ); +} //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnApply() +bool SMESHGUI_RevolutionDlg::ClickOnApply() { - if (mySMESHGUI->ActiveStudyLocked()) - return; - - if ( myNbOkElements && IsAxisOk()) - { - QStringList aListElementsId = QStringList::split( " ", myElementsId, false); - - SMESH::long_array_var anElementsId = new SMESH::long_array; - - anElementsId->length( aListElementsId.count() ); - for ( int i = 0; i < aListElementsId.count(); i++ ) - anElementsId[i] = aListElementsId[i].toInt(); - - SMESH::AxisStruct anAxis; + if (mySMESHGUI->isActiveStudyLocked()) + return false; + + if (!isValid()) + return false; + + if (myNbOkElements && IsAxisOk()) { + QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts); + + SMESH::long_array_var anElementsId = new SMESH::long_array; + + anElementsId->length(aListElementsId.count()); + for (int i = 0; i < aListElementsId.count(); i++) + anElementsId[i] = aListElementsId[i].toInt(); + + SMESH::AxisStruct anAxis; + + anAxis.x = SpinBox_X->GetValue(); + anAxis.y = SpinBox_Y->GetValue(); + anAxis.z = SpinBox_Z->GetValue();; + anAxis.vx = SpinBox_DX->GetValue(); + anAxis.vy = SpinBox_DY->GetValue(); + anAxis.vz = SpinBox_DZ->GetValue(); + + double anAngle = (SpinBox_Angle->GetValue())*PI/180; + long aNbSteps = (long)SpinBox_NbSteps->value(); + double aTolerance = SpinBox_Tolerance->GetValue(); + + if ( GroupAngle->checkedId() == 1 ) + anAngle = anAngle/aNbSteps; + + QStringList aParameters; + aParameters << SpinBox_X->text(); + aParameters << SpinBox_Y->text(); + aParameters << SpinBox_Z->text(); + aParameters << SpinBox_DX->text(); + aParameters << SpinBox_DY->text(); + aParameters << SpinBox_DZ->text(); + aParameters << SpinBox_Angle->text(); + aParameters << SpinBox_NbSteps->text(); + aParameters << SpinBox_Tolerance->text(); + + try { + SUIT_OverrideCursor aWaitCursor; + SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - anAxis.x = SpinBox_X->GetValue(); - anAxis.y = SpinBox_Y->GetValue(); - anAxis.z = SpinBox_Z->GetValue();; - anAxis.vx = SpinBox_DX->GetValue(); - anAxis.vy = SpinBox_DY->GetValue(); - anAxis.vz = SpinBox_DZ->GetValue(); - - double anAngle = (SpinBox_Angle->GetValue())*PI/180; - long aNbSteps = (long)SpinBox_NbSteps->value(); - double aTolerance = SpinBox_Tolerance->GetValue(); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) { + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepObject1DMakeGroups(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + else + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepObject2DMakeGroups(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + } + else + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepMakeGroups(anElementsId.inout(), anAxis, + anAngle, aNbSteps, aTolerance); + } + else { + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + aMeshEditor->RotationSweepObject1D(mySelectedObject, anAxis, anAngle, aNbSteps, aTolerance); + else + aMeshEditor->RotationSweepObject2D(mySelectedObject, anAxis, anAngle, aNbSteps, aTolerance); + } + else + aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); + } - try - { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); - QApplication::restoreOverrideCursor(); - } - catch( ... ) - { - } - - mySelection->ClearIObjects(); - SMESH::UpdateView(); - Init( false); - ConstructorsClicked( GetConstructorId() ); + myMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + } catch (...) { } + + SMESH::UpdateView(); + SMESH::Update(myIO, SMESH::eDisplay); + if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear + Init(false); + ConstructorsClicked(GetConstructorId()); + mySelectedObject = SMESH::SMESH_IDSource::_nil(); + SelectionIntoArgument(); + } + + return true; } //================================================================================= @@ -468,73 +568,112 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() //================================================================================= void SMESHGUI_RevolutionDlg::ClickOnOk() { - ClickOnApply() ; - ClickOnCancel() ; + if( ClickOnApply() ) + ClickOnCancel(); } - //================================================================================= // function : ClickOnCancel() // purpose : //================================================================================= void SMESHGUI_RevolutionDlg::ClickOnCancel() { - mySelection->ClearFilters(); - mySelection->ClearIObjects(); - SMESH::SetPointRepresentation(false); - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - disconnect( mySelection, 0, this, 0 ); - mySMESHGUI->ResetState() ; - reject() ; + reject(); +} + +void SMESHGUI_RevolutionDlg::reject() +{ + close(); +} + +//================================================================================= +// function : ClickOnHelp() +// purpose : +//================================================================================= +void SMESHGUI_RevolutionDlg::ClickOnHelp() +{ + LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); + if (app) + app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); + else { + QString platform; +#ifdef WIN32 + platform = "winapplication"; +#else + platform = "application"; +#endif + SUIT_MessageBox::warning(this, tr("WRN_WARNING"), + tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). + arg(app->resourceMgr()->stringValue("ExternalBrowser", + platform)). + arg(myHelpFileName)); + } } //======================================================================= -//function : onTextChange -//purpose : +// function : onAngleTextChange() +// purpose : //======================================================================= +void SMESHGUI_RevolutionDlg::onAngleTextChange (const QString& theNewText) +{ + bool isNumber; + SpinBox_Angle->text().toDouble( &isNumber ); + if( !isNumber ) + RadioButton3->setChecked( true ); + RadioButton4->setEnabled( isNumber ); +} -void SMESHGUI_RevolutionDlg::onTextChange(const QString& theNewText) +//======================================================================= +// function : onTextChange() +// purpose : +//======================================================================= +void SMESHGUI_RevolutionDlg::onTextChange (const QString& theNewText) { QLineEdit* send = (QLineEdit*)sender(); - if ( myBusy ) return; + if (myBusy) return; myBusy = true; - + if (send == LineEditElements) myNbOkElements = 0; - - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - + + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + // hilight entered elements SMDS_Mesh* aMesh = 0; - if ( myActor ) + if (myActor) aMesh = myActor->GetObject()->GetMesh(); - - if ( aMesh ) { - mySelection->ClearIObjects(); - mySelection->AddIObject( myActor->getIO() ); - - QStringList aListId = QStringList::split( " ", theNewText, false); - + + if (aMesh) { if (send == LineEditElements) { - for ( int i = 0; i < aListId.count(); i++ ) { - const SMDS_MeshElement * e = aMesh->FindElement( aListId[ i ].toInt() ); - if ( e ) { - if ( !mySelection->IsIndexSelected( myActor->getIO(), e->GetID() )) - mySelection->AddOrRemoveIndex (myActor->getIO(), e->GetID(), true); - myNbOkElements++; - } + Handle(SALOME_InteractiveObject) anIO = myActor->getIO(); + + TColStd_MapOfInteger newIndices; + + QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts); + + for (int i = 0; i < aListId.count(); i++) { + const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); + if (e) + newIndices.Add(e->GetID()); + myNbOkElements++; } + + mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->highlight( myActor->getIO(), true, true ); + myElementsId = theNewText; } } - - if ( myNbOkElements && IsAxisOk() ) { - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); + + if (myNbOkElements && IsAxisOk()) { + buttonOk->setEnabled(true); + buttonApply->setEnabled(true); } - + onDisplaySimulation(true); + myBusy = false; } @@ -544,175 +683,139 @@ void SMESHGUI_RevolutionDlg::onTextChange(const QString& theNewText) //================================================================================= void SMESHGUI_RevolutionDlg::SelectionIntoArgument() { - if ( myBusy ) return; - + if (myBusy) return; + // clear - myActor = 0; QString aString = ""; myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - { - LineEditElements->setText( aString ); - myNbOkElements = 0; - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } + if (myEditCurrentArgument == (QWidget*)LineEditElements) { + LineEditElements->setText(aString); + myNbOkElements = 0; + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + } myBusy = false; - - if ( !GroupButtons->isEnabled() ) // inactive + + if (!GroupButtons->isEnabled()) // inactive return; - + // get selected mesh - int nbSel = mySelection->IObjectCount(); - if(nbSel != 1) + const SALOME_ListIO& aList = mySelector->StoredIObjects(); + + int nbSel = aList.Extent(); + if (nbSel != 1) return; - - Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject(); - myMesh = SMESH::GetMeshByIO(IO); - if(myMesh->_is_nil()) + + Handle(SALOME_InteractiveObject) IO = aList.First(); + SMESH::SMESH_Mesh_var aMeshVar = SMESH::GetMeshByIO(IO); + if (aMeshVar->_is_nil()) return; - myActor = SMESH::FindActorByObject(myMesh); - if (!myActor) + + SMESH_Actor* anActor = SMESH::FindActorByObject(aMeshVar); + if (!anActor) + anActor = SMESH::FindActorByEntry(IO->getEntry()); + if (!anActor && !CheckBoxMesh->isChecked()) return; - + int aNbUnits = 0; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) - { - SMESH::GetNameOfSelectedIObjects(mySelection, aString); - - int aConstructorId = GetConstructorId(); - - if(!SMESH::IObjectToInterface(IO)->_is_nil()) //MESH - { - // get IDs from mesh - SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh(); - if (!aSMDSMesh) - return; - - if (aConstructorId == 0) - { - SMDS_EdgeIteratorPtr anIter = aSMDSMesh->edgesIterator(); - - while ( anIter->more() ) - { - const SMDS_MeshEdge * edge = anIter->next(); - if ( edge ) { - myElementsId += QString(" %1").arg(edge->GetID()); - aNbUnits++; - } - } - } - else if (aConstructorId == 1) - { - SMDS_FaceIteratorPtr anIter = aSMDSMesh->facesIterator(); - while ( anIter->more() ) - { - const SMDS_MeshFace * face = anIter->next(); - if ( face ) { - myElementsId += QString(" %1").arg(face->GetID()); - aNbUnits++; - } - } - } - } - else if (!SMESH::IObjectToInterface(IO)->_is_nil()) //SUBMESH - { - // get submesh - SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface(IO) ; - - // get IDs from submesh - SMESH::long_array_var anElementsIds = new SMESH::long_array; - if (aConstructorId == 0) - anElementsIds = aSubMesh->GetElementsByType(SMESH::EDGE); - else if (aConstructorId == 1) - anElementsIds = aSubMesh->GetElementsByType(SMESH::FACE); - - for ( int i = 0; i < anElementsIds->length(); i++ ) - myElementsId += QString(" %1").arg(anElementsIds[i]); - aNbUnits = anElementsIds->length(); - } - else // GROUP - { - // get smesh group - SMESH::SMESH_GroupBase_var aGroup = - SMESH::IObjectToInterface(IO); - if (aGroup->_is_nil()) - return; - - if ( (aConstructorId == 0 && aGroup->GetType()!= SMESH::EDGE) || - (aConstructorId == 1 && aGroup->GetType()!= SMESH::FACE) ) - return; - - // get IDs from smesh group - SMESH::long_array_var anElementsIds = new SMESH::long_array; - anElementsIds = aGroup->GetListOfID(); - for ( int i = 0; i < anElementsIds->length(); i++ ) - myElementsId += QString(" %1").arg(anElementsIds[i]); - aNbUnits = anElementsIds->length(); - } - } + if (myEditCurrentArgument == (QWidget*)LineEditElements) { + myElementsId = ""; + myMesh = aMeshVar; + myActor = anActor; + myIO = IO; + + // MakeGroups is available if there are groups + if ( myMesh->NbGroups() == 0 ) { + MakeGroupsCheck->setChecked(false); + MakeGroupsCheck->setEnabled(false); + } else { + MakeGroupsCheck->setEnabled(true); + } + + if (CheckBoxMesh->isChecked()) { + SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); + + if (!SMESH::IObjectToInterface(IO)->_is_nil()) + mySelectedObject = SMESH::IObjectToInterface(IO); else - { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelection, aString) ; - myElementsId = aString; - } - - if(aNbUnits < 1) - return ; - - myNbOkElements = true; + return; + } else { + aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString); + myElementsId = aString; + if (aNbUnits < 1) + return; } - else - { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelection, aString); - if(aNbUnits != 1) - return; - - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if (!aMesh) - return; + myNbOkElements = true; + } else { + + SMDS_Mesh* aMesh = anActor->GetObject()->GetMesh(); + if (!aMesh) + return; + + bool isNodeSelected = (myEditCurrentArgument == (QWidget*)SpinBox_X || + (myEditCurrentArgument == (QWidget*)SpinBox_DX && + myVectorDefinition==POINT_SELECT)); + + bool isFaceSelected = (myEditCurrentArgument == (QWidget*)SpinBox_DX && + myVectorDefinition==FACE_SELECT); + + if(isNodeSelected) { + aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString); + } + else if(isFaceSelected){ + aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString); + } + + if (aNbUnits != 1) + return; + + if(isNodeSelected) { + const SMDS_MeshNode * n = aMesh->FindNode(aString.toInt()); + if (!n) + return; - const SMDS_MeshNode * n = aMesh->FindNode( aString.toInt() ); - if ( !n ) - return; - double x = n->X(); double y = n->Y(); double z = n->Z(); - if (myEditCurrentArgument == (QWidget*)SpinBox_X) - { - SpinBox_X->SetValue(x); - SpinBox_Y->SetValue(y); - SpinBox_Z->SetValue(z); - } - else if (myEditCurrentArgument == (QWidget*)SpinBox_DX) - { - SpinBox_DX->SetValue(x - SpinBox_X->GetValue()); - SpinBox_DY->SetValue(y - SpinBox_Y->GetValue()); - SpinBox_DZ->SetValue(z - SpinBox_Z->GetValue()); - } + if (myEditCurrentArgument == (QWidget*)SpinBox_X) { + SpinBox_X->SetValue(x); + SpinBox_Y->SetValue(y); + SpinBox_Z->SetValue(z); + } else if (myEditCurrentArgument == (QWidget*)SpinBox_DX) { + SpinBox_DX->SetValue(x - SpinBox_X->GetValue()); + SpinBox_DY->SetValue(y - SpinBox_Y->GetValue()); + SpinBox_DZ->SetValue(z - SpinBox_Z->GetValue()); + } } - + else if(isFaceSelected){ + const SMDS_MeshFace* face = dynamic_cast(aMesh->FindElement(aString.toInt())); + if (!face) + return; + + gp_XYZ aNormale = SMESH::getNormale(face); + SpinBox_DX->SetValue(aNormale.X()); + SpinBox_DY->SetValue(aNormale.Y()); + SpinBox_DZ->SetValue(aNormale.Z()); + + } + } + myBusy = true; if (myEditCurrentArgument == (QWidget*)LineEditElements) - LineEditElements->setText( aString ); + LineEditElements->setText(aString); myBusy = false; - + // OK - if(myNbOkElements && IsAxisOk()) - { - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); - } -} + if (myNbOkElements && IsAxisOk()) { + buttonOk->setEnabled(true); + buttonApply->setEnabled(true); + } + onDisplaySimulation(true); +} //================================================================================= // function : SetEditCurrentArgument() @@ -721,44 +824,42 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument() void SMESHGUI_RevolutionDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - - disconnect( mySelection, 0, this, 0 ); - mySelection->ClearIObjects(); - mySelection->ClearFilters(); - - if(send == SelectElementsButton) { + + disconnect(mySelectionMgr, 0, this, 0); + mySelectionMgr->clearSelected(); + mySelectionMgr->clearFilters(); + + if (send == SelectElementsButton) { + mySimulation->SetVisibility(false); myEditCurrentArgument = (QWidget*)LineEditElements; SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) - { - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - mySelection->AddFilter(myMeshOrSubMeshOrGroupFilter); - } - else - { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - QAD_Application::getDesktop()->SetSelectionMode( EdgeSelection, true ); - else if (aConstructorId == 1) - QAD_Application::getDesktop()->SetSelectionMode( FaceSelection, true ); - } - } - else if (send == SelectPointButton) - { - myEditCurrentArgument = (QWidget*)SpinBox_X; - SMESH::SetPointRepresentation(true); - QAD_Application::getDesktop()->SetSelectionMode( NodeSelection, true ); - } - else if (send == SelectVectorButton) - { - myEditCurrentArgument = (QWidget*)SpinBox_DX; - SMESH::SetPointRepresentation(true); - QAD_Application::getDesktop()->SetSelectionMode( NodeSelection, true ); + if (CheckBoxMesh->isChecked()) { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); + } else { + int aConstructorId = GetConstructorId(); + if (aConstructorId == 0) + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(EdgeSelection); + } + else if (aConstructorId == 1) + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(FaceSelection); + } } - + } else if (send == SelectPointButton) { + myEditCurrentArgument = (QWidget*)SpinBox_X; + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); + } + myEditCurrentArgument->setFocus(); - connect( mySelection, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - SelectionIntoArgument() ; + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + SelectionIntoArgument(); } //================================================================================= @@ -767,16 +868,15 @@ void SMESHGUI_RevolutionDlg::SetEditCurrentArgument() //================================================================================= void SMESHGUI_RevolutionDlg::DeactivateActiveDialog() { - if ( GroupConstructors->isEnabled() ) { - GroupConstructors->setEnabled(false) ; - GroupArguments->setEnabled(false) ; - GroupButtons->setEnabled(false) ; - mySMESHGUI->ResetState() ; - mySMESHGUI->SetActiveDialogBox(0) ; + if (ConstructorsBox->isEnabled()) { + ConstructorsBox->setEnabled(false); + GroupArguments->setEnabled(false); + GroupButtons->setEnabled(false); + mySMESHGUI->ResetState(); + mySMESHGUI->SetActiveDialogBox(0); } } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -784,134 +884,322 @@ void SMESHGUI_RevolutionDlg::DeactivateActiveDialog() void SMESHGUI_RevolutionDlg::ActivateThisDialog() { /* Emit a signal to deactivate the active dialog */ - mySMESHGUI->EmitSignalDeactivateDialog() ; - GroupConstructors->setEnabled(true) ; - GroupArguments->setEnabled(true) ; - GroupButtons->setEnabled(true) ; - - mySMESHGUI->SetActiveDialogBox( (QDialog*)this ) ; + mySMESHGUI->EmitSignalDeactivateDialog(); + ConstructorsBox->setEnabled(true); + GroupArguments->setEnabled(true); + GroupButtons->setEnabled(true); + + mySMESHGUI->SetActiveDialogBox((QDialog*)this); ConstructorsClicked(GetConstructorId()); SelectionIntoArgument(); } - //================================================================================= // function : enterEvent() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::enterEvent(QEvent* e) +void SMESHGUI_RevolutionDlg::enterEvent (QEvent*) { - if ( GroupConstructors->isEnabled() ) - return ; - ActivateThisDialog() ; + if (!ConstructorsBox->isEnabled()) + ActivateThisDialog(); } - //================================================================================= // function : closeEvent() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::closeEvent( QCloseEvent* e ) +void SMESHGUI_RevolutionDlg::closeEvent (QCloseEvent*) { /* same than click on cancel button */ - this->ClickOnCancel() ; - return ; + disconnect(mySelectionMgr, 0, this, 0); + mySelectionMgr->clearFilters(); + //mySelectionMgr->clearSelected(); + if (SMESH::GetCurrentVtkView()) { + SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters + SMESH::SetPointRepresentation(false); + } + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + mySMESHGUI->ResetState(); } - //======================================================================= -//function : hideEvent -//purpose : caused by ESC key +//function : onSelectMesh +//purpose : //======================================================================= - -void SMESHGUI_RevolutionDlg::hideEvent ( QHideEvent * e ) +void SMESHGUI_RevolutionDlg::onSelectMesh (bool toSelectMesh) { - if ( !isMinimized() ) - ClickOnCancel(); -} + if (toSelectMesh) { + myIDs = LineEditElements->text(); + TextLabelElements->setText(tr("SMESH_NAME")); + } + else + TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); + myFilterBtn->setEnabled(!toSelectMesh); + if (myEditCurrentArgument != LineEditElements) { + LineEditElements->clear(); + mySimulation->SetVisibility(false); + return; + } + + mySelectionMgr->clearFilters(); + SMESH::SetPointRepresentation(false); + + if (toSelectMesh) { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(ActorSelection); + mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); + LineEditElements->setReadOnly(true); + LineEditElements->setValidator(0); + } else { + int aConstructorId = GetConstructorId(); + if (aConstructorId == 0) + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(EdgeSelection); + } + else if (aConstructorId == 1) + { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(FaceSelection); + } + + LineEditElements->setReadOnly(false); + LineEditElements->setValidator(myIdValidator); + onTextChange(LineEditElements->text()); + mySimulation->SetVisibility(false); + } + + SelectionIntoArgument(); + + if (!toSelectMesh) + LineEditElements->setText( myIDs ); +} //================================================================================= // function : GetConstructorId() -// purpose : +// purpose : //================================================================================= int SMESHGUI_RevolutionDlg::GetConstructorId() -{ - if ( GroupConstructors != NULL && GroupConstructors->selected() != NULL ) - return GroupConstructors->id( GroupConstructors->selected() ); - return -1; +{ + return GroupConstructors->checkedId(); } - //================================================================================= // function : IsAxisOk() -// purpose : +// purpose : //================================================================================= bool SMESHGUI_RevolutionDlg::IsAxisOk() { - return (SpinBox_DX->GetValue() != 0 || - SpinBox_DY->GetValue() != 0 || - SpinBox_DZ->GetValue() != 0); + return (SpinBox_DX->GetValue() != 0 || + SpinBox_DY->GetValue() != 0 || + SpinBox_DZ->GetValue() != 0); } - //================================================================================= // function : onVectorChanged() -// purpose : +// purpose : //================================================================================= void SMESHGUI_RevolutionDlg::onVectorChanged() { - if (IsAxisOk()) - { - buttonOk->setEnabled( true ); - buttonApply->setEnabled( true ); - } - else - { - buttonOk->setEnabled( false ); - buttonApply->setEnabled( false ); - } + if (IsAxisOk()) { + buttonOk->setEnabled(true); + buttonApply->setEnabled(true); + } else { + buttonOk->setEnabled(false); + buttonApply->setEnabled(false); + } + onDisplaySimulation(true); } +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_RevolutionDlg::keyPressEvent( QKeyEvent* e ) +{ + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) + return; -//======================================================================= -//function : onSelectMesh -//purpose : -//======================================================================= -void SMESHGUI_RevolutionDlg::onSelectMesh ( bool toSelectMesh ) + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); + } +} + +//================================================================================= +// function : toDisplaySimulation() +// purpose : +//================================================================================= +void SMESHGUI_RevolutionDlg::toDisplaySimulation() { - if (toSelectMesh) - TextLabelElements->setText( tr( "SMESH_NAME" ) ); - else - TextLabelElements->setText( tr( "SMESH_ID_ELEMENTS" ) ); - - if (myEditCurrentArgument != LineEditElements) + onDisplaySimulation(true); +} + +//================================================================================= +// function : onDisplaySimulation() +// purpose : +//================================================================================= +void SMESHGUI_RevolutionDlg::onDisplaySimulation(bool toDisplayPreview) +{ + if (CheckBoxPreview->isChecked() && toDisplayPreview) + { + //display preview + if (myNbOkElements && IsAxisOk()) { - LineEditElements->clear(); - return; + QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts); + + SMESH::long_array_var anElementsId = new SMESH::long_array; + + anElementsId->length(aListElementsId.count()); + for (int i = 0; i < aListElementsId.count(); i++) + anElementsId[i] = aListElementsId[i].toInt(); + + SMESH::AxisStruct anAxis; + + anAxis.x = SpinBox_X->GetValue(); + anAxis.y = SpinBox_Y->GetValue(); + anAxis.z = SpinBox_Z->GetValue(); + anAxis.vx = SpinBox_DX->GetValue(); + anAxis.vy = SpinBox_DY->GetValue(); + anAxis.vz = SpinBox_DZ->GetValue(); + + double anAngle = (SpinBox_Angle->GetValue())*PI/180; + long aNbSteps = (long)SpinBox_NbSteps->value(); + double aTolerance = SpinBox_Tolerance->GetValue(); + + if (GroupAngle->checkedId() == 1) + anAngle = anAngle/aNbSteps; + + try { + SUIT_OverrideCursor aWaitCursor; + SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditPreviewer(); + if( CheckBoxMesh->isChecked() ) { + if( GetConstructorId() == 0 ) + aMeshEditor->RotationSweepObject1D(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + else + aMeshEditor->RotationSweepObject2D(mySelectedObject, anAxis, + anAngle, aNbSteps, aTolerance); + } + else + aMeshEditor->RotationSweep(anElementsId.inout(), + anAxis, + anAngle, + aNbSteps, + aTolerance); + SMESH::MeshPreviewStruct_var aMeshPreviewStruct = aMeshEditor->GetPreviewData(); + mySimulation->SetData(aMeshPreviewStruct._retn()); + } catch (...) {} } - - mySelection->ClearFilters() ; - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) + else { - QAD_Application::getDesktop()->SetSelectionMode( ActorSelection ); - mySelection->AddFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); + mySimulation->SetVisibility(false); } + } else - { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - QAD_Application::getDesktop()->SetSelectionMode( EdgeSelection, true ); - else if (aConstructorId == 0) - QAD_Application::getDesktop()->SetSelectionMode( FaceSelection, true ); - - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); - } - + { + //erase preview + mySimulation->SetVisibility(false); + } +} + +//================================================================================= +// function : onSelectVectorButton() +// purpose : [slot] +//================================================================================= +void SMESHGUI_RevolutionDlg::onSelectVectorButton(){ + if(SelectVectorMenu) { + SelectVectorMenu->exec( QCursor::pos() ); + } +} + +//================================================================================= +// function : onSelectVectorMenu() +// purpose : [slot] +//================================================================================= +void SMESHGUI_RevolutionDlg::onSelectVectorMenu( QAction* action){ + if(!action) + return; + + disconnect(mySelectionMgr, 0, this, 0); + + switch(myMenuActions[action]) { + case POINT_SELECT: + SMESH::SetPointRepresentation(true); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); + break; + + case FACE_SELECT: + SMESH::SetPointRepresentation(false); + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(FaceSelection); + break; + } + + myVectorDefinition = myMenuActions[action]; + myEditCurrentArgument = (QWidget*)SpinBox_DX; + myEditCurrentArgument->setFocus(); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); SelectionIntoArgument(); } + +//================================================================================= +// function : setFilters() +// purpose : SLOT. Called when "Filter" button pressed. +//================================================================================= +void SMESHGUI_RevolutionDlg::setFilters() +{ + if(myMesh->_is_nil()) { + SUIT_MessageBox::critical(this, + tr("SMESH_ERROR"), + tr("NO_MESH_SELECTED")); + return; + } + if ( !myFilterDlg ) + { + QList types; + types.append( SMESH::EDGE ); + types.append( SMESH::FACE ); + myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, types ); + } + myFilterDlg->Init( GetConstructorId() ? SMESH::FACE : SMESH::EDGE ); + + myFilterDlg->SetSelection(); + myFilterDlg->SetMesh( myMesh ); + myFilterDlg->SetSourceWg( LineEditElements ); + + myFilterDlg->show(); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool SMESHGUI_RevolutionDlg::isValid() +{ + QString msg; + bool ok = true; + ok = SpinBox_X->isValid( msg, true ) && ok; + ok = SpinBox_Y->isValid( msg, true ) && ok; + ok = SpinBox_Z->isValid( msg, true ) && ok; + ok = SpinBox_DX->isValid( msg, true ) && ok; + ok = SpinBox_DY->isValid( msg, true ) && ok; + ok = SpinBox_DZ->isValid( msg, true ) && ok; + ok = SpinBox_Angle->isValid( msg, true ) && ok; + ok = SpinBox_NbSteps->isValid( msg, true ) && ok; + ok = SpinBox_Tolerance->isValid( msg, true ) && ok; + + if( !ok ) { + QString str( tr( "SMESH_INCORRECT_INPUT" ) ); + if ( !msg.isEmpty() ) + str += "\n" + msg; + SUIT_MessageBox::critical( this, tr( "SMESH_ERROR" ), str ); + return false; + } + return true; +}