1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 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, or (at your option) any later version.
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
23 // GEOM GEOMGUI : GUI for Geometry component
24 // File : GenerationGUI_PipeDlg.cxx
25 // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
27 #include "GenerationGUI_PipeDlg.h"
30 #include <GeometryGUI.h>
32 #include <GEOMUtils.hxx>
34 #include <SUIT_Session.h>
35 #include <SUIT_ResourceMgr.h>
36 #include <SalomeApp_Application.h>
37 #include <LightApp_SelectionMgr.h>
39 #include <TopoDS_Shape.hxx>
40 #include <TColStd_MapOfInteger.hxx>
42 #include <GEOMImpl_Types.hxx>
44 //=================================================================================
45 // class : GenerationGUI_PipeDlg()
46 // purpose : Constructs a GenerationGUI_PipeDlg which is a child of 'parent', with the
47 // name 'name' and widget flags set to 'f'.
48 // The dialog will by default be modeless, unless you set 'modal' to
49 // TRUE to construct a modal dialog.
50 //=================================================================================
51 GenerationGUI_PipeDlg::GenerationGUI_PipeDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
52 bool modal, Qt::WindowFlags fl)
53 : GEOMBase_Skeleton (theGeometryGUI, parent, modal, fl),
54 myGenGroupCheckGP (0),
57 myGenGroupCheckGMP (0),
61 QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PIPE")));
62 QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
63 QPixmap image2 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PIPE_BINORMAL")));
64 QPixmap image3 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_PIPE_SECTION")));
66 setWindowTitle(tr("GEOM_PIPE_TITLE"));
68 /***************************************************************/
69 mainFrame()->GroupConstructors->setTitle(tr("GEOM_PIPE"));
70 mainFrame()->RadioButton1->setIcon(image0);
71 mainFrame()->RadioButton2->setIcon(image2);
72 mainFrame()->RadioButton3->setIcon(image3);
73 // mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
74 // mainFrame()->RadioButton3->close();
76 GroupPoints = new DlgRef_3Sel1Check(centralWidget());
78 GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
79 GroupPoints->TextLabel1->setText(tr("GEOM_BASE_OBJECT"));
80 GroupPoints->TextLabel2->setText(tr("GEOM_PATH_OBJECT"));
81 GroupPoints->TextLabel3->setText(tr("GEOM_BINORMAL"));
82 GroupPoints->PushButton1->setIcon(image1);
83 GroupPoints->PushButton2->setIcon(image1);
84 GroupPoints->PushButton3->setIcon(image1);
85 GroupPoints->CheckButton1->setText(tr("GEOM_SELECT_UNPUBLISHED_EDGES"));
87 // Add widgets for group generation
88 QGridLayout *aLayoutGP = (QGridLayout *)GroupPoints->GroupBox1->layout();
91 new QCheckBox(tr("GEOM_GENERATE_GROUPS"), GroupPoints->GroupBox1);
93 new QLabel (tr("GEOM_GROUP_NAME_PREFIX"), GroupPoints->GroupBox1);
94 myPrefixEditGP = new QLineEdit(GroupPoints->GroupBox1);
96 aLayoutGP->addWidget(myGenGroupCheckGP, 4, 0, 1, 3);
97 aLayoutGP->addWidget(myPrefixLblGP, 5, 0, 1, 2);
98 aLayoutGP->addWidget(myPrefixEditGP, 5, 2);
100 GroupMakePoints = new DlgRef_3Sel2Check3Spin(centralWidget());
102 GroupMakePoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
103 GroupMakePoints->TextLabel1->setText(tr("GEOM_BASE_OBJECT"));
104 GroupMakePoints->TextLabel2->setText(tr("GEOM_LOCATIONS"));
105 GroupMakePoints->TextLabel3->setText(tr("GEOM_PATH_OBJECT"));
106 GroupMakePoints->PushButton1->setIcon(image1);
107 GroupMakePoints->PushButton2->setIcon(image1);
108 GroupMakePoints->PushButton3->setIcon(image1);
109 GroupMakePoints->CheckBox1->setText(tr("GEOM_WITH_CONTACT"));
110 GroupMakePoints->CheckBox2->setText(tr("GEOM_WITH_CORRECTION"));
111 GroupMakePoints->SpinBox1->setAttribute(Qt::WA_DeleteOnClose);
112 GroupMakePoints->SpinBox2->setAttribute(Qt::WA_DeleteOnClose);
113 GroupMakePoints->SpinBox3->setAttribute(Qt::WA_DeleteOnClose);
114 GroupMakePoints->TextLabel4->setAttribute(Qt::WA_DeleteOnClose);
115 GroupMakePoints->TextLabel5->setAttribute(Qt::WA_DeleteOnClose);
116 GroupMakePoints->TextLabel6->setAttribute(Qt::WA_DeleteOnClose);
117 GroupMakePoints->SpinBox1->close();
118 GroupMakePoints->SpinBox2->close();
119 GroupMakePoints->SpinBox3->close();
120 GroupMakePoints->TextLabel4->close();
121 GroupMakePoints->TextLabel5->close();
122 GroupMakePoints->TextLabel6->close();
124 // Add widgets for group generation
125 QGridLayout *aLayoutGMP = (QGridLayout *)GroupMakePoints->GroupBox1->layout();
128 new QCheckBox(tr("GEOM_GENERATE_GROUPS"), GroupMakePoints->GroupBox1);
130 new QLabel (tr("GEOM_GROUP_NAME_PREFIX"), GroupMakePoints->GroupBox1);
131 myPrefixEditGMP = new QLineEdit(GroupMakePoints->GroupBox1);
133 aLayoutGMP->addWidget(myGenGroupCheckGMP, 8, 0, 1, 3);
134 aLayoutGMP->addWidget(myPrefixLblGMP, 9, 0, 1, 2);
135 aLayoutGMP->addWidget(myPrefixEditGMP, 9, 2);
137 QVBoxLayout* layout = new QVBoxLayout(centralWidget());
138 layout->setMargin(0); layout->setSpacing(6);
139 layout->addWidget(GroupPoints);
140 layout->addWidget(GroupMakePoints);
141 /***************************************************************/
143 setHelpFileName("create_extrusion_alongpath_page.html");
149 //=================================================================================
150 // function : ~GenerationGUI_PipeDlg()
151 // purpose : Destroys the object and frees any allocated resources
152 //=================================================================================
153 GenerationGUI_PipeDlg::~GenerationGUI_PipeDlg()
155 // no need to delete child widgets, Qt does it all for us
158 //=================================================================================
161 //=================================================================================
162 void GenerationGUI_PipeDlg::Init()
165 GroupPoints->LineEdit1->setReadOnly(true);
166 GroupPoints->LineEdit2->setReadOnly(true);
167 GroupPoints->LineEdit3->setReadOnly(true);
169 GroupPoints->LineEdit1->setText("");
170 GroupPoints->LineEdit2->setText("");
171 GroupPoints->LineEdit3->setText("");
175 GroupPoints->CheckButton1->setEnabled(false);
177 GroupMakePoints->LineEdit1->setReadOnly(true);
178 GroupMakePoints->LineEdit2->setReadOnly(true);
179 GroupMakePoints->LineEdit3->setReadOnly(true);
181 GroupMakePoints->LineEdit1->setText("");
182 GroupMakePoints->LineEdit2->setText("");
183 GroupMakePoints->LineEdit3->setText("");
185 showOnlyPreviewControl();
187 // signals and slots connections
188 connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
189 connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
191 connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int)));
193 connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
194 connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
195 connect(GroupPoints->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
197 connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(SelectionTypeButtonClicked()));
199 connect(GroupMakePoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
200 connect(GroupMakePoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
201 connect(GroupMakePoints->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
202 connect(GroupMakePoints->CheckBox1, SIGNAL(clicked()), this, SLOT(processPreview()));
203 connect(GroupMakePoints->CheckBox2, SIGNAL(clicked()), this, SLOT(processPreview()));
204 connect(myGenGroupCheckGP, SIGNAL(toggled(bool)), this, SLOT(GenGroupClicked(bool)));
205 connect(myGenGroupCheckGMP, SIGNAL(toggled(bool)), this, SLOT(GenGroupClicked(bool)));
207 initName(tr("GEOM_PIPE"));
210 GroupPoints->TextLabel3->hide();
211 GroupPoints->PushButton3->hide();
212 GroupPoints->LineEdit3->hide();
213 ConstructorsClicked(0);
215 GroupPoints->PushButton1->click();
216 SelectionIntoArgument();
220 //=================================================================================
221 // function : ConstructorsClicked()
222 // purpose : Radio button management
223 //=================================================================================
224 void GenerationGUI_PipeDlg::ConstructorsClicked( int constructorId )
228 switch (constructorId) {
230 GroupMakePoints->hide();
232 GroupPoints->TextLabel3->hide();
233 GroupPoints->PushButton3->hide();
234 GroupPoints->LineEdit3->hide();
235 GroupPoints->PushButton1->click();
236 myGenGroupCheckGP->setChecked(false);
237 resetGenGroup(myGenGroupCheckGP, false, true);
240 GroupMakePoints->hide();
242 GroupPoints->TextLabel3->show();
243 GroupPoints->PushButton3->show();
244 GroupPoints->LineEdit3->show();
245 GroupPoints->PushButton1->click();
246 myGenGroupCheckGP->setChecked(false);
247 resetGenGroup(myGenGroupCheckGP, false, true);
251 GroupMakePoints->show();
252 GroupMakePoints->PushButton1->click();
253 myGenGroupCheckGMP->setChecked(false);
254 resetGenGroup(myGenGroupCheckGMP, false, true);
260 qApp->processEvents();
264 SelectionIntoArgument();
268 //=================================================================================
269 // function : SelectionBittonClicked()
270 // purpose : Selection type Radio button management
271 //=================================================================================
272 void GenerationGUI_PipeDlg::SelectionTypeButtonClicked()
275 if ( GroupPoints->CheckButton1->isChecked() ) {
276 localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
278 TColStd_MapOfInteger aMap;
279 aMap.Add(GEOM_COMPOUND);
282 globalSelection(aMap);
284 if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
285 myEditCurrentArgument->setText("");
292 //=================================================================================
293 // function : ClickOnOk()
295 //=================================================================================
296 void GenerationGUI_PipeDlg::ClickOnOk()
298 setIsApplyAndClose( true );
303 //=================================================================================
304 // function : ClickOnApply()
306 //=================================================================================
307 bool GenerationGUI_PipeDlg::ClickOnApply()
317 //=================================================================================
318 // function : SelectionIntoArgument()
319 // purpose : Called when selection is changed or on dialog initialization or activation
320 //=================================================================================
321 void GenerationGUI_PipeDlg::SelectionIntoArgument()
324 myEditCurrentArgument->setText("");
326 if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
327 myBaseObjects.clear();
328 QList<GEOM::GeomObjPtr> objects = getSelected( TopAbs_SHAPE, -1 );
329 for ( int i = 0; i < objects.count(); i++ ) {
330 GEOM::shape_type stype = objects[i]->GetMaxShapeType();
331 GEOM::shape_type maxallowed = getConstructorId() == 1 ? GEOM::FACE : GEOM::SHELL;
332 GEOM::shape_type minallowed = getConstructorId() == 1 ? GEOM::EDGE : GEOM::VERTEX;
333 if ( stype < maxallowed || stype > minallowed )
335 myBaseObjects << objects[i];
337 if ( !myBaseObjects.isEmpty() ) {
338 QString aName = myBaseObjects.count() > 1 ? QString( "%1_objects").arg( myBaseObjects.count() ) : GEOMBase::GetName( myBaseObjects[0].get() );
339 myEditCurrentArgument->setText( aName );
342 else if (myEditCurrentArgument == GroupPoints->LineEdit2) {
343 QList<TopAbs_ShapeEnum> types;
344 types << TopAbs_EDGE << TopAbs_WIRE;
345 myPath = getSelected( types );
347 QString aName = GEOMBase::GetName( myPath.get() );
348 myEditCurrentArgument->setText( aName );
349 if ( getConstructorId() == 1 && !myVec )
350 GroupPoints->PushButton3->click();
351 else if ( myBaseObjects.isEmpty() )
352 GroupPoints->PushButton1->click();
356 else if (myEditCurrentArgument == GroupPoints->LineEdit3) {
357 myVec = getSelected( TopAbs_EDGE );
359 QString aName = GEOMBase::GetName( myVec.get() );
360 myEditCurrentArgument->setText( aName );
361 if ( myBaseObjects.isEmpty() )
362 GroupPoints->PushButton1->click();
364 GroupPoints->PushButton2->click();
367 else if ( myEditCurrentArgument == GroupMakePoints->LineEdit1 ) {
368 QList<TopAbs_ShapeEnum> types;
369 types << TopAbs_EDGE << TopAbs_WIRE << TopAbs_FACE << TopAbs_SHELL;
370 QList<GEOM::GeomObjPtr> objects = getSelected( types, -1 );
371 GEOMBase::Synchronize( myBaseObjects, objects );
372 if ( !myBaseObjects.isEmpty() ) {
373 QString aName = myBaseObjects.count() > 1 ? QString( "%1_objects").arg( myBaseObjects.count() ) : GEOMBase::GetName( myBaseObjects[0].get() );
374 myEditCurrentArgument->setText( aName );
377 else if ( myEditCurrentArgument == GroupMakePoints->LineEdit2 ) {
378 localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
379 QList<GEOM::GeomObjPtr> objects = getSelected( TopAbs_VERTEX, -1 );
380 GEOMBase::Synchronize( myLocations, objects );
381 if ( !myLocations.isEmpty() ) {
382 QString aName = myLocations.count() > 1 ? QString( "%1_objects").arg( myLocations.count() ) : GEOMBase::GetName( myLocations[0].get() );
383 myEditCurrentArgument->setText( aName );
386 else if ( myEditCurrentArgument == GroupMakePoints->LineEdit3 ) {
387 QList<TopAbs_ShapeEnum> types;
388 types << TopAbs_EDGE << TopAbs_WIRE;
389 myPath = getSelected( types );
391 QString aName = GEOMBase::GetName( myPath.get() );
392 myEditCurrentArgument->setText( aName );
400 //=================================================================================
401 // function : SetEditCurrentArgument()
403 //=================================================================================
404 void GenerationGUI_PipeDlg::SetEditCurrentArgument()
406 QPushButton* send = (QPushButton*)sender();
408 disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
409 globalSelection(GEOM_ALLSHAPES);
410 GroupPoints->PushButton1->setDown(false);
411 GroupPoints->PushButton2->setDown(false);
412 GroupPoints->PushButton3->setDown(false);
413 GroupPoints->LineEdit1->setEnabled(false);
414 GroupPoints->LineEdit2->setEnabled(false);
415 GroupPoints->LineEdit3->setEnabled(false);
416 if (send == GroupPoints->PushButton1) {
417 myEditCurrentArgument = GroupPoints->LineEdit1;
418 GroupPoints->CheckButton1->setEnabled(false);
420 else if (send == GroupPoints->PushButton2) {
421 myEditCurrentArgument = GroupPoints->LineEdit2;
423 if ( GroupPoints->CheckButton1->isChecked() ) {
424 localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
426 TColStd_MapOfInteger aMap;
427 aMap.Add(GEOM_COMPOUND);
430 globalSelection(aMap);
432 GroupPoints->CheckButton1->setEnabled(true);
434 else if(send == GroupPoints->PushButton3) {
435 myEditCurrentArgument = GroupPoints->LineEdit3;
436 GroupPoints->CheckButton1->setEnabled(false);
437 localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
440 GroupMakePoints->PushButton1->setDown(false);
441 GroupMakePoints->PushButton2->setDown(false);
442 GroupMakePoints->PushButton3->setDown(false);
443 GroupMakePoints->LineEdit1->setEnabled(false);
444 GroupMakePoints->LineEdit2->setEnabled(false);
445 GroupMakePoints->LineEdit3->setEnabled(false);
446 if (send == GroupMakePoints->PushButton1) {
447 myEditCurrentArgument = GroupMakePoints->LineEdit1;
449 else if(send == GroupMakePoints->PushButton2) {
450 myEditCurrentArgument = GroupMakePoints->LineEdit2;
452 else if (send == GroupMakePoints->PushButton3) {
453 myEditCurrentArgument = GroupMakePoints->LineEdit3;
456 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
457 this, SLOT(SelectionIntoArgument()));
460 myEditCurrentArgument->setEnabled(true);
461 myEditCurrentArgument->setFocus();
462 // after setFocus(), because it will be setDown(false) when loses focus
465 // seems we need it only to avoid preview disappearing, caused by selection mode change
469 //=================================================================================
470 // function : ActivateThisDialog()
472 //=================================================================================
473 void GenerationGUI_PipeDlg::ActivateThisDialog()
475 GEOMBase_Skeleton::ActivateThisDialog();
476 connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
477 this, SLOT( SelectionIntoArgument() ) );
479 ConstructorsClicked(getConstructorId());
482 //=================================================================================
483 // function : enterEvent()
484 // purpose : when mouse enter onto the QWidget
485 //=================================================================================
486 void GenerationGUI_PipeDlg::enterEvent (QEvent*)
488 if (!mainFrame()->GroupConstructors->isEnabled())
489 ActivateThisDialog();
492 //=================================================================================
493 // function : createOperation
495 //=================================================================================
496 GEOM::GEOM_IOperations_ptr GenerationGUI_PipeDlg::createOperation()
498 return getGeomEngine()->GetI3DPrimOperations(getStudyId());
501 //=================================================================================
502 // function : isValid
504 //=================================================================================
505 bool GenerationGUI_PipeDlg::isValid (QString&)
508 switch ( getConstructorId() ) {
510 ok = !myBaseObjects.isEmpty() && myPath;
513 ok = !myBaseObjects.isEmpty() && myPath && myVec;
516 ok = !myBaseObjects.isEmpty() && ( myLocations.isEmpty() || myBaseObjects.count() == myLocations.count() ) && myPath;
524 //=================================================================================
525 // function : execute
527 //=================================================================================
528 bool GenerationGUI_PipeDlg::execute (ObjectList& objects)
530 GEOM::ListOfGO_var aList;
532 GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation());
533 bool doGroups = !IsPreview();
535 myGroupObjectsMap.clear();
537 switch( getConstructorId() ) {
541 doGroups = myGenGroupCheckGP->isEnabled() &&
542 myGenGroupCheckGP->isChecked();
545 for (int i = 0; i < myBaseObjects.count(); i++) {
546 switch ( getConstructorId() ) {
548 aList = anOper->MakePipe(myBaseObjects[i].get(),
549 myPath.get(), doGroups);
552 aList = anOper->MakePipeBiNormalAlongVector
553 (myBaseObjects[i].get(), myPath.get(), myVec.get(), doGroups);
557 if (aList->length() > 0) {
562 if (!aList[0]->_is_nil()) {
563 objects.push_back(aList[0]._retn());
570 GEOM::ListOfGO_var myBaseGO = new GEOM::ListOfGO();
571 GEOM::ListOfGO_var myLocationsGO = new GEOM::ListOfGO();
572 myBaseGO->length( myBaseObjects.count() );
573 myLocationsGO->length( myLocations.count() );
574 for (int i = 0; i < myBaseObjects.count(); i++) {
575 myBaseGO[i] = myBaseObjects[i].copy();
577 for (int i = 0; i < myLocations.count(); i++) {
578 myLocationsGO[i] = myLocations[i].copy();
582 doGroups = myGenGroupCheckGMP->isEnabled() &&
583 myGenGroupCheckGMP->isChecked();
586 aList = anOper->MakePipeWithDifferentSections
587 (myBaseGO.in(), myLocationsGO.in(), myPath.get(),
588 GroupMakePoints->CheckBox1->isChecked(),
589 GroupMakePoints->CheckBox2->isChecked(), doGroups);
591 if (aList->length() > 0) {
596 if (!aList[0]->_is_nil()) {
597 objects.push_back(aList[0]._retn());
608 //=================================================================================
609 // function : addSubshapeToStudy
610 // purpose : virtual method to add new SubObjects if local selection
611 //=================================================================================
612 void GenerationGUI_PipeDlg::addSubshapesToStudy()
614 GEOMBase::PublishSubObject( myPath.get() );
615 GEOMBase::PublishSubObject( myVec.get() );
618 //=================================================================================
619 // function : extractPrefix
620 // purpose : redefined from GEOMBase_Helper class
621 //=================================================================================
622 bool GenerationGUI_PipeDlg::extractPrefix() const
624 return myBaseObjects.count() > 1;
627 //=================================================================================
628 // function : restoreSubShapes
629 // purpose : virtual method to restore tree of argument's sub-shapes under
630 // the resulting shape. Redefined from GEOMBase_Helper class.
631 //=================================================================================
632 void GenerationGUI_PipeDlg::restoreSubShapes
633 (SALOMEDS::Study_ptr theStudy, SALOMEDS::SObject_ptr theSObject)
635 QCheckBox *aGenGroupCheck = NULL;
636 QLineEdit *aPrefixEdit = NULL;
638 switch (getConstructorId()) {
641 aGenGroupCheck = myGenGroupCheckGP;
642 aPrefixEdit = myPrefixEditGP;
645 aGenGroupCheck = myGenGroupCheckGMP;
646 aPrefixEdit = myPrefixEditGMP;
652 if (aGenGroupCheck == NULL || !aGenGroupCheck->isChecked()) {
656 // get Object from SObject
657 GEOM::GEOM_Object_var aFather = GEOM::GEOM_Object::_narrow
658 (theSObject->GetObject());
660 if (CORBA::is_nil(aFather)) {
664 ObjectMap::const_iterator anIter =
665 myGroupObjectsMap.find(aFather->GetEntry());
666 QString aPrefix = aPrefixEdit->text();
667 bool hasPrefix = !aPrefix.isEmpty();
669 if (anIter != myGroupObjectsMap.end()) {
670 QList<GEOM::GeomObjPtr>::const_iterator it = anIter->second.begin();
672 for (; it != anIter->second.end(); it++) {
677 aName = aPrefix + "_";
680 aName += tr((*it)->GetName());
681 getGeomEngine()->AddInStudy(theStudy, (*it).get(),
682 aName.toStdString().c_str(), aFather);
687 //=================================================================================
688 // function : getSourceObjects
689 // purpose : virtual method to get source objects
690 //=================================================================================
691 QList<GEOM::GeomObjPtr> GenerationGUI_PipeDlg::getSourceObjects()
693 QList<GEOM::GeomObjPtr> res(myBaseObjects);
694 res << myPath << myVec;
695 for (int i = 0; i < myLocations.count(); i++)
696 res << myLocations[i];
700 //=================================================================================
701 // function : GenGroupClicked
702 // purpose : Slot to treat checking "Generate groups" check box.
703 //=================================================================================
704 void GenerationGUI_PipeDlg::GenGroupClicked(bool isChecked)
706 resetGenGroup((QCheckBox *)sender(), isChecked, false);
709 //=================================================================================
710 // function : updateGenGroup
711 // purpose : Update "Generate groups" widgets depending on the path.
712 //=================================================================================
713 void GenerationGUI_PipeDlg::updateGenGroup()
715 bool isEnable = true;
718 // Check if the path is closed.
719 TopoDS_Shape aShapePath;
721 if (GEOMBase::GetShape(myPath.get(), aShapePath)) {
722 isEnable = GEOMUtils::IsOpenPath(aShapePath);
726 QCheckBox *aGenGroupCheck = NULL;
728 switch (getConstructorId()) {
731 aGenGroupCheck = myGenGroupCheckGP;
734 aGenGroupCheck = myGenGroupCheckGMP;
740 if (aGenGroupCheck != NULL) {
741 const bool isChecked = aGenGroupCheck->isChecked();
743 aGenGroupCheck->setEnabled(isEnable);
744 resetGenGroup(aGenGroupCheck, isEnable && isChecked, false);
748 //=================================================================================
749 // function : resetGenGroup
750 // purpose : Resets data of "Generate groups" widgets.
751 //=================================================================================
752 void GenerationGUI_PipeDlg::resetGenGroup(QCheckBox *theGenGroup,
753 const bool isChecked,
754 const bool isClearPrefix)
756 QLabel *aPrefixLbl = NULL;
757 QLineEdit *aPrefixEdit = NULL;
759 if (theGenGroup == myGenGroupCheckGP) {
760 aPrefixLbl = myPrefixLblGP;
761 aPrefixEdit = myPrefixEditGP;
762 } else if (theGenGroup == myGenGroupCheckGMP) {
763 aPrefixLbl = myPrefixLblGMP;
764 aPrefixEdit = myPrefixEditGMP;
767 if (aPrefixLbl != NULL) {
768 aPrefixLbl->setEnabled(isChecked);
769 aPrefixEdit->setEnabled(isChecked);
772 aPrefixEdit->setText("");
777 //=================================================================================
778 // function : addGroups
779 // purpose : Add result groups to the list of groups.
780 //=================================================================================
781 void GenerationGUI_PipeDlg::addGroups(GEOM::ListOfGO_var &theResult)
783 const int aNbObj = theResult->length();
786 if (!theResult[0]->_is_nil()) {
787 QString anEntry = theResult[0]->GetEntry();
790 for (i = 1; i < aNbObj; ++i) {
791 if (!theResult[i]->_is_nil()) {
792 myGroupObjectsMap[anEntry].append(GEOM::GeomObjPtr(theResult[i]));