Salome HOME
15119eca4fff895c1e3e26bb76da3807abbafe21
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_RevolutionDlg.cxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 //  This library is free software; you can redistribute it and/or
7 //  modify it under the terms of the GNU Lesser General Public
8 //  License as published by the Free Software Foundation; either
9 //  version 2.1 of the License.
10 //
11 //  This library is distributed in the hope that it will be useful,
12 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 //  Lesser General Public License for more details.
15 //
16 //  You should have received a copy of the GNU Lesser General Public
17 //  License along with this library; if not, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 // SMESH SMESHGUI : GUI for SMESH component
23 // File   : SMESHGUI_RevolutionDlg.cxx
24 // Author : Michael ZORIN, Open CASCADE S.A.S.
25 // SMESH includes
26 //
27 #include "SMESHGUI_RevolutionDlg.h"
28
29 #include "SMESHGUI.h"
30 #include "SMESHGUI_SpinBox.h"
31 #include "SMESHGUI_Utils.h"
32 #include "SMESHGUI_VTKUtils.h"
33 #include "SMESHGUI_MeshUtils.h"
34 #include "SMESHGUI_IdValidator.h"
35 #include "SMESHGUI_MeshEditPreview.h"
36 #include "SMESHGUI_FilterDlg.h"
37
38 #include <SMESH_Actor.h>
39 #include <SMESH_TypeFilter.hxx>
40 #include <SMESH_LogicalFilter.hxx>
41 #include <SMDS_Mesh.hxx>
42
43 // SALOME GUI includes
44 #include <SUIT_ResourceMgr.h>
45 #include <SUIT_Session.h>
46 #include <SUIT_MessageBox.h>
47 #include <SUIT_Desktop.h>
48 #include <SUIT_OverrideCursor.h>
49
50 #include <LightApp_Application.h>
51 #include <LightApp_SelectionMgr.h>
52 #include <SalomeApp_Application.h>
53
54 #include <SVTK_ViewWindow.h>
55 #include <SVTK_Selector.h>
56 #include <SALOME_ListIO.hxx>
57 #include <VTKViewer_CellLocationsArray.h>
58
59 // OCCT includes
60 #include <TColStd_MapOfInteger.hxx>
61
62 // Qt includes
63 #include <QApplication>
64 #include <QButtonGroup>
65 #include <QGroupBox>
66 #include <QLabel>
67 #include <QLineEdit>
68 #include <QPushButton>
69 #include <QRadioButton>
70 #include <QCheckBox>
71 #include <QHBoxLayout>
72 #include <QVBoxLayout>
73 #include <QGridLayout>
74 #include <QSpinBox>
75 #include <QKeyEvent>
76 #include <QMenu>
77
78 // IDL includes
79 #include <SALOMEconfig.h>
80 #include CORBA_SERVER_HEADER(SMESH_Group)
81 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
82
83 #define SPACING 6
84 #define MARGIN  11
85
86 //=================================================================================
87 // class    : SMESHGUI_RevolutionDlg()
88 // purpose  :
89 //=================================================================================
90 SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule )
91   : QDialog( SMESH::GetDesktop( theModule ) ),
92     mySMESHGUI( theModule ),
93     mySelectionMgr( SMESH::GetSelectionMgr( theModule ) ),
94     myVectorDefinition(NONE_SELECT),
95     myFilterDlg( 0 )
96 {
97   mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
98
99   SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
100   QPixmap image0 ( mgr->loadPixmap("SMESH", tr("ICON_DLG_EDGE")));
101   QPixmap image1 ( mgr->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE")));
102   QPixmap image2 ( mgr->loadPixmap("SMESH", tr("ICON_SELECT")));
103
104   setModal(false);
105   setAttribute(Qt::WA_DeleteOnClose, true);
106   setWindowTitle(tr("REVOLUTION_AROUND_AXIS"));
107   setSizeGripEnabled(true);
108   
109   QVBoxLayout* SMESHGUI_RevolutionDlgLayout = new QVBoxLayout(this);
110   SMESHGUI_RevolutionDlgLayout->setSpacing(SPACING);
111   SMESHGUI_RevolutionDlgLayout->setMargin(MARGIN);
112
113   /***************************************************************/
114   ConstructorsBox = new QGroupBox(tr("SMESH_REVOLUTION"), this);
115   GroupConstructors = new QButtonGroup(this);
116   QHBoxLayout* ConstructorsBoxLayout = new QHBoxLayout(ConstructorsBox);
117   ConstructorsBoxLayout->setSpacing(SPACING);
118   ConstructorsBoxLayout->setMargin(MARGIN);
119
120   RadioButton1 = new QRadioButton(ConstructorsBox);
121   RadioButton1->setIcon(image0);
122   RadioButton2 = new QRadioButton(ConstructorsBox);
123   RadioButton2->setIcon(image1);
124
125   ConstructorsBoxLayout->addWidget(RadioButton1);
126   ConstructorsBoxLayout->addWidget(RadioButton2);
127   GroupConstructors->addButton(RadioButton1, 0);
128   GroupConstructors->addButton(RadioButton2, 1);
129
130   /***************************************************************/
131   GroupArguments = new QGroupBox(tr("REVOLUTION_1D"), this);
132   QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments);
133   GroupArgumentsLayout->setSpacing(SPACING);
134   GroupArgumentsLayout->setMargin(MARGIN);
135
136   myIdValidator = new SMESHGUI_IdValidator(this);
137
138   // Controls for elements selection
139   TextLabelElements = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments);
140
141   SelectElementsButton = new QPushButton(GroupArguments);
142   SelectElementsButton->setIcon(image2);
143
144   LineEditElements  = new QLineEdit(GroupArguments);
145   LineEditElements->setValidator(myIdValidator);
146   QPushButton* filterBtn = new QPushButton( tr( "SMESH_BUT_FILTER" ), GroupArguments );
147   connect(filterBtn,   SIGNAL(clicked()), this, SLOT(setFilters()));
148
149   // Control for the whole mesh selection
150   CheckBoxMesh = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments);
151
152   // Controls for axis defining
153   GroupAxis = new QGroupBox(tr("SMESH_AXIS"), GroupArguments);
154   QGridLayout* GroupAxisLayout = new QGridLayout(GroupAxis);
155   GroupAxisLayout->setSpacing(SPACING);
156   GroupAxisLayout->setMargin(MARGIN);
157
158   TextLabelPoint = new QLabel(tr("SMESH_POINT"), GroupAxis);
159   SelectPointButton  = new QPushButton(GroupAxis);
160   SelectPointButton->setIcon(image2);
161
162   TextLabelX = new QLabel(tr("SMESH_X"), GroupAxis);
163   SpinBox_X = new SMESHGUI_SpinBox(GroupAxis);
164
165   TextLabelY = new QLabel(tr("SMESH_Y"), GroupAxis);
166   SpinBox_Y = new SMESHGUI_SpinBox(GroupAxis);
167
168   TextLabelZ = new QLabel(tr("SMESH_Z"), GroupAxis);
169   SpinBox_Z = new SMESHGUI_SpinBox(GroupAxis);
170
171   TextLabelVector = new QLabel(tr("SMESH_VECTOR"), GroupAxis);
172   SelectVectorButton = new QPushButton(GroupAxis);
173   SelectVectorButton->setIcon(image2);
174
175   TextLabelDX = new QLabel(tr("SMESH_DX"), GroupAxis);
176   SpinBox_DX = new SMESHGUI_SpinBox(GroupAxis);
177
178   TextLabelDY = new QLabel(tr("SMESH_DY"), GroupAxis);
179   SpinBox_DY = new SMESHGUI_SpinBox(GroupAxis);
180
181   TextLabelDZ = new QLabel(tr("SMESH_DZ"), GroupAxis);
182   SpinBox_DZ = new SMESHGUI_SpinBox(GroupAxis);
183
184   GroupAxisLayout->addWidget(TextLabelPoint,     0, 0);
185   GroupAxisLayout->addWidget(SelectPointButton,  0, 1);
186   GroupAxisLayout->addWidget(TextLabelX,         0, 2);
187   GroupAxisLayout->addWidget(SpinBox_X,          0, 3);
188   GroupAxisLayout->addWidget(TextLabelY,         0, 4);
189   GroupAxisLayout->addWidget(SpinBox_Y,          0, 5);
190   GroupAxisLayout->addWidget(TextLabelZ,         0, 6);
191   GroupAxisLayout->addWidget(SpinBox_Z,          0, 7);
192   GroupAxisLayout->addWidget(TextLabelVector,    1, 0);
193   GroupAxisLayout->addWidget(SelectVectorButton, 1, 1);
194   GroupAxisLayout->addWidget(TextLabelDX,        1, 2);
195   GroupAxisLayout->addWidget(SpinBox_DX,         1, 3);
196   GroupAxisLayout->addWidget(TextLabelDY,        1, 4);
197   GroupAxisLayout->addWidget(SpinBox_DY,         1, 5);
198   GroupAxisLayout->addWidget(TextLabelDZ,        1, 6);
199   GroupAxisLayout->addWidget(SpinBox_DZ,         1, 7);
200
201   // Controls for angle defining & number of steps defining
202   GroupAngleBox = new QGroupBox(tr("SMESH_ANGLE"), GroupArguments);
203   GroupAngle = new QButtonGroup(GroupAngleBox);
204   QGridLayout* GroupAngleLayout = new QGridLayout(GroupAngleBox);
205   GroupAngleLayout->setSpacing(6);
206   GroupAngleLayout->setMargin(11);
207
208   RadioButton3 = new QRadioButton(tr("ANGLE_BY_STEP"), GroupAngleBox);
209   RadioButton4 = new QRadioButton(tr("TOTAL_ANGLE"),   GroupAngleBox);
210   GroupAngle->addButton(RadioButton3, 0);
211   GroupAngle->addButton(RadioButton4, 1);
212
213   TextLabelAngle = new QLabel(tr("SMESH_ANGLE"), GroupAngleBox);
214   SpinBox_Angle = new SMESHGUI_SpinBox(GroupAngleBox);
215
216   TextLabelNbSteps = new QLabel(tr("SMESH_NUMBEROFSTEPS"), GroupAngleBox);
217   SpinBox_NbSteps = new QSpinBox(GroupAngleBox);
218
219   GroupAngleLayout->addWidget(RadioButton3,     0, 0);
220   GroupAngleLayout->addWidget(RadioButton4,     0, 1);
221   GroupAngleLayout->addWidget(TextLabelAngle,   1, 0);
222   GroupAngleLayout->addWidget(SpinBox_Angle,    1, 1);
223   GroupAngleLayout->addWidget(TextLabelNbSteps, 2, 0);
224   GroupAngleLayout->addWidget(SpinBox_NbSteps,  2, 1);
225
226   // Controls for tolerance defining
227   TextLabelTolerance = new QLabel(tr("SMESH_TOLERANCE"), GroupArguments);
228   SpinBox_Tolerance = new SMESHGUI_SpinBox(GroupArguments);
229
230   // Control for mesh preview
231   CheckBoxPreview = new QCheckBox(tr("PREVIEW"), GroupArguments);
232
233   // CheckBox for groups generation
234   MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
235   MakeGroupsCheck->setChecked(true);
236
237   GroupArgumentsLayout->addWidget(TextLabelElements,    0, 0);
238   GroupArgumentsLayout->addWidget(SelectElementsButton, 0, 1);
239   GroupArgumentsLayout->addWidget(LineEditElements,     0, 2);
240   GroupArgumentsLayout->addWidget(filterBtn,            0, 3);
241   GroupArgumentsLayout->addWidget(CheckBoxMesh,         1, 0, 1, 4);
242   GroupArgumentsLayout->addWidget(GroupAxis,            2, 0, 1, 4);
243   GroupArgumentsLayout->addWidget(GroupAngleBox,        3, 0, 1, 4);
244   GroupArgumentsLayout->addWidget(TextLabelTolerance,   4, 0, 1, 2);
245   GroupArgumentsLayout->addWidget(SpinBox_Tolerance,    4, 2, 1, 2);
246   GroupArgumentsLayout->addWidget(CheckBoxPreview,      5, 0, 1, 4);
247   GroupArgumentsLayout->addWidget(MakeGroupsCheck,      6, 0, 1, 4);
248
249   /***************************************************************/
250   GroupButtons = new QGroupBox(this);
251   QHBoxLayout* GroupButtonsLayout = new QHBoxLayout(GroupButtons);
252   GroupButtonsLayout->setSpacing(SPACING);
253   GroupButtonsLayout->setMargin(MARGIN);
254   
255   buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), GroupButtons);
256   buttonOk->setAutoDefault(true);
257   buttonOk->setDefault(true);
258   buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
259   buttonApply->setAutoDefault(true);
260   buttonCancel = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons);
261   buttonCancel->setAutoDefault(true);
262   buttonHelp = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons);
263   buttonHelp->setAutoDefault(true);
264
265   GroupButtonsLayout->addWidget(buttonOk);
266   GroupButtonsLayout->addSpacing(10);
267   GroupButtonsLayout->addWidget(buttonApply);
268   GroupButtonsLayout->addSpacing(10);
269   GroupButtonsLayout->addStretch();
270   GroupButtonsLayout->addWidget(buttonCancel);
271   GroupButtonsLayout->addWidget(buttonHelp);
272
273   /***************************************************************/
274   SMESHGUI_RevolutionDlgLayout->addWidget(ConstructorsBox);
275   SMESHGUI_RevolutionDlgLayout->addWidget(GroupArguments);
276   SMESHGUI_RevolutionDlgLayout->addWidget(GroupButtons);
277
278   /* Initialisations */
279   SpinBox_X->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
280   SpinBox_Y->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
281   SpinBox_Z->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
282   SpinBox_DX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
283   SpinBox_DY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
284   SpinBox_DZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
285
286   RadioButton3->setChecked(true);
287
288   SpinBox_Angle->RangeStepAndValidator(COORD_MIN, COORD_MAX, 5.0, 3);
289
290   SpinBox_NbSteps->setRange(1, 999999);
291
292   SpinBox_Tolerance->RangeStepAndValidator(0.0, COORD_MAX, 0.00001, 6);
293
294   RadioButton1->setChecked(true);
295
296   mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
297
298   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
299
300   // Costruction of the logical filter
301   SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
302   SMESH_TypeFilter* aSmeshGroupFilter    = new SMESH_TypeFilter (GROUP);
303
304   QList<SUIT_SelectionFilter*> aListOfFilters;
305   if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
306   if (aSmeshGroupFilter)    aListOfFilters.append(aSmeshGroupFilter);
307
308   myMeshOrSubMeshOrGroupFilter =
309     new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
310
311   myHelpFileName = "revolution_page.html";
312
313   Init();
314
315   /*Create menu to vector selection*/
316   SelectVectorMenu = new QMenu(this);
317   myMenuActions[SelectVectorMenu->addAction( tr( "MEN_POINT_SELECT" ) )] = POINT_SELECT;
318   myMenuActions[SelectVectorMenu->addAction( tr( "MEN_FACE_SELECT" ) )] = FACE_SELECT;
319   connect( SelectVectorMenu, SIGNAL( triggered( QAction* ) ), SLOT( onSelectVectorMenu( QAction* ) ) );
320
321   /* signals and slots connections */
322   connect(buttonOk,     SIGNAL(clicked()), this, SLOT(ClickOnOk()));
323   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
324   connect(buttonApply,  SIGNAL(clicked()), this, SLOT(ClickOnApply()));
325   connect(buttonHelp,   SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
326   connect(GroupConstructors, SIGNAL(buttonClicked(int)), SLOT(ConstructorsClicked(int)));
327
328   connect(SelectElementsButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
329   connect(SelectPointButton,    SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
330   connect(SelectVectorButton,   SIGNAL(clicked()), this, SLOT(onSelectVectorButton()));
331
332   connect(SpinBox_X,  SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation()));
333   connect(SpinBox_Y,  SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation()));
334   connect(SpinBox_Z,  SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation()));
335
336   connect(SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged()));
337   connect(SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged()));
338   connect(SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(onVectorChanged()));
339
340   connect(mySMESHGUI,     SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
341   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()),      this, SLOT(SelectionIntoArgument()));
342   /* to close dialog if study change */
343   connect(mySMESHGUI,       SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
344   connect(LineEditElements, SIGNAL(textChanged(const QString&)),   SLOT(onTextChange(const QString&)));
345   connect(CheckBoxMesh,     SIGNAL(toggled(bool)),                 SLOT(onSelectMesh(bool)));
346
347   connect(GroupAngle,        SIGNAL(buttonClicked(int)),   this, SLOT(toDisplaySimulation()));
348   connect(SpinBox_Angle,     SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation()));
349   connect(SpinBox_NbSteps,   SIGNAL(valueChanged(int)),    this, SLOT(toDisplaySimulation()));
350   connect(SpinBox_Tolerance, SIGNAL(valueChanged(double)), this, SLOT(toDisplaySimulation()));
351   connect(CheckBoxPreview,   SIGNAL(toggled(bool)),        this, SLOT(onDisplaySimulation(bool)));
352
353   ConstructorsClicked(0);
354   SelectionIntoArgument();
355 }
356
357 //=================================================================================
358 // function : ~SMESHGUI_RevolutionDlg()
359 // purpose  : Destroys the object and frees any allocated resources
360 //=================================================================================
361 SMESHGUI_RevolutionDlg::~SMESHGUI_RevolutionDlg()
362 {
363   delete mySimulation;
364   if ( myFilterDlg ) {
365     myFilterDlg->setParent( 0 );
366     delete myFilterDlg;
367     myFilterDlg = 0;
368   }
369 }
370
371 //=================================================================================
372 // function : Init()
373 // purpose  :
374 //=================================================================================
375 void SMESHGUI_RevolutionDlg::Init (bool ResetControls)
376 {
377   myBusy = false;
378
379   myEditCurrentArgument = 0;
380   LineEditElements->clear();
381   myElementsId = "";
382   myNbOkElements = 0;
383
384   myActor = 0;
385   myMesh = SMESH::SMESH_Mesh::_nil();
386
387   if (ResetControls) {
388     SpinBox_X->SetValue(0.0);
389     SpinBox_Y->SetValue(0.0);
390     SpinBox_Z->SetValue(0.0);
391     SpinBox_DX->SetValue(0.0);
392     SpinBox_DY->SetValue(0.0);
393     SpinBox_DZ->SetValue(0.0);
394
395     SpinBox_Angle->SetValue(45);
396     SpinBox_NbSteps->setValue(1);
397     SpinBox_Tolerance->SetValue(1e-05);
398
399     CheckBoxMesh->setChecked(false);
400     onSelectMesh(false);
401     CheckBoxPreview->setChecked(false);
402     onDisplaySimulation(false);
403   }
404 }
405
406 //=================================================================================
407 // function : ConstructorsClicked()
408 // purpose  : Radio button management
409 //=================================================================================
410 void SMESHGUI_RevolutionDlg::ConstructorsClicked (int constructorId)
411 {
412   //disconnect(mySelectionMgr, 0, this, 0);
413
414   SALOME_ListIO io;
415   mySelectionMgr->selectedObjects( io );
416   SALOME_ListIO aList;
417   mySelectionMgr->setSelectedObjects( aList );
418 //   LineEditElements->clear();
419   myNbOkElements = 0;
420   buttonApply->setEnabled(false);
421   buttonOk->setEnabled(false);
422   mySimulation->SetVisibility(false);
423
424   Selection_Mode aSelMode = ActorSelection;
425
426   switch (constructorId) {
427   case 0:
428     {
429       GroupArguments->setTitle(tr("REVOLUTION_1D"));
430       aSelMode = EdgeSelection;
431       break;
432     }
433   case 1:
434     {
435       GroupArguments->setTitle(tr("REVOLUTION_2D"));
436       aSelMode = FaceSelection;
437       break;
438     }
439   }
440
441   if (myEditCurrentArgument != (QWidget*)LineEditElements) {
442     SMESH::SetPointRepresentation(false);
443   }
444
445   if (!CheckBoxMesh->isChecked())
446     {
447       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
448         aViewWindow->SetSelectionMode(aSelMode);
449     }
450
451   myEditCurrentArgument = (QWidget*)LineEditElements;
452   LineEditElements->setFocus();
453
454   if (CheckBoxMesh->isChecked())
455     onSelectMesh(true);
456
457   //connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
458   mySelectionMgr->setSelectedObjects( io );
459 }
460
461 //=================================================================================
462 // function : ClickOnApply()
463 // purpose  :
464 //=================================================================================
465 void SMESHGUI_RevolutionDlg::ClickOnApply()
466 {
467   if (mySMESHGUI->isActiveStudyLocked())
468     return;
469
470   if (myNbOkElements && IsAxisOk()) {
471     QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
472
473     SMESH::long_array_var anElementsId = new SMESH::long_array;
474
475     anElementsId->length(aListElementsId.count());
476     for (int i = 0; i < aListElementsId.count(); i++)
477       anElementsId[i] = aListElementsId[i].toInt();
478
479     SMESH::AxisStruct anAxis;
480
481     anAxis.x =  SpinBox_X->GetValue();
482     anAxis.y =  SpinBox_Y->GetValue();
483     anAxis.z =  SpinBox_Z->GetValue();;
484     anAxis.vx = SpinBox_DX->GetValue();
485     anAxis.vy = SpinBox_DY->GetValue();
486     anAxis.vz = SpinBox_DZ->GetValue();
487
488     double anAngle = (SpinBox_Angle->GetValue())*PI/180;
489     long aNbSteps = (long)SpinBox_NbSteps->value();
490     double aTolerance = SpinBox_Tolerance->GetValue();
491
492     if ( GroupAngle->checkedId() == 1 )
493       anAngle = anAngle/aNbSteps;
494
495     try {
496       SUIT_OverrideCursor aWaitCursor;
497       SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
498       
499       if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
500         SMESH::ListOfGroups_var groups = 
501           aMeshEditor->RotationSweepMakeGroups(anElementsId.inout(), anAxis,
502                                                anAngle, aNbSteps, aTolerance);
503       else
504         aMeshEditor->RotationSweep(anElementsId.inout(), anAxis, anAngle, aNbSteps, aTolerance);
505     } catch (...) {
506     }
507
508     SMESH::UpdateView();
509     if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
510       mySMESHGUI->updateObjBrowser(true); // new groups may appear
511     Init(false);
512     ConstructorsClicked(GetConstructorId());
513     SelectionIntoArgument();
514   }
515 }
516
517 //=================================================================================
518 // function : ClickOnOk()
519 // purpose  :
520 //=================================================================================
521 void SMESHGUI_RevolutionDlg::ClickOnOk()
522 {
523   ClickOnApply();
524   ClickOnCancel();
525 }
526
527 //=================================================================================
528 // function : ClickOnCancel()
529 // purpose  :
530 //=================================================================================
531 void SMESHGUI_RevolutionDlg::ClickOnCancel()
532 {
533   disconnect(mySelectionMgr, 0, this, 0);
534   mySelectionMgr->clearFilters();
535   //mySelectionMgr->clearSelected();
536   if (SMESH::GetCurrentVtkView()) {
537     SMESH::RemoveFilters(); // PAL6938 -- clean all mesh entity filters
538     SMESH::SetPointRepresentation(false);
539   }
540   if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
541     aViewWindow->SetSelectionMode(ActorSelection);
542   mySMESHGUI->ResetState();
543   reject();
544 }
545
546 //=================================================================================
547 // function : ClickOnHelp()
548 // purpose  :
549 //=================================================================================
550 void SMESHGUI_RevolutionDlg::ClickOnHelp()
551 {
552   LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
553   if (app) 
554     app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
555   else {
556     QString platform;
557 #ifdef WIN32
558     platform = "winapplication";
559 #else
560     platform = "application";
561 #endif
562     SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
563                              tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
564                              arg(app->resourceMgr()->stringValue("ExternalBrowser", 
565                                                                  platform)).
566                              arg(myHelpFileName));
567   }
568 }
569
570 //=======================================================================
571 // function : onTextChange()
572 // purpose  :
573 //=======================================================================
574 void SMESHGUI_RevolutionDlg::onTextChange (const QString& theNewText)
575 {
576   QLineEdit* send = (QLineEdit*)sender();
577
578   if (myBusy) return;
579   myBusy = true;
580
581   if (send == LineEditElements)
582     myNbOkElements = 0;
583
584   buttonOk->setEnabled(false);
585   buttonApply->setEnabled(false);
586
587   // hilight entered elements
588   SMDS_Mesh* aMesh = 0;
589   if (myActor)
590     aMesh = myActor->GetObject()->GetMesh();
591
592   if (aMesh) {
593     if (send == LineEditElements) {
594       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
595
596       TColStd_MapOfInteger newIndices;
597
598       QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
599       
600       for (int i = 0; i < aListId.count(); i++) {
601         const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt());
602         if (e)
603           newIndices.Add(e->GetID());
604         myNbOkElements++;
605       }
606
607       mySelector->AddOrRemoveIndex(myActor->getIO(), newIndices, false);
608       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
609         aViewWindow->highlight( myActor->getIO(), true, true );
610       
611       myElementsId = theNewText;
612     }
613   }
614
615   if (myNbOkElements && IsAxisOk()) {
616     buttonOk->setEnabled(true);
617     buttonApply->setEnabled(true);
618   }
619   onDisplaySimulation(true);
620
621   myBusy = false;
622 }
623
624 //=================================================================================
625 // function : SelectionIntoArgument()
626 // purpose  : Called when selection as changed or other case
627 //=================================================================================
628 void SMESHGUI_RevolutionDlg::SelectionIntoArgument()
629 {
630   if (myBusy) return;
631
632   // clear
633   myActor = 0;
634   QString aString = "";
635
636   myBusy = true;
637   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
638     LineEditElements->setText(aString);
639     myNbOkElements = 0;
640     buttonOk->setEnabled(false);
641     buttonApply->setEnabled(false);
642   }
643   myBusy = false;
644
645   if (!GroupButtons->isEnabled()) // inactive
646     return;
647
648   // get selected mesh
649   const SALOME_ListIO& aList = mySelector->StoredIObjects();
650
651   int nbSel = aList.Extent();
652   if (nbSel != 1)
653     return;
654
655   Handle(SALOME_InteractiveObject) IO = aList.First();
656   myMesh = SMESH::GetMeshByIO(IO);
657   if (myMesh->_is_nil())
658     return;
659
660   myActor = SMESH::FindActorByObject(myMesh);
661   if (!myActor)
662     myActor = SMESH::FindActorByEntry(IO->getEntry());
663   if (!myActor)
664     return;
665
666   int aNbUnits = 0;
667
668   if (myEditCurrentArgument == (QWidget*)LineEditElements) {
669     myElementsId = "";
670
671     // MakeGroups is available if there are groups
672     if ( myMesh->NbGroups() == 0 ) {
673       MakeGroupsCheck->setChecked(false);
674       MakeGroupsCheck->setEnabled(false);
675     } else {
676       MakeGroupsCheck->setEnabled(true);
677     }
678
679     if (CheckBoxMesh->isChecked()) {
680       int aConstructorId = GetConstructorId();
681
682       SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
683
684       if (!SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO)->_is_nil()) { //MESH
685         // get IDs from mesh
686         SMDS_Mesh* aSMDSMesh = myActor->GetObject()->GetMesh();
687         if (!aSMDSMesh)
688           return;
689
690         if (aConstructorId == 0) {
691           SMDS_EdgeIteratorPtr anIter = aSMDSMesh->edgesIterator();
692
693           while (anIter->more()) {
694             const SMDS_MeshEdge * edge = anIter->next();
695             if (edge) {
696               myElementsId += QString(" %1").arg(edge->GetID());
697               aNbUnits++;
698             }
699           }
700         } else if (aConstructorId == 1) {
701           SMDS_FaceIteratorPtr anIter = aSMDSMesh->facesIterator();
702           while (anIter->more()) {
703             const SMDS_MeshFace * face = anIter->next();
704             if (face) {
705               myElementsId += QString(" %1").arg(face->GetID());
706               aNbUnits++;
707             }
708           }
709         }
710       } else if (!SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO)->_is_nil()) { //SUBMESH
711         // get submesh
712         SMESH::SMESH_subMesh_var aSubMesh = SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(IO);
713
714         // get IDs from submesh
715         SMESH::long_array_var anElementsIds = new SMESH::long_array;
716         if (aConstructorId == 0)
717           anElementsIds = aSubMesh->GetElementsByType(SMESH::EDGE);
718         else if (aConstructorId == 1)
719           anElementsIds = aSubMesh->GetElementsByType(SMESH::FACE);
720
721         for (int i = 0; i < anElementsIds->length(); i++)
722           myElementsId += QString(" %1").arg(anElementsIds[i]);
723         aNbUnits = anElementsIds->length();
724       } else { // GROUP
725         // get smesh group
726         SMESH::SMESH_GroupBase_var aGroup =
727           SMESH::IObjectToInterface<SMESH::SMESH_GroupBase>(IO);
728         if (aGroup->_is_nil())
729           return;
730
731         if ((aConstructorId == 0 && aGroup->GetType()!= SMESH::EDGE) ||
732             (aConstructorId == 1 && aGroup->GetType()!= SMESH::FACE))
733           return;
734
735         // get IDs from smesh group
736         SMESH::long_array_var anElementsIds = new SMESH::long_array;
737         anElementsIds = aGroup->GetListOfID();
738         for (int i = 0; i < anElementsIds->length(); i++) {
739           myElementsId += QString(" %1").arg(anElementsIds[i]);
740         }
741         aNbUnits = anElementsIds->length();
742       }
743     } else {
744       aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
745       myElementsId = aString;
746     }
747
748     if (aNbUnits < 1)
749       return;
750
751     myNbOkElements = true;
752   } else {
753
754     SMDS_Mesh* aMesh =  myActor->GetObject()->GetMesh();
755     if (!aMesh)
756       return;
757
758     bool isNodeSelected = (myEditCurrentArgument == (QWidget*)SpinBox_X ||
759                            (myEditCurrentArgument == (QWidget*)SpinBox_DX && 
760                             myVectorDefinition==POINT_SELECT));
761
762     bool isFaceSelected = (myEditCurrentArgument == (QWidget*)SpinBox_DX && 
763                            myVectorDefinition==FACE_SELECT);
764
765     if(isNodeSelected) {
766       aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, IO, aString);
767     }
768     else if(isFaceSelected){
769       aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
770     }
771     
772     if (aNbUnits != 1)
773       return;
774
775     if(isNodeSelected) {
776       const SMDS_MeshNode * n = aMesh->FindNode(aString.toInt());
777       if (!n)
778         return;
779
780       double x = n->X();
781       double y = n->Y();
782       double z = n->Z();
783
784       if (myEditCurrentArgument == (QWidget*)SpinBox_X) {
785         SpinBox_X->SetValue(x);
786         SpinBox_Y->SetValue(y);
787         SpinBox_Z->SetValue(z);
788       } else if (myEditCurrentArgument == (QWidget*)SpinBox_DX) {
789         SpinBox_DX->SetValue(x - SpinBox_X->GetValue());
790         SpinBox_DY->SetValue(y - SpinBox_Y->GetValue());
791         SpinBox_DZ->SetValue(z - SpinBox_Z->GetValue());
792       }
793     }
794     else if(isFaceSelected){
795       const SMDS_MeshFace* face = dynamic_cast<const SMDS_MeshFace*>(aMesh->FindElement(aString.toInt()));
796       if (!face)
797         return;
798       
799       gp_XYZ aNormale = SMESH::getNormale(face);
800       SpinBox_DX->SetValue(aNormale.X());
801       SpinBox_DY->SetValue(aNormale.Y());
802       SpinBox_DZ->SetValue(aNormale.Z());
803       
804     }
805   }
806
807   myBusy = true;
808   if (myEditCurrentArgument == (QWidget*)LineEditElements)
809     LineEditElements->setText(aString);
810   myBusy = false;
811
812   // OK
813   if (myNbOkElements && IsAxisOk()) {
814     buttonOk->setEnabled(true);
815     buttonApply->setEnabled(true);
816   }
817
818   onDisplaySimulation(true);
819 }
820
821 //=================================================================================
822 // function : SetEditCurrentArgument()
823 // purpose  :
824 //=================================================================================
825 void SMESHGUI_RevolutionDlg::SetEditCurrentArgument()
826 {
827   QPushButton* send = (QPushButton*)sender();
828
829   disconnect(mySelectionMgr, 0, this, 0);
830   mySelectionMgr->clearSelected();
831   mySelectionMgr->clearFilters();
832
833   if (send == SelectElementsButton) {
834     mySimulation->SetVisibility(false);
835     myEditCurrentArgument = (QWidget*)LineEditElements;
836     SMESH::SetPointRepresentation(false);
837     if (CheckBoxMesh->isChecked()) {
838       if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
839         aViewWindow->SetSelectionMode(ActorSelection);
840       mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
841     } else {
842       int aConstructorId = GetConstructorId();
843       if (aConstructorId == 0)
844         {
845           if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
846             aViewWindow->SetSelectionMode(EdgeSelection);
847         }
848       else if (aConstructorId == 1)
849         {
850           if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
851             aViewWindow->SetSelectionMode(FaceSelection);
852         }
853     }
854   } else if (send == SelectPointButton) {
855     myEditCurrentArgument = (QWidget*)SpinBox_X;
856     SMESH::SetPointRepresentation(true);
857     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
858       aViewWindow->SetSelectionMode(NodeSelection);
859   }
860
861   myEditCurrentArgument->setFocus();
862   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
863   SelectionIntoArgument();
864 }
865
866 //=================================================================================
867 // function : DeactivateActiveDialog()
868 // purpose  :
869 //=================================================================================
870 void SMESHGUI_RevolutionDlg::DeactivateActiveDialog()
871 {
872   if (ConstructorsBox->isEnabled()) {
873     ConstructorsBox->setEnabled(false);
874     GroupArguments->setEnabled(false);
875     GroupButtons->setEnabled(false);
876     mySMESHGUI->ResetState();
877     mySMESHGUI->SetActiveDialogBox(0);
878   }
879 }
880
881 //=================================================================================
882 // function : ActivateThisDialog()
883 // purpose  :
884 //=================================================================================
885 void SMESHGUI_RevolutionDlg::ActivateThisDialog()
886 {
887   /* Emit a signal to deactivate the active dialog */
888   mySMESHGUI->EmitSignalDeactivateDialog();
889   ConstructorsBox->setEnabled(true);
890   GroupArguments->setEnabled(true);
891   GroupButtons->setEnabled(true);
892
893   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
894
895   ConstructorsClicked(GetConstructorId());
896   SelectionIntoArgument();
897 }
898
899 //=================================================================================
900 // function : enterEvent()
901 // purpose  :
902 //=================================================================================
903 void SMESHGUI_RevolutionDlg::enterEvent (QEvent*)
904 {
905   if (!ConstructorsBox->isEnabled())
906     ActivateThisDialog();
907 }
908
909 //=================================================================================
910 // function : closeEvent()
911 // purpose  :
912 //=================================================================================
913 void SMESHGUI_RevolutionDlg::closeEvent (QCloseEvent*)
914 {
915   /* same than click on cancel button */
916   ClickOnCancel();
917 }
918
919 //=======================================================================
920 // function : hideEvent()
921 // purpose  : caused by ESC key
922 //=======================================================================
923 void SMESHGUI_RevolutionDlg::hideEvent (QHideEvent*)
924 {
925   if (!isMinimized())
926     ClickOnCancel();
927 }
928
929 //=======================================================================
930 //function : onSelectMesh
931 //purpose  :
932 //=======================================================================
933 void SMESHGUI_RevolutionDlg::onSelectMesh (bool toSelectMesh)
934 {
935   if (toSelectMesh)
936     TextLabelElements->setText(tr("SMESH_NAME"));
937   else
938     TextLabelElements->setText(tr("SMESH_ID_ELEMENTS"));
939
940   if (myEditCurrentArgument != LineEditElements) {
941     LineEditElements->clear();
942     mySimulation->SetVisibility(false);
943     return;
944   }
945
946   mySelectionMgr->clearFilters();
947   SMESH::SetPointRepresentation(false);
948
949   if (toSelectMesh) {
950     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
951       aViewWindow->SetSelectionMode(ActorSelection);
952     mySelectionMgr->installFilter(myMeshOrSubMeshOrGroupFilter);
953     LineEditElements->setReadOnly(true);
954     LineEditElements->setValidator(0);
955   } else {
956     int aConstructorId = GetConstructorId();
957     if (aConstructorId == 0)
958       {
959         if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
960           aViewWindow->SetSelectionMode(EdgeSelection);
961       }
962     else if (aConstructorId == 0)
963       {
964         if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
965           aViewWindow->SetSelectionMode(FaceSelection);
966       }
967
968     LineEditElements->setReadOnly(false);
969     LineEditElements->setValidator(myIdValidator);
970     onTextChange(LineEditElements->text());
971     mySimulation->SetVisibility(false);
972   }
973
974   SelectionIntoArgument();
975 }
976
977 //=================================================================================
978 // function : GetConstructorId()
979 // purpose  :
980 //=================================================================================
981 int SMESHGUI_RevolutionDlg::GetConstructorId()
982 {
983   return GroupConstructors->checkedId();
984 }
985
986 //=================================================================================
987 // function : IsAxisOk()
988 // purpose  :
989 //=================================================================================
990 bool SMESHGUI_RevolutionDlg::IsAxisOk()
991 {
992   return (SpinBox_DX->GetValue() != 0 ||
993           SpinBox_DY->GetValue() != 0 ||
994           SpinBox_DZ->GetValue() != 0);
995 }
996
997 //=================================================================================
998 // function : onVectorChanged()
999 // purpose  :
1000 //=================================================================================
1001 void SMESHGUI_RevolutionDlg::onVectorChanged()
1002 {
1003   if (IsAxisOk()) {
1004     buttonOk->setEnabled(true);
1005     buttonApply->setEnabled(true);
1006   } else {
1007     buttonOk->setEnabled(false);
1008     buttonApply->setEnabled(false);
1009   }
1010   onDisplaySimulation(true);
1011 }
1012
1013 //=================================================================================
1014 // function : keyPressEvent()
1015 // purpose  :
1016 //=================================================================================
1017 void SMESHGUI_RevolutionDlg::keyPressEvent( QKeyEvent* e )
1018 {
1019   QDialog::keyPressEvent( e );
1020   if ( e->isAccepted() )
1021     return;
1022
1023   if ( e->key() == Qt::Key_F1 ) {
1024     e->accept();
1025     ClickOnHelp();
1026   }
1027 }
1028
1029 //=================================================================================
1030 // function : toDisplaySimulation()
1031 // purpose  :
1032 //=================================================================================
1033 void SMESHGUI_RevolutionDlg::toDisplaySimulation()
1034 {
1035   onDisplaySimulation(true);
1036 }
1037
1038 //=================================================================================
1039 // function : onDisplaySimulation()
1040 // purpose  :
1041 //=================================================================================
1042 void SMESHGUI_RevolutionDlg::onDisplaySimulation(bool toDisplayPreview)
1043 {
1044   if (CheckBoxPreview->isChecked() && toDisplayPreview)
1045   {
1046     //display preview
1047     if (myNbOkElements && IsAxisOk())
1048     {
1049       QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
1050       
1051       SMESH::long_array_var anElementsId = new SMESH::long_array;
1052       
1053       anElementsId->length(aListElementsId.count());
1054       for (int i = 0; i < aListElementsId.count(); i++)
1055         anElementsId[i] = aListElementsId[i].toInt();
1056       
1057       SMESH::AxisStruct anAxis;
1058       
1059       anAxis.x =  SpinBox_X->GetValue();
1060       anAxis.y =  SpinBox_Y->GetValue();
1061       anAxis.z =  SpinBox_Z->GetValue();
1062       anAxis.vx = SpinBox_DX->GetValue();
1063       anAxis.vy = SpinBox_DY->GetValue();
1064       anAxis.vz = SpinBox_DZ->GetValue();
1065       
1066       double anAngle = (SpinBox_Angle->GetValue())*PI/180;
1067       long aNbSteps = (long)SpinBox_NbSteps->value();
1068       double aTolerance = SpinBox_Tolerance->GetValue();
1069       
1070       if (GroupAngle->checkedId() == 1)
1071         anAngle = anAngle/aNbSteps;
1072       
1073       try {
1074         SUIT_OverrideCursor aWaitCursor;
1075         SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditPreviewer();
1076         aMeshEditor->RotationSweep(anElementsId.inout(), 
1077                                    anAxis, 
1078                                    anAngle, 
1079                                    aNbSteps, 
1080                                    aTolerance);
1081         SMESH::MeshPreviewStruct_var aMeshPreviewStruct = aMeshEditor->GetPreviewData();
1082         mySimulation->SetData(aMeshPreviewStruct._retn());
1083       } catch (...) {}
1084     }
1085     else
1086     {
1087       mySimulation->SetVisibility(false);
1088     }
1089   }
1090   else
1091   {
1092     //erase preview
1093     mySimulation->SetVisibility(false);
1094   }
1095 }
1096
1097 //=================================================================================
1098 // function : onSelectVectorButton()
1099 // purpose  : [slot]
1100 //=================================================================================
1101 void SMESHGUI_RevolutionDlg::onSelectVectorButton(){
1102   if(SelectVectorMenu) {
1103     SelectVectorMenu->exec( QCursor::pos() );
1104   }
1105 }
1106
1107 //=================================================================================
1108 // function : onSelectVectorMenu()
1109 // purpose  : [slot]
1110 //=================================================================================
1111 void SMESHGUI_RevolutionDlg::onSelectVectorMenu( QAction* action){
1112   if(!action)
1113     return;
1114
1115   switch(myMenuActions[action]) {
1116   case POINT_SELECT: 
1117     SMESH::SetPointRepresentation(true);
1118     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1119       aViewWindow->SetSelectionMode(NodeSelection);
1120     break;
1121     
1122   case FACE_SELECT: 
1123     SMESH::SetPointRepresentation(false);
1124     if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1125       aViewWindow->SetSelectionMode(FaceSelection);
1126     break;
1127   }
1128
1129   myVectorDefinition = myMenuActions[action];
1130   myEditCurrentArgument = (QWidget*)SpinBox_DX;
1131   myEditCurrentArgument->setFocus();
1132   connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
1133   SelectionIntoArgument();
1134 }
1135
1136 //=================================================================================
1137 // function : setFilters()
1138 // purpose  : SLOT. Called when "Filter" button pressed.
1139 //=================================================================================
1140 void SMESHGUI_RevolutionDlg::setFilters()
1141 {
1142   if ( !myFilterDlg )
1143   {
1144     QList<int> types;  
1145     types.append( SMESH::EDGE );
1146     types.append( SMESH::FACE );
1147     myFilterDlg = new SMESHGUI_FilterDlg( mySMESHGUI, types );
1148   }
1149   myFilterDlg->Init( GetConstructorId() ? SMESH::FACE : SMESH::EDGE );
1150
1151   myFilterDlg->SetSelection();
1152   myFilterDlg->SetMesh( myMesh );
1153   myFilterDlg->SetSourceWg( LineEditElements );
1154
1155   myFilterDlg->show();
1156 }