X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_RevolutionDlg.cxx;h=a62c7bfc87becdd59c902a6fb7a1a2c6abd03475;hp=731f9460d90045f80764fe69b3e411bc04349471;hb=6c4a9f32ed7b4416d79e0d0d293919609a8eb178;hpb=c38c10811a065cf5b13e8807ed71864d92ca7d80 diff --git a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx index 731f9460d..a62c7bfc8 100644 --- a/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx @@ -1,30 +1,29 @@ -// SMESH SMESHGUI : GUI for SMESH component +// Copyright (C) 2007-2015 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 +// 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 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, 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 -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// 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 +// 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 +// 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" @@ -34,313 +33,282 @@ #include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_MeshUtils.h" #include "SMESHGUI_IdValidator.h" - -#include "SMESH_Actor.h" -#include "SMESH_TypeFilter.hxx" -#include "SMESH_LogicalFilter.hxx" -#include "SMDS_Mesh.hxx" - -#include "SUIT_ResourceMgr.h" - -#include "SVTK_ViewModel.h" -#include "SVTK_ViewWindow.h" -#include "SVTK_Selector.h" -#include "SVTK_Selection.h" -#include "SALOME_ListIO.hxx" - -#include "utilities.h" - -// OCCT Includes +#include "SMESHGUI_MeshEditPreview.h" +#include "SMESHGUI_FilterDlg.h" +#include "SMESHGUI_ExtrusionDlg.h" + +#include +#include +#include +#include + +// SALOME GUI includes +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include + +// OCCT includes #include -#include - -// QT Includes -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// IDL Headers -#include "SALOMEconfig.h" + +// 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) -using namespace std; +#define SPACING 6 +#define MARGIN 11 //================================================================================= // class : SMESHGUI_RevolutionDlg() // purpose : //================================================================================= -SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char* name, - bool modal, WFlags fl) - : QDialog( SMESH::GetDesktop( theModule ), name, modal, WStyle_Customize | WStyle_NormalBorder | - WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose), - mySMESHGUI( theModule ), - mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), - myViewWindow( SMESH::GetViewWindow( theModule ) ), - mySelector( myViewWindow->GetSelector() ) +SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule ) + : SMESHGUI_PreviewDlg( theModule ), + mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ), + myVectorDefinition(NONE_SELECT) { - QPixmap image0 (SMESHGUI::resourceMgr()->loadPixmap("SMESH", tr("ICON_DLG_EDGE"))); - QPixmap image1 (SMESHGUI::resourceMgr()->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE"))); - QPixmap image2 (SMESHGUI::resourceMgr()->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); + SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); + QPixmap image ( mgr->loadPixmap("SMESH", tr("ICON_SELECT"))); - /***************************************************************/ - 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); + setModal(false); + setAttribute(Qt::WA_DeleteOnClose, true); + setWindowTitle(tr("REVOLUTION_AROUND_AXIS")); + setSizeGripEnabled(true); - /***************************************************************/ - 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); + QVBoxLayout* SMESHGUI_RevolutionDlgLayout = new QVBoxLayout(this); + SMESHGUI_RevolutionDlgLayout->setSpacing(SPACING); + SMESHGUI_RevolutionDlgLayout->setMargin(MARGIN); /***************************************************************/ - 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"), this); + QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments); + GroupArgumentsLayout->setSpacing(SPACING); + GroupArgumentsLayout->setMargin(MARGIN); // Controls for elements selection - TextLabelElements = new QLabel(GroupArguments, "TextLabelElements"); - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS" )); - TextLabelElements->setFixedWidth(74); - GroupArgumentsLayout->addWidget(TextLabelElements, 0, 0); - - SelectElementsButton = new QPushButton(GroupArguments, "SelectElementsButton"); - SelectElementsButton->setText(tr("" )); - SelectElementsButton->setPixmap(image2); - SelectElementsButton->setToggleButton(FALSE); - GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1); - - LineEditElements = new QLineEdit(GroupArguments, "LineEditElements"); - LineEditElements->setValidator(new SMESHGUI_IdValidator(this, "validator")); - GroupArgumentsLayout->addWidget(LineEditElements, 0, 2); - - // 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); + SelectorWdg = new SMESHGUI_3TypesSelector( 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); - - 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); - - SpinBox_X = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_X"); - GroupAxisLayout->addWidget(SpinBox_X, 0, 3); - - 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); - - 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); - - TextLabelVector = new QLabel(GroupAxis, "TextLabelVector"); - TextLabelVector->setText(tr("SMESH_VECTOR")); - GroupAxisLayout->addWidget(TextLabelVector, 1, 0); - - SelectVectorButton = new QPushButton(GroupAxis, "SelectVectorButton"); - SelectVectorButton->setPixmap(image2); + 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(image); + SelectPointButton->setCheckable(true); + + 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(image); + SelectVectorButton->setCheckable(true); + + 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); - TextLabelDX = new QLabel(GroupAxis, "TextLabelDX"); - TextLabelDX->setText(tr("SMESH_DX")); - GroupAxisLayout->addWidget(TextLabelDX, 1, 2); - - 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); - - SpinBox_DY = new SMESHGUI_SpinBox(GroupAxis, "SpinBox_DY"); - GroupAxisLayout->addWidget(SpinBox_DY, 1, 5); - - 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); - - GroupArgumentsLayout->addMultiCellWidget(GroupAxis, 2, 2, 0, 3); + // Controls for tolerance defining + TextLabelTolerance = new QLabel(tr("SMESH_TOLERANCE"), GroupArguments); + SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments); - // Controls for angle defining - TextLabelAngle = new QLabel(GroupArguments, "TextLabelAngle"); - TextLabelAngle->setText(tr("SMESH_ANGLE" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelAngle, 3, 3, 0, 1); + // Control for mesh preview + myPreviewCheckBox = new QCheckBox(tr("PREVIEW"), GroupArguments); - SpinBox_Angle = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Angle"); - GroupArgumentsLayout->addWidget(SpinBox_Angle, 3, 2); + // CheckBox for groups generation + MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments); + MakeGroupsCheck->setChecked(true); - // Controls for nb. steps defining - TextLabelNbSteps = new QLabel(GroupArguments, "TextLabelNbSteps"); - TextLabelNbSteps->setText(tr("SMESH_NUMBEROFSTEPS" )); - GroupArgumentsLayout->addMultiCellWidget(TextLabelNbSteps, 4, 4, 0, 1); + GroupArgumentsLayout->addWidget(SelectorWdg, 0, 0, 1, 4); + GroupArgumentsLayout->addWidget(GroupAxis, 1, 0, 1, 4); + GroupArgumentsLayout->addWidget(GroupAngleBox, 2, 0, 1, 4); + GroupArgumentsLayout->addWidget(TextLabelTolerance, 3, 0, 1, 2); + GroupArgumentsLayout->addWidget(SpinBox_Tolerance, 3, 2, 1, 2); + GroupArgumentsLayout->addWidget(myPreviewCheckBox, 4, 0, 1, 4); + GroupArgumentsLayout->addWidget(MakeGroupsCheck, 5, 0, 1, 4); - SpinBox_NbSteps = new QSpinBox(GroupArguments, "SpinBox_NbSteps"); - GroupArgumentsLayout->addWidget(SpinBox_NbSteps, 4, 2); + SelectorWdg->GetButtonGroup()->addButton( SelectVectorButton ); + SelectorWdg->GetButtonGroup()->addButton( SelectPointButton ); - // Controls for tolerance defining - TextLabelTolerance = new QLabel(GroupArguments, "TextLabelTolerance"); - TextLabelTolerance->setText(tr("SMESH_TOLERANCE")); - GroupArgumentsLayout->addMultiCellWidget(TextLabelTolerance, 5, 5, 0, 1); - - SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments, "SpinBox_Tolerance"); - GroupArgumentsLayout->addWidget(SpinBox_Tolerance, 5, 2); + /***************************************************************/ + GroupButtons = new QGroupBox(this); + QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons); + GroupButtonsLayout->setSpacing(SPACING); + GroupButtonsLayout->setMargin(MARGIN); + + 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); - SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments, 1, 0); + /***************************************************************/ + SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments); + SMESHGUI_RevolutionDlgLayout->addWidget(GroupButtons); /* 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_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"); + + RadioButton3->setChecked(true); - SpinBox_Angle->RangeStepAndValidator(-999999.999, +999999.999, 5.0, 3); + SpinBox_Angle->RangeStepAndValidator(COORD_MIN, COORD_MAX, 5.0, "angle_precision"); - 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); + SpinBox_Tolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.00001, "len_tol_precision"); - GroupArguments->show(); - RadioButton1->setChecked(TRUE); + mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector(); mySMESHGUI->SetActiveDialogBox((QDialog*)this); - // Costruction of the logical filter - SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH); - SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP); - - QPtrList 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(); + /*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* ) ) ); + /* 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(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject())); + connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); + connect(buttonHelp, SIGNAL(clicked()), this, SLOT(ClickOnHelp())); + + 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(CheckIsEnable())); + connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(CheckIsEnable())); + connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(CheckIsEnable())); + connect(SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation())); + + connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), SLOT(DeactivateActiveDialog())); + connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), SLOT(SelectionIntoArgument())); + connect(SelectorWdg, SIGNAL(selectionChanged()), this, SLOT(toDisplaySimulation())); + connect(SelectorWdg, SIGNAL(selectionChanged()), this, SLOT(CheckIsEnable())); + /* to close dialog if study change */ + connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(reject())); - connect(SelectElementsButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectPointButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); - connect(SelectVectorButton, SIGNAL (clicked()), this, SLOT(SetEditCurrentArgument())); + 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(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())); + //To Connect preview check box + connectPreviewControl(); - 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 */ - - ConstructorsClicked(0); - resize(0,0); // ?? + connect(SpinBox_Angle, SIGNAL(textChanged(const QString&)), this, SLOT(onAngleTextChange(const QString&))); + + CheckIsEnable(); } //================================================================================= @@ -349,7 +317,6 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule, const char* //================================================================================= SMESHGUI_RevolutionDlg::~SMESHGUI_RevolutionDlg() { - // no need to delete child widgets, Qt does it all for us } //================================================================================= @@ -358,16 +325,6 @@ SMESHGUI_RevolutionDlg::~SMESHGUI_RevolutionDlg() //================================================================================= void SMESHGUI_RevolutionDlg::Init (bool ResetControls) { - myBusy = false; - - myEditCurrentArgument = 0; - LineEditElements->clear(); - myElementsId = ""; - myNbOkElements = 0; - - myActor = 0; - myMesh = SMESH::SMESH_Mesh::_nil(); - if (ResetControls) { SpinBox_X->SetValue(0.0); SpinBox_Y->SetValue(0.0); @@ -380,69 +337,66 @@ void SMESHGUI_RevolutionDlg::Init (bool ResetControls) SpinBox_NbSteps->setValue(1); SpinBox_Tolerance->SetValue(1e-05); - CheckBoxMesh->setChecked(false); - onSelectMesh(false); + myPreviewCheckBox->setChecked(false); + onDisplaySimulation(false); } + SelectorWdg->Clear(); } //================================================================================= -// function : ConstructorsClicked() -// purpose : Radio button management +// function : CheckIsEnable() +// purpose : Check whether the Ok and Apply buttons should be enabled or not //================================================================================= -void SMESHGUI_RevolutionDlg::ConstructorsClicked (int constructorId) -{ - disconnect(mySelectionMgr, 0, this, 0); - Selection_Mode aSelMode = ActorSelection; +void SMESHGUI_RevolutionDlg::CheckIsEnable() +{ + bool anIsEnable = SelectorWdg->IsAnythingSelected() && IsAxisOk(); - switch (constructorId) { - case 0: - { - GroupArguments->setTitle(tr("REVOLUTION_1D")); - aSelMode = EdgeSelection; - break; - } - case 1: - { - GroupArguments->setTitle(tr("REVOLUTION_2D")); - aSelMode = FaceSelection; - break; - } - } + buttonOk->setEnabled(anIsEnable); + buttonApply->setEnabled(anIsEnable); +} - if (myEditCurrentArgument != (QWidget*)LineEditElements) { - SMESH::SetPointRepresentation(false); +//================================================================================= +// function : isValid +// purpose : Return true in case if values entered into dialog are valid +//================================================================================= +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; } - - if (!CheckBoxMesh->isChecked()) - myViewWindow->SetSelectionMode(aSelMode); - - myEditCurrentArgument = (QWidget*)LineEditElements; - LineEditElements->setFocus(); - - if (CheckBoxMesh->isChecked()) - onSelectMesh(true); - - connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + return true; } //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnApply() +bool SMESHGUI_RevolutionDlg::ClickOnApply() { if (mySMESHGUI->isActiveStudyLocked()) - return; - - if (myNbOkElements && IsAxisOk()) { - QStringList aListElementsId = QStringList::split(" ", myElementsId, false); + return false; - SMESH::long_array_var anElementsId = new SMESH::long_array; + if (!isValid()) + return false; - anElementsId->length(aListElementsId.count()); - for (int i = 0; i < aListElementsId.count(); i++) - anElementsId[i] = aListElementsId[i].toInt(); + if ( SelectorWdg->IsAnythingSelected() && IsAxisOk() ) { SMESH::AxisStruct anAxis; @@ -453,23 +407,84 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() anAxis.vy = SpinBox_DY->GetValue(); anAxis.vz = SpinBox_DZ->GetValue(); - double anAngle = (SpinBox_Angle->GetValue())*PI/180; - long aNbSteps = (long)SpinBox_NbSteps->value(); + double anAngle = (SpinBox_Angle->GetValue())*M_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(); + + bool meshHadNewTypeBefore = true; + int maxSelType = 0; + const bool makeGroups = ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() ); + try { - SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor(); - QApplication::setOverrideCursor(Qt::waitCursor); - aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance); - QApplication::restoreOverrideCursor(); + SUIT_OverrideCursor aWaitCursor; + + SMESH::SMESH_Mesh_var mesh = SelectorWdg->GetMesh(); + + mesh->SetParameters( aParameters.join(":").toLatin1().constData() ); + + SMESH::ListOfIDSources_var nodes = new SMESH::ListOfIDSources(); + SMESH::ListOfIDSources_var edges = new SMESH::ListOfIDSources(); + SMESH::ListOfIDSources_var faces = new SMESH::ListOfIDSources(); + maxSelType = SelectorWdg->GetSelected( nodes, edges, faces ); + + // is it necessary to switch on the next Display Mode? + SMESH::ElementType newType = (SMESH::ElementType)( maxSelType + 1 ); + SMESH::array_of_ElementType_var oldTypes = mesh->GetTypes(); + meshHadNewTypeBefore = false; + for ( size_t i = 0; i < oldTypes->length() && !meshHadNewTypeBefore; ++i ) + meshHadNewTypeBefore = ( oldTypes[i] >= newType ); + + SMESH::SMESH_MeshEditor_var aMeshEditor = mesh->GetMeshEditor(); + + SMESH::ListOfGroups_var groups = + aMeshEditor->RotationSweepObjects( nodes, edges, faces, anAxis, + anAngle, aNbSteps, aTolerance, makeGroups); + } catch (...) { } - mySelectionMgr->clearSelected(); - SMESH::UpdateView(); + SMESH_Actor* actor = SelectorWdg->GetActor(); + if ( actor && !meshHadNewTypeBefore ) + { + unsigned int aMode = actor->GetEntityMode(); + switch ( maxSelType ) { + case SMESH::NODE: // extrude node -> edges + actor->SetRepresentation(SMESH_Actor::eEdge); + actor->SetEntityMode( aMode |= SMESH_Actor::eEdges ); break; + case SMESH::EDGE: // edge -> faces + actor->SetRepresentation(SMESH_Actor::eSurface); + actor->SetEntityMode( aMode |= SMESH_Actor::eFaces ); break; + case SMESH::FACE: // faces -> volumes + actor->SetRepresentation(SMESH_Actor::eSurface); + actor->SetEntityMode( aMode |= SMESH_Actor::eVolumes ); break; + } + } + if ( actor ) + SMESH::Update( actor->getIO(), actor->GetVisibility() ); + if ( makeGroups ) + mySMESHGUI->updateObjBrowser(true); // new groups may appear Init(false); - ConstructorsClicked(GetConstructorId()); + mySelectionMgr->clearSelected(); + SelectorWdg->Clear(); + + SMESHGUI::Modified(); } + + return true; } //================================================================================= @@ -478,88 +493,65 @@ void SMESHGUI_RevolutionDlg::ClickOnApply() //================================================================================= void SMESHGUI_RevolutionDlg::ClickOnOk() { - ClickOnApply(); - ClickOnCancel(); + if( ClickOnApply() ) + reject(); } //================================================================================= -// function : ClickOnCancel() +// function : reject() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::ClickOnCancel() +void SMESHGUI_RevolutionDlg::reject() { disconnect(mySelectionMgr, 0, this, 0); mySelectionMgr->clearFilters(); - mySelectionMgr->clearSelected(); - SMESH::SetPointRepresentation(false); - myViewWindow->SetSelectionMode(ActorSelection); + //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(); - reject(); + + QDialog::reject(); } -//======================================================================= -// function : onTextChange() +//================================================================================= +// function : ClickOnHelp() // purpose : -//======================================================================= -void SMESHGUI_RevolutionDlg::onTextChange (const QString& theNewText) +//================================================================================= +void SMESHGUI_RevolutionDlg::ClickOnHelp() { - QLineEdit* send = (QLineEdit*)sender(); - - if (myBusy) return; - myBusy = true; - - if (send == LineEditElements) - myNbOkElements = 0; - - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); - - // hilight entered elements - SMDS_Mesh* aMesh = 0; - if (myActor) - aMesh = myActor->GetObject()->GetMesh(); - - if (aMesh) { - if (send == LineEditElements) { - //mySelectionMgr->clearSelected(); - //mySelectionMgr->AddIObject(myActor->getIO()); - SALOME_ListIO aList; - aList.Append(myActor->getIO()); - mySelectionMgr->setSelectedObjects(aList, false); - - TColStd_IndexedMapOfInteger selectedIndices; - TColStd_MapOfInteger newIndices; - mySelector->GetIndex(myActor->getIO(), selectedIndices); - - QStringList aListId = QStringList::split(" ", theNewText, false); - for (int i = 0; i < aListId.count(); i++) { - const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()); - if (e) { - //if (!mySelectionMgr->IsIndexSelected(myActor->getIO(), e->GetID())) { - if (selectedIndices.Add(e->GetID())) { - //mySelectionMgr->AddOrRemoveIndex (myActor->getIO(), e->GetID(), true); - newIndices.Add(e->GetID()); - } - myNbOkElements++; - } - } - - if (newIndices.Extent() > 0) - { - mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, true); - myViewWindow->highlight( myActor->getIO(), true, true ); - } - - myElementsId = theNewText; - } - } - - if (myNbOkElements && IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); + 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)); } +} - myBusy = false; +//======================================================================= +// 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 ); } //================================================================================= @@ -568,158 +560,74 @@ void SMESHGUI_RevolutionDlg::onTextChange (const QString& theNewText) //================================================================================= void SMESHGUI_RevolutionDlg::SelectionIntoArgument() { - 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); - } - myBusy = false; - if (!GroupButtons->isEnabled()) // inactive return; + + if ( SelectVectorButton->isChecked() || + SelectPointButton->isChecked() ) + { + // get selected mesh + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); + int nbSel = aList.Extent(); + if (nbSel != 1) + return; - // get selected mesh - const SALOME_ListIO& aList = mySelector->StoredIObjects(); + Handle(SALOME_InteractiveObject) IO = aList.First(); + TColStd_IndexedMapOfInteger aMapIndex; + mySelector->GetIndex(IO,aMapIndex); + if ( aMapIndex.Extent() != 1 ) + return; - int nbSel = aList.Extent(); - if (nbSel != 1) - return; + SMESH_Actor* anActor = SMESH::FindActorByEntry( IO->getEntry() ); + SMDS_Mesh* aMesh = anActor ? anActor->GetObject()->GetMesh() : 0; + if ( !aMesh ) + return; - Handle(SALOME_InteractiveObject) IO = aList.First(); - myMesh = SMESH::GetMeshByIO(IO); - if (myMesh->_is_nil()) - return; + int aNbUnits = 0; - myActor = SMESH::FindActorByObject(myMesh); - if (!myActor) - myActor = SMESH::FindActorByEntry(IO->getEntry()); - if (!myActor) - return; + bool isNodeSelected = (myEditCurrentArgument == (QWidget*)SpinBox_X || + (myEditCurrentArgument == (QWidget*)SpinBox_DX && + myVectorDefinition==POINT_SELECT)); + + bool isFaceSelected = (myEditCurrentArgument == (QWidget*)SpinBox_DX && + myVectorDefinition==FACE_SELECT); - int aNbUnits = 0; - - if (myEditCurrentArgument == (QWidget*)LineEditElements) { - myElementsId = ""; - - if (CheckBoxMesh->isChecked()) { - int aConstructorId = GetConstructorId(); - - SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString); - - 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 ( isNodeSelected ) + { + const SMDS_MeshNode * n = aMesh->FindNode( aMapIndex(1) ); + 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()); } - } else { - aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, myActor->getIO(), aString); - myElementsId = aString; } + else if ( isFaceSelected ) + { + const SMDS_MeshFace* face = + dynamic_cast(aMesh->FindElement(aMapIndex(1))); + if (!face) + return; + gp_XYZ aNormale = SMESH::getNormale(face); + SpinBox_DX->SetValue(aNormale.X()); + SpinBox_DY->SetValue(aNormale.Y()); + SpinBox_DZ->SetValue(aNormale.Z()); - if (aNbUnits < 1) - return; - - myNbOkElements = true; - } else { - aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myActor->getIO(), aString); - if (aNbUnits != 1) - return; - - SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh(); - if (!aMesh) - 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()); } } - myBusy = true; - if (myEditCurrentArgument == (QWidget*)LineEditElements) - LineEditElements->setText(aString); - myBusy = false; - - // OK - if (myNbOkElements && IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } + CheckIsEnable(); + onDisplaySimulation(true); } //================================================================================= @@ -734,31 +642,13 @@ void SMESHGUI_RevolutionDlg::SetEditCurrentArgument() mySelectionMgr->clearSelected(); mySelectionMgr->clearFilters(); - if (send == SelectElementsButton) { - myEditCurrentArgument = (QWidget*)LineEditElements; - SMESH::SetPointRepresentation(false); - if (CheckBoxMesh->isChecked()) { - myViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - } else { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - myViewWindow->SetSelectionMode(EdgeSelection); - else if (aConstructorId == 1) - myViewWindow->SetSelectionMode(FaceSelection); - } - } else if (send == SelectPointButton) { + if (send == SelectPointButton) { myEditCurrentArgument = (QWidget*)SpinBox_X; + myEditCurrentArgument->setFocus(); SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); - } else if (send == SelectVectorButton) { - myEditCurrentArgument = (QWidget*)SpinBox_DX; - SMESH::SetPointRepresentation(true); - myViewWindow->SetSelectionMode(NodeSelection); - } else { + if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) + aViewWindow->SetSelectionMode(NodeSelection); } - - myEditCurrentArgument->setFocus(); connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); SelectionIntoArgument(); } @@ -769,10 +659,11 @@ void SMESHGUI_RevolutionDlg::SetEditCurrentArgument() //================================================================================= void SMESHGUI_RevolutionDlg::DeactivateActiveDialog() { - if (GroupConstructors->isEnabled()) { - GroupConstructors->setEnabled(false); + if (GroupButtons->isEnabled()) + { GroupArguments->setEnabled(false); GroupButtons->setEnabled(false); + SelectorWdg->setEnabled(false); mySMESHGUI->ResetState(); mySMESHGUI->SetActiveDialogBox(0); } @@ -786,14 +677,11 @@ void SMESHGUI_RevolutionDlg::ActivateThisDialog() { /* Emit a signal to deactivate the active dialog */ mySMESHGUI->EmitSignalDeactivateDialog(); - GroupConstructors->setEnabled(true); GroupArguments->setEnabled(true); GroupButtons->setEnabled(true); + SelectorWdg->setEnabled(true); mySMESHGUI->SetActiveDialogBox((QDialog*)this); - - ConstructorsClicked(GetConstructorId()); - SelectionIntoArgument(); } //================================================================================= @@ -802,100 +690,138 @@ void SMESHGUI_RevolutionDlg::ActivateThisDialog() //================================================================================= void SMESHGUI_RevolutionDlg::enterEvent (QEvent*) { - if (!GroupConstructors->isEnabled()) + if (!GroupButtons->isEnabled()) ActivateThisDialog(); } //================================================================================= -// function : closeEvent() +// function : IsAxisOk() // purpose : //================================================================================= -void SMESHGUI_RevolutionDlg::closeEvent (QCloseEvent*) -{ - /* same than click on cancel button */ - this->ClickOnCancel(); -} - -//======================================================================= -// function : hideEvent() -// purpose : caused by ESC key -//======================================================================= -void SMESHGUI_RevolutionDlg::hideEvent (QHideEvent*) +bool SMESHGUI_RevolutionDlg::IsAxisOk() { - if (!isMinimized()) - ClickOnCancel(); + return (SpinBox_DX->GetValue() != 0 || + SpinBox_DY->GetValue() != 0 || + SpinBox_DZ->GetValue() != 0); } -//======================================================================= -//function : onSelectMesh -//purpose : -//======================================================================= -void SMESHGUI_RevolutionDlg::onSelectMesh (bool toSelectMesh) +//================================================================================= +// function : keyPressEvent() +// purpose : +//================================================================================= +void SMESHGUI_RevolutionDlg::keyPressEvent( QKeyEvent* e ) { - if (toSelectMesh) - TextLabelElements->setText(tr("SMESH_NAME")); - else - TextLabelElements->setText(tr("SMESH_ID_ELEMENTS")); - - if (myEditCurrentArgument != LineEditElements) { - LineEditElements->clear(); + QDialog::keyPressEvent( e ); + if ( e->isAccepted() ) return; - } - mySelectionMgr->clearFilters(); - SMESH::SetPointRepresentation(false); - - if (toSelectMesh) { - myViewWindow->SetSelectionMode(ActorSelection); - mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter); - LineEditElements->setReadOnly(true); - } else { - int aConstructorId = GetConstructorId(); - if (aConstructorId == 0) - myViewWindow->SetSelectionMode(EdgeSelection); - else if (aConstructorId == 0) - myViewWindow->SetSelectionMode(FaceSelection); - - LineEditElements->setReadOnly(false); - onTextChange(LineEditElements->text()); + if ( e->key() == Qt::Key_F1 ) { + e->accept(); + ClickOnHelp(); } - - SelectionIntoArgument(); } //================================================================================= -// function : GetConstructorId() -// purpose : +// function : onDisplaySimulation() +// purpose : Show/Hide preview //================================================================================= -int SMESHGUI_RevolutionDlg::GetConstructorId() +void SMESHGUI_RevolutionDlg::onDisplaySimulation(bool toDisplayPreview) { - if (GroupConstructors != NULL && GroupConstructors->selected() != NULL) - return GroupConstructors->id(GroupConstructors->selected()); - return -1; + if (myPreviewCheckBox->isChecked() && toDisplayPreview) + { + if (SelectorWdg->IsAnythingSelected() && IsAxisOk()) + { + 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())*M_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_Mesh_var mesh = SelectorWdg->GetMesh(); + SMESH::SMESH_MeshEditor_var meshEditor = mesh->GetMeshEditPreviewer(); + SMESH::ListOfGroups_var groups; + + SMESH::ListOfIDSources_var nodes = new SMESH::ListOfIDSources(); + SMESH::ListOfIDSources_var edges = new SMESH::ListOfIDSources(); + SMESH::ListOfIDSources_var faces = new SMESH::ListOfIDSources(); + SelectorWdg->GetSelected( nodes, edges, faces ); + const bool makeGroups = false; + + meshEditor->RotationSweepObjects(nodes, edges, faces, + anAxis, anAngle, aNbSteps, aTolerance, makeGroups ); + + SMESH::MeshPreviewStruct_var aMeshPreviewStruct = meshEditor->GetPreviewData(); + mySimulation->SetData( aMeshPreviewStruct._retn() ); + } + catch (...) {} + } + else + { + mySimulation->SetVisibility(false); + } + } + else + { + //erase preview + mySimulation->SetVisibility(false); + } } //================================================================================= -// function : IsAxisOk() -// purpose : +// function : onSelectVectorButton() +// purpose : [slot] //================================================================================= -bool SMESHGUI_RevolutionDlg::IsAxisOk() +void SMESHGUI_RevolutionDlg::onSelectVectorButton() { - return (SpinBox_DX->GetValue() != 0 || - SpinBox_DY->GetValue() != 0 || - SpinBox_DZ->GetValue() != 0); + if(SelectVectorMenu) { + SelectVectorMenu->exec( QCursor::pos() ); + } } //================================================================================= -// function : onVectorChanged() -// purpose : +// function : onSelectVectorMenu() +// purpose : [slot] //================================================================================= -void SMESHGUI_RevolutionDlg::onVectorChanged() +void SMESHGUI_RevolutionDlg::onSelectVectorMenu( QAction* action) { - if (IsAxisOk()) { - buttonOk->setEnabled(true); - buttonApply->setEnabled(true); - } else { - buttonOk->setEnabled(false); - buttonApply->setEnabled(false); + 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(); } + +