1 // SMESH SMESHGUI : GUI for SMESH component
3 // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 // File : SMESHGUI_ExtrusionAlongPathDlg.cxx
25 // Author : Vadim SANDLER
29 #include "SMESHGUI_ExtrusionAlongPathDlg.h"
32 #include "SMESHGUI_Utils.h"
33 #include "SMESHGUI_VTKUtils.h"
34 #include "SMESHGUI_MeshUtils.h"
35 #include "SMESHGUI_SpinBox.h"
36 #include "SMESHGUI_IdValidator.h"
38 #include "SMESH_Actor.h"
39 #include "SMESH_TypeFilter.hxx"
40 #include "SMESH_NumberFilter.hxx"
41 #include "SMESH_LogicalFilter.hxx"
43 #include "SMDS_Mesh.hxx"
47 #include "SUIT_ResourceMgr.h"
48 #include "SUIT_OverrideCursor.h"
49 #include "SUIT_Desktop.h"
50 #include "SUIT_MessageBox.h"
51 #include "SUIT_Session.h"
53 #include "LightApp_Application.h"
55 #include "SVTK_ViewModel.h"
56 #include "SVTK_ViewWindow.h"
57 #include "SVTK_Selector.h"
58 #include "SVTK_Selection.h"
59 #include "SALOME_ListIO.hxx"
61 #include "utilities.h"
64 #include <BRep_Tool.hxx>
65 #include <TopoDS_Shape.hxx>
67 #include <TopoDS_Vertex.hxx>
69 #include <TColStd_MapOfInteger.hxx>
70 #include <TColStd_IndexedMapOfInteger.hxx>
73 #include <qapplication.h>
74 #include <qbuttongroup.h>
75 #include <qgroupbox.h>
77 #include <qlineedit.h>
78 #include <qpushbutton.h>
79 #include <qtoolbutton.h>
80 #include <qradiobutton.h>
81 #include <qcheckbox.h>
84 #include <qvalidator.h>
89 #include "SALOMEconfig.h"
90 #include CORBA_SERVER_HEADER(SMESH_Group)
91 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
95 //=================================================================================
96 // function : SMESHGUI_ExtrusionAlongPathDlg()
97 // purpose : constructor
98 //=================================================================================
99 SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theModule,
101 : QDialog( SMESH::GetDesktop( theModule ), "SMESHGUI_ExtrusionAlongPathDlg", modal,
102 WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu | Qt::WDestructiveClose),
103 mySMESHGUI( theModule ),
104 mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
106 SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
107 QPixmap edgeImage ( mgr->loadPixmap("SMESH", tr("ICON_DLG_EDGE")));
108 QPixmap faceImage ( mgr->loadPixmap("SMESH", tr("ICON_DLG_TRIANGLE")));
109 QPixmap selectImage ( mgr->loadPixmap("SMESH", tr("ICON_SELECT")));
110 QPixmap addImage ( mgr->loadPixmap("SMESH", tr("ICON_APPEND")));
111 QPixmap removeImage ( mgr->loadPixmap("SMESH", tr("ICON_REMOVE")));
115 setCaption(tr("EXTRUSION_ALONG_PATH"));
116 setSizeGripEnabled(TRUE);
118 QGridLayout* topLayout = new QGridLayout(this);
119 topLayout->setSpacing(6);
120 topLayout->setMargin(11);
122 /***************************************************************/
123 // Elements type group box (1d / 2d elements)
124 GroupConstructors = new QButtonGroup(tr("SMESH_EXTRUSION"), this);
125 GroupConstructors->setColumnLayout(0, Qt::Vertical);
126 GroupConstructors->layout()->setSpacing(0);
127 GroupConstructors->layout()->setMargin(0);
128 QGridLayout* GroupConstructorsLayout = new QGridLayout(GroupConstructors->layout());
129 GroupConstructorsLayout->setAlignment(Qt::AlignTop);
130 GroupConstructorsLayout->setSpacing(6); GroupConstructorsLayout->setMargin(11);
132 Elements1dRB = new QRadioButton(GroupConstructors);
133 Elements1dRB->setPixmap(edgeImage);
134 Elements2dRB = new QRadioButton(GroupConstructors);
135 Elements2dRB->setPixmap(faceImage);
136 Elements1dRB->setChecked(true);
139 GroupConstructorsLayout->addWidget(Elements1dRB, 0, 0);
140 GroupConstructorsLayout->addWidget(Elements2dRB, 0, 2);
142 /***************************************************************/
143 // Arguments group box
144 GroupArguments = new QGroupBox(tr("EXTRUSION_1D"), this);
145 GroupArguments->setColumnLayout(0, Qt::Vertical);
146 GroupArguments->layout()->setSpacing(0); GroupArguments->layout()->setMargin(0);
147 QGridLayout* GroupArgumentsLayout = new QGridLayout(GroupArguments->layout());
148 GroupArgumentsLayout->setAlignment(Qt::AlignTop);
149 GroupArgumentsLayout->setSpacing(6); GroupArgumentsLayout->setMargin(11);
151 // Controls for elements selection
152 ElementsLab = new QLabel(tr("SMESH_ID_ELEMENTS"), GroupArguments);
154 SelectElementsButton = new QToolButton(GroupArguments);
155 SelectElementsButton->setPixmap(selectImage);
157 ElementsLineEdit = new QLineEdit(GroupArguments);
158 ElementsLineEdit->setValidator(new SMESHGUI_IdValidator(this));
160 // Controls for the whole mesh selection
161 MeshCheck = new QCheckBox(tr("SMESH_SELECT_WHOLE_MESH"), GroupArguments);
163 // Controls for path selection
164 PathGrp = new QGroupBox(tr("SMESH_PATH"), GroupArguments);
165 PathGrp->setColumnLayout(0, Qt::Vertical);
166 PathGrp->layout()->setSpacing(0); PathGrp->layout()->setMargin(0);
167 QGridLayout* PathGrpLayout = new QGridLayout(PathGrp->layout());
168 PathGrpLayout->setAlignment(Qt::AlignTop);
169 PathGrpLayout->setSpacing(6); PathGrpLayout->setMargin(11);
171 // Controls for path mesh selection
172 PathMeshLab = new QLabel(tr("SMESH_PATH_MESH"), PathGrp);
174 SelectPathMeshButton = new QToolButton(PathGrp);
175 SelectPathMeshButton->setPixmap(selectImage);
177 PathMeshLineEdit = new QLineEdit(PathGrp);
178 PathMeshLineEdit->setReadOnly(true);
180 // Controls for path shape selection
181 PathShapeLab = new QLabel(tr("SMESH_PATH_SHAPE"), PathGrp);
183 SelectPathShapeButton = new QToolButton(PathGrp);
184 SelectPathShapeButton->setPixmap(selectImage);
186 PathShapeLineEdit = new QLineEdit(PathGrp);
187 PathShapeLineEdit->setReadOnly(true);
189 // Controls for path starting point selection
190 StartPointLab = new QLabel(tr("SMESH_PATH_START"), PathGrp);
192 SelectStartPointButton = new QToolButton(PathGrp);
193 SelectStartPointButton->setPixmap(selectImage);
195 StartPointLineEdit = new QLineEdit(PathGrp);
196 StartPointLineEdit->setValidator(new QIntValidator(this));
199 PathGrpLayout->addWidget(PathMeshLab, 0, 0);
200 PathGrpLayout->addWidget(SelectPathMeshButton, 0, 1);
201 PathGrpLayout->addWidget(PathMeshLineEdit, 0, 2);
202 PathGrpLayout->addWidget(PathShapeLab, 1, 0);
203 PathGrpLayout->addWidget(SelectPathShapeButton, 1, 1);
204 PathGrpLayout->addWidget(PathShapeLineEdit, 1, 2);
205 PathGrpLayout->addWidget(StartPointLab, 2, 0);
206 PathGrpLayout->addWidget(SelectStartPointButton, 2, 1);
207 PathGrpLayout->addWidget(StartPointLineEdit, 2, 2);
209 // Controls for base point defining
210 BasePointCheck = new QCheckBox(tr("SMESH_USE_BASE_POINT"), GroupArguments);
212 BasePointGrp = new QGroupBox(tr("SMESH_BASE_POINT"), GroupArguments);
213 BasePointGrp->setColumnLayout(0, Qt::Vertical);
214 BasePointGrp->layout()->setSpacing(0); BasePointGrp->layout()->setMargin(0);
215 QGridLayout* BasePointGrpLayout = new QGridLayout(BasePointGrp->layout());
216 BasePointGrpLayout->setAlignment(Qt::AlignTop);
217 BasePointGrpLayout->setSpacing(6); BasePointGrpLayout->setMargin(11);
219 SelectBasePointButton = new QToolButton(BasePointGrp);
220 SelectBasePointButton->setPixmap(selectImage);
222 XLab = new QLabel(tr("SMESH_X"), BasePointGrp);
223 XLab->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
224 XSpin = new SMESHGUI_SpinBox(BasePointGrp);
225 YLab = new QLabel(tr("SMESH_Y"), BasePointGrp);
226 YLab->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
227 YSpin = new SMESHGUI_SpinBox(BasePointGrp);
228 ZLab = new QLabel(tr("SMESH_Z"), BasePointGrp);
229 ZLab->setAlignment( Qt::AlignRight | Qt::AlignVCenter | Qt::ExpandTabs );
230 ZSpin = new SMESHGUI_SpinBox(BasePointGrp);
233 BasePointGrpLayout->addWidget(SelectBasePointButton, 0, 0);
234 BasePointGrpLayout->addWidget(XLab, 0, 1);
235 BasePointGrpLayout->addWidget(XSpin, 0, 2);
236 BasePointGrpLayout->addWidget(YLab, 0, 3);
237 BasePointGrpLayout->addWidget(YSpin, 0, 4);
238 BasePointGrpLayout->addWidget(ZLab, 0, 5);
239 BasePointGrpLayout->addWidget(ZSpin, 0, 6);
241 // Controls for angles defining
242 AnglesCheck = new QCheckBox(tr("SMESH_USE_ANGLES"), GroupArguments);
244 AnglesGrp = new QGroupBox(tr("SMESH_ANGLES"), GroupArguments);
245 AnglesGrp->setColumnLayout(0, Qt::Vertical);
246 AnglesGrp->layout()->setSpacing(0); AnglesGrp->layout()->setMargin(0);
247 QGridLayout* AnglesGrpLayout = new QGridLayout(AnglesGrp->layout());
248 AnglesGrpLayout->setAlignment(Qt::AlignTop);
249 AnglesGrpLayout->setSpacing(6); AnglesGrpLayout->setMargin(11);
251 AnglesList = new QListBox(AnglesGrp);
252 AnglesList->setSelectionMode(QListBox::Extended);
254 AddAngleButton = new QToolButton(AnglesGrp);
255 AddAngleButton->setPixmap(addImage);
257 RemoveAngleButton = new QToolButton(AnglesGrp);
258 RemoveAngleButton->setPixmap(removeImage);
260 AngleSpin = new SMESHGUI_SpinBox(AnglesGrp);
263 QVBoxLayout* bLayout = new QVBoxLayout();
264 bLayout->addWidget(AddAngleButton);
265 bLayout->addSpacing(6);
266 bLayout->addWidget(RemoveAngleButton);
267 bLayout->addStretch();
268 AnglesGrpLayout->addMultiCellWidget(AnglesList, 0, 1, 0, 0);
269 AnglesGrpLayout->addMultiCellLayout(bLayout, 0, 1, 1, 1);
270 AnglesGrpLayout->addWidget( AngleSpin, 0, 2 );
271 AnglesGrpLayout->setRowStretch(1, 10);
273 // CheckBox for groups generation
274 MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
275 MakeGroupsCheck->setChecked(true);
278 GroupArgumentsLayout->addWidget( ElementsLab, 0, 0 );
279 GroupArgumentsLayout->addWidget( SelectElementsButton, 0, 1 );
280 GroupArgumentsLayout->addWidget( ElementsLineEdit, 0, 2 );
281 GroupArgumentsLayout->addMultiCellWidget(MeshCheck, 1, 1, 0, 2);
282 GroupArgumentsLayout->addMultiCellWidget(PathGrp, 2, 2, 0, 2);
283 GroupArgumentsLayout->addWidget( BasePointCheck, 3, 0 );
284 GroupArgumentsLayout->addMultiCellWidget(BasePointGrp, 3, 4, 1, 2);
285 GroupArgumentsLayout->addWidget( AnglesCheck, 5, 0 );
286 GroupArgumentsLayout->addMultiCellWidget(AnglesGrp, 5, 6, 1, 2);
287 GroupArgumentsLayout->addMultiCellWidget(MakeGroupsCheck, 7, 7, 0, 2);
288 GroupArgumentsLayout->setRowStretch(6, 10);
290 /***************************************************************/
291 // common buttons group box
292 GroupButtons = new QGroupBox(this);
293 GroupButtons->setColumnLayout(0, Qt::Vertical);
294 GroupButtons->layout()->setSpacing(0);
295 GroupButtons->layout()->setMargin(0);
296 QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
297 GroupButtonsLayout->setAlignment(Qt::AlignTop);
298 GroupButtonsLayout->setSpacing(6); GroupButtonsLayout->setMargin(11);
300 OkButton = new QPushButton(tr("SMESH_BUT_OK"), GroupButtons);
301 OkButton->setAutoDefault(true);
302 OkButton->setDefault(true);
304 ApplyButton = new QPushButton(tr("SMESH_BUT_APPLY"), GroupButtons);
305 ApplyButton->setAutoDefault(true);
307 CloseButton = new QPushButton(tr("SMESH_BUT_CLOSE"), GroupButtons);
308 CloseButton->setAutoDefault(true);
310 HelpButton = new QPushButton(tr("SMESH_BUT_HELP"), GroupButtons);
311 HelpButton->setAutoDefault(true);
314 GroupButtonsLayout->addWidget(OkButton, 0, 0);
315 GroupButtonsLayout->addWidget(ApplyButton, 0, 1);
316 GroupButtonsLayout->addWidget(CloseButton, 0, 3);
317 GroupButtonsLayout->addWidget(HelpButton, 0, 4);
318 GroupButtonsLayout->addColSpacing(2, 10);
319 GroupButtonsLayout->setColStretch(2, 10);
321 /***************************************************************/
323 topLayout->addWidget(GroupConstructors, 0, 0);
324 topLayout->addWidget(GroupArguments, 1, 0);
325 topLayout->addWidget(GroupButtons, 2, 0);
327 /***************************************************************/
329 XSpin->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
330 YSpin->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
331 ZSpin->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, 3);
332 AngleSpin->RangeStepAndValidator(-180.0, 180.0, 5.0, 3);
334 mySelector = (SMESH::GetViewWindow( mySMESHGUI ))->GetSelector();
336 mySMESHGUI->SetActiveDialogBox(this);
338 // Costruction of the logical filter for the elements: mesh/sub-mesh/group
339 SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter (MESHorSUBMESH);
340 SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter (GROUP);
342 QPtrList<SUIT_SelectionFilter> aListOfFilters;
343 if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
344 if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter);
346 myElementsFilter = new SMESH_LogicalFilter (aListOfFilters, SMESH_LogicalFilter::LO_OR);
347 myPathMeshFilter = new SMESH_TypeFilter (MESH);
349 myHelpFileName = "extrusion_along_path_page.html";
353 /***************************************************************/
354 // signals-slots connections
355 connect(OkButton, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
356 connect(CloseButton, SIGNAL(clicked()), this, SLOT(reject()));
357 connect(ApplyButton, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
358 connect(HelpButton, SIGNAL(clicked()), this, SLOT(ClickOnHelp()));
360 connect(AddAngleButton, SIGNAL(clicked()), this, SLOT(OnAngleAdded()));
361 connect(RemoveAngleButton, SIGNAL(clicked()), this, SLOT(OnAngleRemoved()));
363 connect(GroupConstructors, SIGNAL(clicked(int)), SLOT(ConstructorsClicked(int)));
365 connect(SelectElementsButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
366 connect(SelectPathMeshButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
367 connect(SelectPathShapeButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
368 connect(SelectStartPointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
369 connect(SelectBasePointButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
371 connect(mySMESHGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
372 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
373 connect(mySMESHGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(reject()));
375 connect(ElementsLineEdit, SIGNAL(textChanged(const QString&)),
376 SLOT(onTextChange(const QString&)));
377 connect(StartPointLineEdit, SIGNAL(textChanged(const QString&)),
378 SLOT(onTextChange(const QString&)));
380 connect(MeshCheck, SIGNAL(toggled(bool)), SLOT(onSelectMesh()));
381 connect(AnglesCheck, SIGNAL(toggled(bool)), SLOT(onAnglesCheck()));
382 connect(BasePointCheck, SIGNAL(toggled(bool)), SLOT(onBasePointCheck()));
384 AnglesList->installEventFilter(this);
385 ElementsLineEdit->installEventFilter(this);
386 StartPointLineEdit->installEventFilter(this);
387 XSpin->editor()->installEventFilter(this);
388 YSpin->editor()->installEventFilter(this);
389 ZSpin->editor()->installEventFilter(this);
391 /***************************************************************/
393 this->show(); // displays Dialog
396 //=================================================================================
397 // function : ~SMESHGUI_ExtrusionAlongPathDlg()
398 // purpose : destructor
399 //=================================================================================
400 SMESHGUI_ExtrusionAlongPathDlg::~SMESHGUI_ExtrusionAlongPathDlg()
402 // no need to delete child widgets, Qt does it all for us
405 //=================================================================================
407 // purpose : initialization
408 //=================================================================================
409 void SMESHGUI_ExtrusionAlongPathDlg::Init (bool ResetControls)
412 myEditCurrentArgument = 0;
414 myMesh = SMESH::SMESH_Mesh::_nil();
415 myIDSource = SMESH::SMESH_IDSource::_nil();
417 myPathMesh = SMESH::SMESH_Mesh::_nil();
418 myPathShape = GEOM::GEOM_Object::_nil();
420 ElementsLineEdit->clear();
421 PathMeshLineEdit->clear();
422 PathShapeLineEdit->clear();
423 StartPointLineEdit->clear();
426 XSpin->SetValue(0.0);
427 YSpin->SetValue(0.0);
428 ZSpin->SetValue(0.0);
430 AngleSpin->SetValue(45);
431 MeshCheck->setChecked(false);
432 ConstructorsClicked(0);
437 SetEditCurrentArgument(0);
440 //=================================================================================
441 // function : ConstructorsClicked()
442 // purpose : Called when user changes type of elements (1d / 2d)
443 //=================================================================================
444 void SMESHGUI_ExtrusionAlongPathDlg::ConstructorsClicked (int type)
446 if (myType == type) return;
448 disconnect(mySelectionMgr, 0, this, 0);
451 GroupArguments->setTitle(tr("EXTRUSION_1D"));
453 GroupArguments->setTitle(tr("EXTRUSION_2D"));
455 // clear elements ID list
456 if (!MeshCheck->isChecked()) {
457 ElementsLineEdit->clear();
459 // set selection mode if necessary
460 if (myEditCurrentArgument == ElementsLineEdit) {
461 mySelectionMgr->clearSelected();
462 mySelectionMgr->clearFilters();
463 SMESH::SetPickable();
465 SMESH::SetPointRepresentation(false);
466 if (MeshCheck->isChecked()) {
467 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
468 aViewWindow->SetSelectionMode(ActorSelection);
469 mySelectionMgr->installFilter(myElementsFilter);
473 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
474 aViewWindow->SetSelectionMode(EdgeSelection);
478 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
479 aViewWindow->SetSelectionMode(FaceSelection);
483 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
488 //=================================================================================
489 // function : ClickOnApply()
490 // purpose : Called when user presses <Apply> button
491 //=================================================================================
492 bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
494 if (mySMESHGUI->isActiveStudyLocked())
497 if (myMesh->_is_nil() || MeshCheck->isChecked() && myIDSource->_is_nil() ||
498 !myMeshActor || myPathMesh->_is_nil() || myPathShape->_is_nil())
501 SMESH::long_array_var anElementsId = new SMESH::long_array;
503 if (MeshCheck->isChecked()) {
504 // If "Select whole mesh, submesh or group" check box is on ->
505 // get all elements of the required type from the object selected
507 // if MESH object is selected
508 if (!CORBA::is_nil(SMESH::SMESH_Mesh::_narrow(myIDSource))) {
510 SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(myIDSource);
511 // get IDs from mesh...
512 if (Elements1dRB->isChecked())
514 anElementsId = aMesh->GetElementsByType(SMESH::EDGE);
515 else if (Elements2dRB->isChecked()) {
516 anElementsId = aMesh->GetElementsByType(SMESH::FACE);
519 // SUBMESH is selected
520 if (!CORBA::is_nil(SMESH::SMESH_subMesh::_narrow(myIDSource))) {
522 SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(myIDSource);
523 // get IDs from submesh
524 if (Elements1dRB->isChecked())
526 anElementsId = aSubMesh->GetElementsByType(SMESH::EDGE);
527 else if (Elements2dRB->isChecked())
529 anElementsId = aSubMesh->GetElementsByType(SMESH::FACE);
532 if (!CORBA::is_nil(SMESH::SMESH_GroupBase::_narrow(myIDSource))) {
534 SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(myIDSource);
535 // get IDs from group
536 // 1d elements or 2d elements
537 if (Elements1dRB->isChecked() && aGroup->GetType() == SMESH::EDGE ||
538 Elements2dRB->isChecked() && aGroup->GetType() == SMESH::FACE)
539 anElementsId = aGroup->GetListOfID();
542 // If "Select whole mesh, submesh or group" check box is off ->
543 // use only elements of given type selected by user
545 SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh();
547 QStringList aListElementsId = QStringList::split(" ", ElementsLineEdit->text(), false);
548 anElementsId = new SMESH::long_array;
549 anElementsId->length(aListElementsId.count());
552 for (int i = 0; i < aListElementsId.count(); i++) {
553 long ind = aListElementsId[ i ].toLong(&bOk);
555 const SMDS_MeshElement* e = aMesh->FindElement(ind);
557 bool typeMatch = Elements1dRB->isChecked() && e->GetType() == SMDSAbs_Edge ||
558 Elements2dRB->isChecked() && e->GetType() == SMDSAbs_Face;
560 anElementsId[ j++ ] = ind;
564 anElementsId->length(j);
568 if (anElementsId->length() <= 0) {
572 if (StartPointLineEdit->text().stripWhiteSpace().isEmpty()) {
577 long aNodeStart = StartPointLineEdit->text().toLong(&bOk);
583 SMESH::double_array_var anAngles = new SMESH::double_array;
584 if (AnglesCheck->isChecked()) {
585 anAngles->length(AnglesList->count());
588 for (int i = 0; i < AnglesList->count(); i++) {
589 double angle = AnglesList->text(i).toDouble(&bOk);
591 anAngles[ j++ ] = angle*PI/180;
597 SMESH::PointStruct aBasePoint;
598 if (BasePointCheck->isChecked()) {
599 aBasePoint.x = XSpin->GetValue();
600 aBasePoint.y = YSpin->GetValue();
601 aBasePoint.z = ZSpin->GetValue();
605 SUIT_OverrideCursor wc;
606 SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
607 SMESH::SMESH_MeshEditor::Extrusion_Error retVal;
608 if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
609 SMESH::ListOfGroups_var groups =
610 aMeshEditor->ExtrusionAlongPathMakeGroups(anElementsId.inout(), myPathMesh,
611 myPathShape, aNodeStart,
612 AnglesCheck->isChecked(), anAngles.inout(),
613 BasePointCheck->isChecked(), aBasePoint, retVal);
615 retVal = aMeshEditor->ExtrusionAlongPath(anElementsId.inout(), myPathMesh,
616 myPathShape, aNodeStart,
617 AnglesCheck->isChecked(), anAngles.inout(),
618 BasePointCheck->isChecked(), aBasePoint);
623 case SMESH::SMESH_MeshEditor::EXTR_NO_ELEMENTS:
624 SUIT_MessageBox::warn1(SMESHGUI::desktop(),
626 tr("NO_ELEMENTS_SELECTED"),
629 case SMESH::SMESH_MeshEditor::EXTR_PATH_NOT_EDGE:
630 SUIT_MessageBox::warn1(SMESHGUI::desktop(),
632 tr("SELECTED_PATH_IS_NOT_EDGE"),
635 case SMESH::SMESH_MeshEditor::EXTR_BAD_PATH_SHAPE:
636 SUIT_MessageBox::warn1(SMESHGUI::desktop(),
638 tr("BAD_SHAPE_TYPE"),
641 case SMESH::SMESH_MeshEditor::EXTR_BAD_STARTING_NODE:
642 SUIT_MessageBox::warn1(SMESHGUI::desktop(),
644 tr("EXTR_BAD_STARTING_NODE"),
647 case SMESH::SMESH_MeshEditor::EXTR_BAD_ANGLES_NUMBER:
648 SUIT_MessageBox::warn1(SMESHGUI::desktop(),
650 tr("WRONG_ANGLES_NUMBER"),
653 case SMESH::SMESH_MeshEditor::EXTR_CANT_GET_TANGENT:
654 SUIT_MessageBox::warn1(SMESHGUI::desktop(),
656 tr("CANT_GET_TANGENT"),
659 case SMESH::SMESH_MeshEditor::EXTR_OK:
666 //mySelectionMgr->clearSelected();
667 SMESH::Update( myMeshActor->getIO(), myMeshActor->GetVisibility() );
668 if ( MakeGroupsCheck->isEnabled() && MakeGroupsCheck->isChecked() )
669 mySMESHGUI->updateObjBrowser(true); // new groups may appear
670 //SMESH::UpdateView();
672 ConstructorsClicked(GetConstructorId());
676 //=================================================================================
677 // function : ClickOnOk()
678 // purpose : Called when user presses <OK> button
679 //=================================================================================
680 void SMESHGUI_ExtrusionAlongPathDlg::ClickOnOk()
686 //=================================================================================
687 // function : ClickOnHelp()
689 //=================================================================================
690 void SMESHGUI_ExtrusionAlongPathDlg::ClickOnHelp()
692 LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
694 app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
698 platform = "winapplication";
700 platform = "application";
702 SUIT_MessageBox::warn1(0, QObject::tr("WRN_WARNING"),
703 QObject::tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
704 arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)).arg(myHelpFileName),
705 QObject::tr("BUT_OK"));
709 //=================================================================================
710 // function : reject()
711 // purpose : Called when dialog box is closed
712 //=================================================================================
713 void SMESHGUI_ExtrusionAlongPathDlg::reject()
715 disconnect(mySelectionMgr, 0, this, 0);
716 mySelectionMgr->clearFilters();
717 //mySelectionMgr->clearSelected();
718 SMESH::SetPickable(); // ???
719 SMESH::SetPointRepresentation(false);
720 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
721 aViewWindow->SetSelectionMode(ActorSelection);
722 mySMESHGUI->ResetState();
726 //=======================================================================
727 // function : onTextChange()
729 //=======================================================================
730 void SMESHGUI_ExtrusionAlongPathDlg::onTextChange (const QString& theNewText)
732 QLineEdit* send = (QLineEdit*)sender();
740 if (send != StartPointLineEdit && send != ElementsLineEdit)
741 send = ElementsLineEdit;
743 if (send == ElementsLineEdit && myEditCurrentArgument == ElementsLineEdit) {
744 // hilight entered elements
745 SMDS_Mesh* aMesh = 0;
747 aMesh = myMeshActor->GetObject()->GetMesh();
750 //mySelectionMgr->clearSelected();
751 //mySelectionMgr->AddIObject(myMeshActor->getIO());
753 aList.Append(myMeshActor->getIO());
754 mySelectionMgr->setSelectedObjects(aList, false);
756 QStringList aListId = QStringList::split(" ", theNewText, false);
758 const Handle(SALOME_InteractiveObject)& anIO = myMeshActor->getIO();
759 TColStd_MapOfInteger newIndices;
760 for (int i = 0; i < aListId.count(); i++) {
761 long ind = aListId[ i ].toLong(&bOk);
763 const SMDS_MeshElement* e = aMesh->FindElement(ind);
765 // check also type of element
766 bool typeMatch = Elements1dRB->isChecked() && e->GetType() == SMDSAbs_Edge ||
767 Elements2dRB->isChecked() && e->GetType() == SMDSAbs_Face;
769 newIndices.Add(e->GetID());
773 mySelector->AddOrRemoveIndex(anIO, newIndices, false);
774 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
775 aViewWindow->highlight( anIO, true, true );
777 } else if (send == StartPointLineEdit &&
778 myEditCurrentArgument == StartPointLineEdit) {
779 if (!myPathMesh->_is_nil()) {
780 SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh);
781 SMDS_Mesh* aMesh = 0;
783 aMesh = aPathActor->GetObject()->GetMesh();
785 //mySelectionMgr->clearSelected();
786 //mySelectionMgr->AddIObject(aPathActor->getIO());
788 aList.Append(aPathActor->getIO());
789 mySelectionMgr->setSelectedObjects(aList, false);
792 long ind = theNewText.toLong(&bOk);
794 const SMDS_MeshNode* n = aMesh->FindNode(ind);
796 //if (!mySelectionMgr->IsIndexSelected(aPathActor->getIO(), n->GetID())) {
797 TColStd_MapOfInteger newIndices;
798 newIndices.Add(n->GetID());
799 mySelector->AddOrRemoveIndex( aPathActor->getIO(), newIndices, false );
800 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
801 aViewWindow->highlight( aPathActor->getIO(), true, true );
809 //=================================================================================
810 // function : SelectionIntoArgument()
811 // purpose : Called when selection as changed or other case
812 //=================================================================================
813 void SMESHGUI_ExtrusionAlongPathDlg::SelectionIntoArgument()
817 // return if dialog box is inactive
818 if (!GroupButtons->isEnabled())
821 // selected objects count
822 const SALOME_ListIO& aList = mySelector->StoredIObjects();
823 int nbSel = aList.Extent();
830 if (myEditCurrentArgument == ElementsLineEdit) {
831 // we are now selecting mesh elements (or whole mesh/submesh/group)
833 ElementsLineEdit->clear();
834 myMesh = SMESH::SMESH_Mesh::_nil();
835 myIDSource = SMESH::SMESH_IDSource::_nil();
838 // try to get mesh from selection
839 Handle(SALOME_InteractiveObject) IO = aList.First();
840 myMesh = SMESH::GetMeshByIO(IO);
841 if (myMesh->_is_nil())
844 // MakeGroups is available if there are groups
845 if ( myMesh->NbGroups() == 0 ) {
846 MakeGroupsCheck->setChecked(false);
847 MakeGroupsCheck->setEnabled(false);
849 MakeGroupsCheck->setEnabled(true);
852 myMeshActor = SMESH::FindActorByObject(myMesh);
856 if (MeshCheck->isChecked()) {
857 // If "Select whole mesh, submesh or group" check box is on ->
858 // get ID source and put it's name to the edit box
860 SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
862 myIDSource = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(IO);
863 ElementsLineEdit->setText(aString);
865 // If "Select whole mesh, submesh or group" check box is off ->
866 // try to get selected elements IDs
868 //int aNbUnits = SMESH::GetNameOfSelectedElements(mySelectionMgr, aString);
869 SMESH::GetNameOfSelectedElements(mySelector, IO, aString);
870 ElementsLineEdit->setText(aString);
872 } else if (myEditCurrentArgument == PathMeshLineEdit) {
873 // we are now selecting path mesh
875 PathMeshLineEdit->clear();
876 myPathMesh = SMESH::SMESH_Mesh::_nil();
877 PathShapeLineEdit->clear();
878 myPathShape = GEOM::GEOM_Object::_nil();
879 StartPointLineEdit->clear();
881 // try to get mesh from selection
882 Handle(SALOME_InteractiveObject) IO = aList.First();
883 myPathMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IO);
884 if(myPathMesh->_is_nil())
888 SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
889 PathMeshLineEdit->setText(aString);
890 } else if (myEditCurrentArgument == PathShapeLineEdit) {
891 // we are now selecting path mesh
893 PathShapeLineEdit->clear();
894 myPathShape = GEOM::GEOM_Object::_nil();
895 StartPointLineEdit->clear();
897 // return if path mesh is not yet selected
898 if (myPathMesh->_is_nil())
901 // try to get shape from selection
902 Handle(SALOME_InteractiveObject) IO = aList.First();
903 myPathShape = SMESH::IObjectToInterface<GEOM::GEOM_Object>(IO);
904 if (myPathShape->_is_nil())
908 SMESH::GetNameOfSelectedIObjects(mySelectionMgr, aString);
909 PathShapeLineEdit->setText(aString);
910 } else if (myEditCurrentArgument == StartPointLineEdit) {
911 // we are now selecting start point of path
913 StartPointLineEdit->clear();
915 // return if path mesh or path shape is not yet selected
916 if (myPathMesh->_is_nil() || myPathShape->_is_nil())
919 // try to get shape from selection
920 Handle(SALOME_InteractiveObject) IO = aList.First();
922 SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh);
927 int aNbUnits = SMESH::GetNameOfSelectedElements(mySelector, aPathActor->getIO(), aString);
929 StartPointLineEdit->setText(aString.stripWhiteSpace());
931 } else if (myEditCurrentArgument == XSpin) {
932 // we are now selecting base point
933 // reset is not performed here!
935 // return if is not enabled
936 if (!BasePointGrp->isEnabled())
939 // try to get shape from selection
940 Handle(SALOME_InteractiveObject) IO = aList.First();
942 // check if geom vertex is selected
943 GEOM::GEOM_Object_var aGeomObj = SMESH::IObjectToInterface<GEOM::GEOM_Object>(IO);
944 TopoDS_Vertex aVertex;
945 if (!aGeomObj->_is_nil()) {
946 if (aGeomObj->IsShape() && GEOMBase::GetShape(aGeomObj, aVertex) && !aVertex.IsNull()) {
947 gp_Pnt aPnt = BRep_Tool::Pnt(aVertex);
948 XSpin->SetValue(aPnt.X());
949 YSpin->SetValue(aPnt.Y());
950 ZSpin->SetValue(aPnt.Z());
955 // check if smesh node is selected
956 SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(IO);
957 if (aMesh->_is_nil())
961 int aNbUnits = SMESH::GetNameOfSelectedNodes(mySelector, myMeshActor->getIO(), aString);
962 // return if more than one node is selected
966 SMESH_Actor* aMeshActor = SMESH::FindActorByObject(aMesh);
970 SMDS_Mesh* mesh = aMeshActor->GetObject()->GetMesh();
974 const SMDS_MeshNode* n = mesh->FindNode(aString.toLong());
978 XSpin->SetValue(n->X());
979 YSpin->SetValue(n->Y());
980 ZSpin->SetValue(n->Z());
984 //=================================================================================
985 // function : SetEditCurrentArgument()
987 //=================================================================================
988 void SMESHGUI_ExtrusionAlongPathDlg::SetEditCurrentArgument()
990 QToolButton* send = (QToolButton*)sender();
991 if (send != SelectElementsButton &&
992 send != SelectPathMeshButton &&
993 send != SelectPathShapeButton &&
994 send != SelectStartPointButton &&
995 send != SelectBasePointButton)
997 SetEditCurrentArgument(send);
1000 //=================================================================================
1001 // function : SetEditCurrentArgument()
1003 //=================================================================================
1004 void SMESHGUI_ExtrusionAlongPathDlg::SetEditCurrentArgument (QToolButton* button)
1006 disconnect(mySelectionMgr, 0, this, 0);
1007 mySelectionMgr->clearSelected();
1008 mySelectionMgr->clearFilters();
1009 SMESH::SetPickable();
1011 if (button == SelectElementsButton) {
1012 myEditCurrentArgument = ElementsLineEdit;
1013 SMESH::SetPointRepresentation(false);
1014 if (MeshCheck->isChecked()) {
1015 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1016 aViewWindow->SetSelectionMode(ActorSelection);
1017 mySelectionMgr->installFilter(myElementsFilter);
1019 if (Elements1dRB->isChecked())
1021 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1022 aViewWindow->SetSelectionMode(EdgeSelection);
1024 else if (Elements2dRB->isChecked())
1026 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1027 aViewWindow->SetSelectionMode(FaceSelection);
1030 } else if (button == SelectPathMeshButton) {
1031 myEditCurrentArgument = PathMeshLineEdit;
1032 SMESH::SetPointRepresentation(false);
1033 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1034 aViewWindow->SetSelectionMode(ActorSelection);
1035 mySelectionMgr->installFilter(myPathMeshFilter);
1037 else if (button == SelectPathShapeButton) {
1038 myEditCurrentArgument = PathShapeLineEdit;
1039 SMESH::SetPointRepresentation(false);
1040 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1041 aViewWindow->SetSelectionMode(ActorSelection);
1043 if (!myPathMesh->_is_nil()) {
1044 GEOM::GEOM_Object_var aMainShape = myPathMesh->GetShapeToMesh();
1045 SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh);
1047 if (!aMainShape->_is_nil() && aPathActor)
1048 mySelectionMgr->installFilter(new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE, -1,
1049 TopAbs_EDGE, aMainShape));
1050 //SMESH::SetPickable(aPathActor);
1053 else if (button == SelectStartPointButton) {
1054 myEditCurrentArgument = StartPointLineEdit;
1055 if (!myPathMesh->_is_nil()) {
1056 SMESH_Actor* aPathActor = SMESH::FindActorByObject(myPathMesh);
1058 SMESH::SetPointRepresentation(true);
1059 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1060 aViewWindow->SetSelectionMode(NodeSelection);
1061 SMESH::SetPickable(aPathActor);
1065 else if (button == SelectBasePointButton) {
1066 myEditCurrentArgument = XSpin;
1067 SMESH::SetPointRepresentation(true);
1068 if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
1069 aViewWindow->SetSelectionMode(NodeSelection);
1071 SMESH_TypeFilter* aMeshOrSubMeshFilter = new SMESH_TypeFilter(MESHorSUBMESH);
1072 SMESH_TypeFilter* aSmeshGroupFilter = new SMESH_TypeFilter(GROUP);
1073 SMESH_NumberFilter* aVertexFilter = new SMESH_NumberFilter ("GEOM", TopAbs_SHAPE,
1075 QPtrList<SUIT_SelectionFilter> aListOfFilters;
1076 if (aMeshOrSubMeshFilter) aListOfFilters.append(aMeshOrSubMeshFilter);
1077 if (aSmeshGroupFilter) aListOfFilters.append(aSmeshGroupFilter);
1078 if (aVertexFilter) aListOfFilters.append(aVertexFilter);
1080 mySelectionMgr->installFilter(new SMESH_LogicalFilter
1081 (aListOfFilters, SMESH_LogicalFilter::LO_OR));
1084 if (myEditCurrentArgument && !myEditCurrentArgument->hasFocus())
1085 myEditCurrentArgument->setFocus();
1087 connect(mySelectionMgr, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
1088 SelectionIntoArgument();
1091 //=================================================================================
1092 // function : DeactivateActiveDialog()
1093 // purpose : Deactivates this dialog
1094 //=================================================================================
1095 void SMESHGUI_ExtrusionAlongPathDlg::DeactivateActiveDialog()
1097 if (GroupConstructors->isEnabled()) {
1098 GroupConstructors->setEnabled(false);
1099 GroupArguments->setEnabled(false);
1100 GroupButtons->setEnabled(false);
1101 mySMESHGUI->ResetState();
1102 mySMESHGUI->SetActiveDialogBox(0);
1106 //=================================================================================
1107 // function : ActivateThisDialog()
1108 // purpose : Activates this dialog
1109 //=================================================================================
1110 void SMESHGUI_ExtrusionAlongPathDlg::ActivateThisDialog()
1112 // Emit a signal to deactivate the active dialog
1113 mySMESHGUI->EmitSignalDeactivateDialog();
1114 GroupConstructors->setEnabled(true);
1115 GroupArguments->setEnabled(true);
1116 GroupButtons->setEnabled(true);
1118 mySMESHGUI->SetActiveDialogBox(this);
1120 ConstructorsClicked(GetConstructorId());
1121 SelectionIntoArgument();
1124 //=================================================================================
1125 // function : enterEvent()
1126 // purpose : Mouse enter event
1127 //=================================================================================
1128 void SMESHGUI_ExtrusionAlongPathDlg::enterEvent (QEvent*)
1130 if (!GroupConstructors->isEnabled())
1131 ActivateThisDialog();
1134 //=======================================================================
1135 // function : onSelectMesh()
1137 //=======================================================================
1138 void SMESHGUI_ExtrusionAlongPathDlg::onSelectMesh()
1140 bool toSelectMesh = MeshCheck->isChecked();
1142 ElementsLineEdit->setReadOnly(toSelectMesh);
1143 ElementsLab->setText(toSelectMesh ? tr("SMESH_NAME") : tr("SMESH_ID_ELEMENTS"));
1144 ElementsLineEdit->clear();
1146 SetEditCurrentArgument(SelectElementsButton);
1149 //=================================================================================
1150 // function : GetConstructorId()
1152 //=================================================================================
1153 int SMESHGUI_ExtrusionAlongPathDlg::GetConstructorId()
1155 if (GroupConstructors != NULL && GroupConstructors->selected() != NULL)
1156 return GroupConstructors->id(GroupConstructors->selected());
1160 //=======================================================================
1161 // function : onAnglesCheck()
1162 // purpose : called when "Use Angles" check box is switched
1163 //=======================================================================
1164 void SMESHGUI_ExtrusionAlongPathDlg::onAnglesCheck()
1166 AnglesGrp->setEnabled(AnglesCheck->isChecked());
1169 //=======================================================================
1170 // function : onBasePointCheck()
1171 // purpose : called when "Use Base Point" check box is switched
1172 //=======================================================================
1173 void SMESHGUI_ExtrusionAlongPathDlg::onBasePointCheck()
1175 BasePointGrp->setEnabled(BasePointCheck->isChecked());
1178 //=======================================================================
1179 // function : OnAngleAdded()
1180 // purpose : Called when user adds angle to the list
1181 //=======================================================================
1182 void SMESHGUI_ExtrusionAlongPathDlg::OnAngleAdded()
1184 AnglesList->insertItem(QString::number(AngleSpin->GetValue()));
1187 //=======================================================================
1188 // function : OnAngleRemoved()
1189 // purpose : Called when user removes angle(s) from the list
1190 //=======================================================================
1191 void SMESHGUI_ExtrusionAlongPathDlg::OnAngleRemoved()
1193 QList<QListBoxItem> aList;
1194 aList.setAutoDelete(false);
1195 for (int i = 0; i < AnglesList->count(); i++)
1196 if (AnglesList->isSelected(i))
1197 aList.append(AnglesList->item(i));
1199 for (int i = 0; i < aList.count(); i++)
1203 //=================================================================================
1204 // function : eventFilter()
1205 // purpose : event filter ???
1206 //=================================================================================
1207 bool SMESHGUI_ExtrusionAlongPathDlg::eventFilter (QObject* object, QEvent* event)
1209 if (event->type() == QEvent::KeyPress) {
1210 QKeyEvent* ke = (QKeyEvent*)event;
1211 if (object == AnglesList) {
1212 if (ke->key() == Key_Delete)
1216 else if (event->type() == QEvent::FocusIn) {
1217 if (object == ElementsLineEdit) {
1218 if (myEditCurrentArgument != ElementsLineEdit)
1219 SetEditCurrentArgument(SelectElementsButton);
1221 else if (object == StartPointLineEdit) {
1222 if (myEditCurrentArgument != StartPointLineEdit)
1223 SetEditCurrentArgument(SelectStartPointButton);
1225 else if (object == XSpin->editor() || object == YSpin->editor() || object == ZSpin->editor()) {
1226 if (myEditCurrentArgument != XSpin)
1227 SetEditCurrentArgument(SelectBasePointButton);
1230 return QDialog::eventFilter(object, event);
1233 //=================================================================================
1234 // function : keyPressEvent()
1236 //=================================================================================
1237 void SMESHGUI_ExtrusionAlongPathDlg::keyPressEvent( QKeyEvent* e )
1239 QDialog::keyPressEvent( e );
1240 if ( e->isAccepted() )
1243 if ( e->key() == Key_F1 )