1 // Copyright (C) 2007-2008 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.
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
22 // GEOM GEOMGUI : GUI for Geometry component
23 // File : OperationGUI_ChamferDlg.cxx
24 // Author : Damien COQUERET, Open CASCADE S.A.S.
26 #include "OperationGUI_ChamferDlg.h"
27 #include <QtxDoubleSpinBox.h>
30 #include <GeometryGUI.h>
33 #include <SUIT_Desktop.h>
34 #include <SUIT_Session.h>
35 #include <SUIT_ResourceMgr.h>
36 #include <SUIT_ViewWindow.h>
37 #include <SUIT_ViewManager.h>
38 #include <SalomeApp_Application.h>
39 #include <LightApp_SelectionMgr.h>
40 #include <OCCViewer_ViewModel.h>
43 #include <TColStd_MapOfInteger.hxx>
45 #include <GEOMImpl_Types.hxx>
47 //=================================================================================
48 // class : OperationGUI_ChamferDlg()
49 // purpose : Constructs a OperationGUI_ChamferDlg which is a child of 'parent', with the
50 // name 'name' and widget flags set to 'f'.
51 // The dialog will by default be modeless, unless you set 'modal' to
52 // TRUE to construct a modal dialog.
53 //=================================================================================
54 OperationGUI_ChamferDlg::OperationGUI_ChamferDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
55 : GEOMBase_Skeleton(theGeometryGUI, parent, false),
58 SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
59 QPixmap image1 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_ALL")));
60 QPixmap image2 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_EDGE_FROM_FACE")));
61 QPixmap image3 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_FACE")));
62 QPixmap image4 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHAMFER_EDGE")));
64 QPixmap iconSelect (aResMgr->loadPixmap("GEOM", tr("ICON_SELECT")));
66 setWindowTitle(tr("GEOM_CHAMFER_TITLE"));
68 /***************************************************************/
69 mainFrame()->GroupConstructors->setTitle(tr("GEOM_CHAMFER"));
71 mainFrame()->RadioButton1->setIcon(image1);
72 mainFrame()->RadioButton2->setIcon(image2);
73 mainFrame()->RadioButton3->setIcon(image3);
74 mainFrame()->RadioButton4->show();
75 mainFrame()->RadioButton4->setIcon(image4);
79 myGrp1 = new QGroupBox(tr("GEOM_CHAMFER_ALL"), centralWidget());
81 QGridLayout* aLayout = new QGridLayout(myGrp1);
82 aLayout->setMargin(9); aLayout->setSpacing(6);
84 createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp1, aLayout, MainObj1);
86 int row = aLayout->rowCount();
87 aLayout->addWidget(new QLabel(tr("D"), myGrp1), row, 0);
88 aLayout->addWidget((mySpinBox[ SpinBox1 ] = new SalomeApp_DoubleSpinBox(myGrp1)), row++, 2);
89 aLayout->setRowStretch(row, 10);
91 // Create second group
93 myGrp2 = new QGroupBox(tr("GEOM_CHAMFER_EDGES"), centralWidget());
95 aLayout = new QGridLayout(myGrp2);
96 aLayout->setMargin(9); aLayout->setSpacing(6);
98 createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp2, aLayout, MainObj2);
99 createSelWg(tr("FACE_1"), iconSelect, myGrp2, aLayout, Face1);
100 createSelWg(tr("FACE_2"), iconSelect, myGrp2, aLayout, Face2);
102 createRadioWg(tr("GEOM_D1"), tr("GEOM_D2"), myGrp2, aLayout, RadioButton21, SpinBox21, SpinBox22);
103 createRadioWg(tr("GEOM_D"), tr("GEOM_ANGLE"), myGrp2, aLayout, RadioButton22, SpinBox23, SpinBox24);
105 aLayout->setRowStretch(aLayout->rowCount(), 10);
107 // Create third group
109 myGrp3 = new QGroupBox(tr("GEOM_CHAMFER_FACES"), centralWidget());
111 aLayout = new QGridLayout(myGrp3);
112 aLayout->setMargin(9); aLayout->setSpacing(6);
114 createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp3, aLayout, MainObj3);
115 createSelWg(tr("SELECTED_FACES"), iconSelect, myGrp3, aLayout, Faces);
117 createRadioWg(tr("GEOM_D1"), tr("GEOM_D2"), myGrp3, aLayout, RadioButton31, SpinBox31, SpinBox32);
118 createRadioWg(tr("GEOM_D"), tr("GEOM_ANGLE"), myGrp3, aLayout, RadioButton32, SpinBox33, SpinBox34);
120 aLayout->setRowStretch(aLayout->rowCount(), 10);
122 // Create fourth group
124 myGrp4 = new QGroupBox(tr("GEOM_CHAMFER_EDGE"), centralWidget());
126 aLayout = new QGridLayout(myGrp4);
127 aLayout->setMargin(9); aLayout->setSpacing(6);
129 createSelWg(tr("GEOM_MAIN_OBJECT"), iconSelect, myGrp4, aLayout, MainObj4);
130 createSelWg(tr("SELECTED_EDGE"), iconSelect, myGrp4, aLayout, Edges);
132 createRadioWg(tr("GEOM_D1"), tr("GEOM_D2"), myGrp4, aLayout, RadioButton41, SpinBox41, SpinBox42);
133 createRadioWg(tr("GEOM_D"), tr("GEOM_ANGLE"), myGrp4, aLayout, RadioButton42, SpinBox43, SpinBox44);
135 aLayout->setRowStretch(aLayout->rowCount(), 10);
137 // Add groups to layout
139 QVBoxLayout* layout = new QVBoxLayout(centralWidget());
140 layout->setMargin(0); layout->setSpacing(6);
141 layout->addWidget(myGrp1);
142 layout->addWidget(myGrp2);
143 layout->addWidget(myGrp3);
144 layout->addWidget(myGrp4);
145 /***************************************************************/
147 // Set range of spinboxes
148 double SpecificStep = 10.0;
149 QMap< int, SalomeApp_DoubleSpinBox* >::iterator anIter;
150 for (anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter) {
151 if (anIter.key() == SpinBox44 || anIter.key() == SpinBox34 || anIter.key() == SpinBox24)
152 initSpinBox(anIter.value(), 0.001, 89.999, 5, 0);
154 initSpinBox(anIter.value(), 0.001, COORD_MAX, SpecificStep, 3);
157 setHelpFileName("chamfer_operation_page.html");
161 myRadioButton[ RadioButton21 ]->click();
164 //=================================================================================
165 // function : ~OperationGUI_ChamferDlg()
166 // purpose : Destroys the object and frees any allocated resources
167 //=================================================================================
168 OperationGUI_ChamferDlg::~OperationGUI_ChamferDlg()
172 //=================================================================================
175 //=================================================================================
176 void OperationGUI_ChamferDlg::Init()
178 // Set Initial values of spinboxes
179 QMap< int, SalomeApp_DoubleSpinBox* >::iterator anIter;
180 for (anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter)
181 anIter.value()->setValue(5);
184 QMap< int, QLineEdit* >::iterator anIterLE;
185 for (anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE)
186 anIterLE.value()->setText("");
188 myShape = GEOM::GEOM_Object::_nil();
192 myFace[ Face1 ] = -1;
193 myFace[ Face2 ] = -1;
195 // signals and slots connections
198 connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk() ));
199 connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
202 connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int)));
205 QMap< int, QPushButton* >::iterator anIterBtn;
206 for (anIterBtn = mySelBtn.begin(); anIterBtn != mySelBtn.end(); ++anIterBtn)
207 connect(anIterBtn.value(), SIGNAL(clicked()),
208 this, SLOT(SetEditCurrentArgument()));
211 QMap< int, QLineEdit* >::iterator anIterLE2;
212 for (anIterLE2 = mySelName.begin(); anIterLE2 != mySelName.end(); ++anIterLE2)
213 connect(anIterLE2.value(), SIGNAL(returnPressed()),
214 this, SLOT(LineEditReturnPressed()));
217 QMap< int, SalomeApp_DoubleSpinBox* >::iterator anIterSpin;
218 for (anIterSpin = mySpinBox.begin(); anIterSpin != mySpinBox.end(); ++anIterSpin)
219 connect(anIterSpin.value(), SIGNAL(valueChanged(double)),
220 this, SLOT(ValueChangedInSpinBox(double)));
223 QMap< int, QRadioButton* >::iterator anIterRadio;
224 for (anIterRadio = myRadioButton.begin(); anIterRadio != myRadioButton.end(); ++anIterRadio)
225 connect(anIterRadio.value(), SIGNAL(clicked()),
226 this, SLOT(RadioButtonPressed()));
228 initName(tr("GEOM_CHAMFER"));
230 myConstructorId = -1;
231 ConstructorsClicked(0);
234 //=================================================================================
235 // function : ConstructorsClicked()
236 // purpose : Radio button management
237 //=================================================================================
238 void OperationGUI_ChamferDlg::ConstructorsClicked (int constructorId)
240 // Activate next widget
241 if (myGeomGUI->getApp()->desktop()->activeWindow()->getViewManager()->getType()
242 != OCCViewer_Viewer::Type()) {
243 mainFrame()->RadioButton1->setChecked(true);
247 if (myConstructorId == constructorId)
250 //disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
252 // Get values from previous widget
253 QString D1 = "5", D2 = "5", D = "5", Angle = "5";
254 if (myConstructorId == 0)
255 D1 = D2 = mySpinBox[ SpinBox1 ]->text();
256 else if (myConstructorId == 1) {
257 D1 = mySpinBox[ SpinBox21 ]->text();
258 D2 = mySpinBox[ SpinBox22 ]->text();
259 D = mySpinBox[ SpinBox23 ]->text();
260 Angle = mySpinBox[ SpinBox24 ]->text();
262 else if (myConstructorId == 2) {
263 D1 = mySpinBox[ SpinBox31 ]->text();
264 D2 = mySpinBox[ SpinBox32 ]->text();
265 D = mySpinBox[ SpinBox33 ]->text();
266 Angle = mySpinBox[ SpinBox34 ]->text();
268 else if (myConstructorId == 3) {
269 D1 = mySpinBox[ SpinBox41 ]->text();
270 D2 = mySpinBox[ SpinBox42 ]->text();
271 D = mySpinBox[ SpinBox43 ]->text();
272 Angle = mySpinBox[ SpinBox44 ]->text();
275 myConstructorId = constructorId;
277 switch (constructorId) {
283 mySpinBox[ SpinBox1 ]->setText(D1);
290 mySpinBox[ SpinBox21 ]->setText(D1);
291 mySpinBox[ SpinBox22 ]->setText(D2);
292 mySpinBox[ SpinBox23 ]->setText(D);
293 mySpinBox[ SpinBox24 ]->setText(Angle);
300 mySpinBox[ SpinBox31 ]->setText(D1);
301 mySpinBox[ SpinBox32 ]->setText(D2);
302 mySpinBox[ SpinBox32 ]->setText(D2);
303 mySpinBox[ SpinBox33 ]->setText(D);
304 mySpinBox[ SpinBox34 ]->setText(Angle);
311 mySpinBox[ SpinBox41 ]->setText(D1);
312 mySpinBox[ SpinBox42 ]->setText(D2);
313 mySpinBox[ SpinBox43 ]->setText(D);
314 mySpinBox[ SpinBox44 ]->setText(Angle);
320 if (constructorId == 0) mySelBtn[ MainObj1 ]->click();
321 else if (constructorId == 1) mySelBtn[ MainObj2 ]->click();
322 else if (constructorId == 2) mySelBtn[ MainObj3 ]->click();
323 else mySelBtn[ MainObj4 ]->click();
329 SelectionIntoArgument();
332 if (!myShape->_is_nil()) {
333 myEditCurrentArgument->setText(GEOMBase::GetName(myShape));
334 GEOMBase_Skeleton::LineEditReturnPressed();
335 switch (getConstructorId()) {
337 if (myFace[ Face1 ] == -1)
338 mySelBtn[ Face1 ]->click();
341 if (myFaces.Extent() == 0)
342 mySelBtn[ Faces ]->click();
345 if (myEdges.Extent() == 0)
346 mySelBtn[ Edges ]->click();
353 myEditCurrentArgument->setText("");
359 qApp->processEvents();
361 resize(minimumSizeHint());
364 //=================================================================================
365 // function : ClickOnOk()
367 //=================================================================================
368 void OperationGUI_ChamferDlg::ClickOnOk()
374 //=================================================================================
375 // function : ClickOnApply()
377 //=================================================================================
378 bool OperationGUI_ChamferDlg::ClickOnApply()
384 // activate selection and connect selection manager
385 ConstructorsClicked(getConstructorId());
389 //=================================================================================
390 // function : SelectionIntoArgument()
391 // purpose : Called when selection is changed or on dialog initialization or activation
392 //=================================================================================
393 void OperationGUI_ChamferDlg::SelectionIntoArgument()
396 myEditCurrentArgument->setText("");
398 // Get index of current selection focus
400 QMap< int, QLineEdit* >::iterator anIter;
401 for (anIter = mySelName.begin(); anIter != mySelName.end(); ++anIter) {
402 if (myEditCurrentArgument == anIter.value()) {
403 aCurrFocus = anIter.key();
408 LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
409 SALOME_ListIO aSelList;
410 aSelMgr->selectedObjects(aSelList);
412 // If selection of main object is activated
413 if (aCurrFocus == MainObj1 || aCurrFocus == MainObj2 || aCurrFocus == MainObj3 || aCurrFocus == MainObj4)
415 myShape = GEOM::GEOM_Object::_nil();
416 if (aSelList.Extent() == 1) {
417 Standard_Boolean aResult = Standard_False;
418 GEOM::GEOM_Object_var anObj =
419 GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult);
421 if (aResult && !anObj->_is_nil()) {
423 myEditCurrentArgument->setText(GEOMBase::GetName(anObj));
430 // If face selection of second tab is activated
431 else if (aCurrFocus == Face1 || aCurrFocus == Face2)
433 myFace[ aCurrFocus ] = -1;
434 if (aSelList.Extent() == 1) {
435 Standard_Boolean aResult = Standard_False;
436 GEOM::GEOM_Object_var anObj =
437 GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult);
439 if (aResult && !anObj->_is_nil()) {
440 TColStd_IndexedMapOfInteger anIndexes;
441 aSelMgr->GetIndexes(aSelList.First(), anIndexes);
443 if (anIndexes.Extent() == 1) {
444 int anIndex = anIndexes(1);
445 QString aFaceName = QString(GEOMBase::GetName(anObj)) + ":%1";
446 myEditCurrentArgument->setText(aFaceName.arg(anIndex));
447 myFace[ aCurrFocus ] = anIndex;
453 // If face selection of third or fourth tab is activated
454 else if (aCurrFocus == Faces || aCurrFocus == Edges) {
455 if (aCurrFocus == Faces) myFaces.Clear();
456 else myEdges.Clear();
457 if (aSelList.Extent() == 1) {
458 Standard_Boolean aResult = Standard_False;
459 GEOM::GEOM_Object_var anObj =
460 GEOMBase::ConvertIOinGEOMObject(aSelList.First(), aResult);
462 if (aResult && !anObj->_is_nil()) {
463 TColStd_IndexedMapOfInteger anIndexes;
464 aSelMgr->GetIndexes(aSelList.First(), anIndexes);
466 if (anIndexes.Extent() > 0) {
468 if (anIndexes.Extent() == 1) {
469 int anIndex = anIndexes(1);
471 aName = QString(GEOMBase::GetName(anObj)) + QString(":%1").arg(anIndex);
474 aName = tr("GEOM_MEN_POPUP_NAME").arg(anIndexes.Extent());
477 myEditCurrentArgument->setText(aName);
478 int aConstructorId = getConstructorId();
479 if (aConstructorId == 2)
481 else if (aConstructorId == 3)
491 if (aCurrFocus != Faces && aCurrFocus != Edges) {
492 disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
493 myGeomGUI->getApp()->selectionMgr()->clearSelected();
494 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
495 this, SLOT(SelectionIntoArgument()));
498 switch (getConstructorId()) {
500 if (aCurrFocus == MainObj2) {
501 if (!myShape->_is_nil() && myFace[ Face1 ] == -1)
502 mySelBtn[ Face1 ]->click();
504 else if (aCurrFocus == Face1) {
505 if (myFace[ Face1 ] != -1 && myFace[ Face2 ] == -1)
506 mySelBtn[ Face2 ]->click();
508 else if (aCurrFocus == Face2) {
509 if (myFace[ Face2 ] != -1 && myShape->_is_nil())
510 mySelBtn[ MainObj2 ]->click();
514 if (aCurrFocus == MainObj3) {
515 if (!myShape->_is_nil() && myFaces.Extent() == 0)
516 mySelBtn[ Faces ]->click();
520 if (aCurrFocus == MainObj4) {
521 if (!myShape->_is_nil() && myEdges.Extent() == 0)
522 mySelBtn[ Edges ]->click();
530 //=================================================================================
531 // function : SetEditCurrentArgument()
533 //=================================================================================
534 void OperationGUI_ChamferDlg::SetEditCurrentArgument()
536 QPushButton* send = (QPushButton*)sender();
538 QMap< int, QPushButton* >::iterator anIter;
539 for (anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter) {
540 if (anIter.value() == send) {
541 mySelName[ anIter.key() ]->setFocus();
542 myEditCurrentArgument = mySelName[ anIter.key() ];
545 anIter.value()->setDown(false);
546 mySelName[ anIter.key() ]->setEnabled(false);
551 myEditCurrentArgument->setEnabled(true);
552 myEditCurrentArgument->setFocus();
553 // after setFocus(), because it will be setDown(false) when loses focus
558 // seems we need it only to avoid preview disappearing, caused by selection mode change
562 //=================================================================================
563 // function : LineEditReturnPressed()
565 //=================================================================================
566 void OperationGUI_ChamferDlg::LineEditReturnPressed()
568 QLineEdit* send = (QLineEdit*)sender();
570 QMap< int, QLineEdit* >::iterator anIterLE;
571 for (anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE)
572 if (anIterLE.value() == send)
573 myEditCurrentArgument = anIterLE.value();
575 GEOMBase_Skeleton::LineEditReturnPressed();
578 //=================================================================================
579 // function : ActivateThisDialog()
581 //=================================================================================
582 void OperationGUI_ChamferDlg::ActivateThisDialog()
584 GEOMBase_Skeleton::ActivateThisDialog();
585 connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
586 this, SLOT( SelectionIntoArgument() ) );
588 ConstructorsClicked( getConstructorId() );
591 //=================================================================================
592 // function : enterEvent()
594 //=================================================================================
595 void OperationGUI_ChamferDlg::enterEvent (QEvent*)
597 if (!mainFrame()->GroupConstructors->isEnabled())
598 this->ActivateThisDialog();
601 //=================================================================================
602 // function : ValueChangedInSpinBox()
604 //=================================================================================
605 void OperationGUI_ChamferDlg::ValueChangedInSpinBox (double)
610 //=================================================================================
611 // function : createSelWg()
613 //=================================================================================
614 void OperationGUI_ChamferDlg::createSelWg (const QString& theLbl,
617 QGridLayout* theLayout,
620 QLabel* lab = new QLabel(theLbl, theParent);
621 mySelBtn[ theId ] = new QPushButton(theParent);
622 mySelBtn[ theId ]->setIcon(thePix);
623 mySelName[ theId ] = new QLineEdit(theParent);
624 mySelName[ theId ]->setReadOnly(true);
625 int row = theLayout->rowCount();
626 theLayout->addWidget(lab, row, 0);
627 theLayout->addWidget(mySelBtn[ theId ], row, 1);
628 theLayout->addWidget(mySelName[ theId ], row, 2, 1, 4); // take into account createRadioWg()
631 //=================================================================================
632 // function : createRadioWg()
634 //=================================================================================
635 void OperationGUI_ChamferDlg::createRadioWg(const QString& theLbl1,
636 const QString& theLbl2,
638 QGridLayout* theLayout,
640 const int theSpin1Id,
641 const int theSpin2Id)
643 myRadioButton[ theRbId ] = new QRadioButton(theParent);
644 QLabel* lab1 = new QLabel(theLbl1, theParent);
645 QLabel* lab2 = new QLabel(theLbl2, theParent);
646 mySpinBox[ theSpin1Id ] = new SalomeApp_DoubleSpinBox(theParent);
647 mySpinBox[ theSpin2Id ] = new SalomeApp_DoubleSpinBox(theParent);
648 int row = theLayout->rowCount();
649 theLayout->addWidget(myRadioButton[ theRbId ], row, 0);
650 theLayout->addWidget(lab1, row, 2);
651 theLayout->addWidget(mySpinBox[ theSpin1Id ], row, 3);
652 theLayout->addWidget(lab2, row, 4);
653 theLayout->addWidget(mySpinBox[ theSpin2Id ], row, 5);
656 //=================================================================================
657 // function : activateSelection
658 // purpose : Activate selection in accordance with myEditCurrentArgument
659 //=================================================================================
660 void OperationGUI_ChamferDlg::activateSelection()
662 disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
664 if (!myShape->_is_nil() &&
665 (myEditCurrentArgument == mySelName[ Face1 ] ||
666 myEditCurrentArgument == mySelName[ Face2 ] ||
667 myEditCurrentArgument == mySelName[ Faces ])) {
668 localSelection(myShape, TopAbs_FACE);
670 else if (!myShape->_is_nil() && myEditCurrentArgument == mySelName[ Edges ]) {
671 localSelection(myShape, TopAbs_EDGE);
674 TColStd_MapOfInteger aMap;
675 aMap.Add(GEOM_SHELL);
676 aMap.Add(GEOM_SOLID);
677 aMap.Add(GEOM_COMPOUND);
678 globalSelection(aMap);
681 connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
682 this, SLOT(SelectionIntoArgument()));
685 //=================================================================================
686 // function : enableWidgets
687 // purpose : Enable widgets of faces in accordance with value of main object
688 //=================================================================================
689 void OperationGUI_ChamferDlg::enableWidgets()
691 int anId = getConstructorId();
693 bool toEnable = !myShape->_is_nil();
697 //mySelName[ Face1 ]->setEnabled(toEnable);
698 //mySelName[ Face2 ]->setEnabled(toEnable);
699 mySelBtn[ Face1 ]->setEnabled(toEnable);
700 mySelBtn[ Face2 ]->setEnabled(toEnable);
704 mySelName[ Face1 ]->setText("");
705 mySelName[ Face2 ]->setText("");
706 myFace[ Face1 ] = -1;
707 myFace[ Face2 ] = -1;
712 //mySelName[ Faces ]->setEnabled(toEnable);
713 mySelBtn[ Faces ]->setEnabled(toEnable);
715 mySelName[ Faces ]->setText("");
719 else if (anId == 3) {
720 //mySelName[ Edges ]->setEnabled(toEnable);
721 mySelBtn[ Edges ]->setEnabled(toEnable);
724 mySelName[ Edges ]->setText("");
730 //=================================================================================
731 // function : createOperation
733 //=================================================================================
734 GEOM::GEOM_IOperations_ptr OperationGUI_ChamferDlg::createOperation()
736 return getGeomEngine()->GetILocalOperations(getStudyId());
739 //=================================================================================
740 // function : isValid()
741 // purpose : Verify validity of input data
742 //=================================================================================
743 bool OperationGUI_ChamferDlg::isValid (QString& msg)
746 switch (getConstructorId())
749 ok = mySpinBox[ SpinBox1 ]->isValid( msg, !IsPreview() );
750 return !myShape->_is_nil() && ok;
752 if (myRadioButton[ RadioButton21 ]->isChecked())
754 ok = mySpinBox[ SpinBox21 ]->isValid( msg, !IsPreview() ) && ok;
755 ok = mySpinBox[ SpinBox22 ]->isValid( msg, !IsPreview() ) && ok;
759 ok = mySpinBox[ SpinBox23 ]->isValid( msg, !IsPreview() ) && ok;
760 ok = mySpinBox[ SpinBox24 ]->isValid( msg, !IsPreview() ) && ok;
762 return !myShape->_is_nil() && myFace[ Face1 ] > 0 && myFace[ Face2 ] > 0 && ok;
764 if (myRadioButton[ RadioButton31 ]->isChecked())
766 ok = mySpinBox[ SpinBox31 ]->isValid( msg, !IsPreview() ) && ok;
767 ok = mySpinBox[ SpinBox32 ]->isValid( msg, !IsPreview() ) && ok;
771 ok = mySpinBox[ SpinBox33 ]->isValid( msg, !IsPreview() ) && ok;
772 ok = mySpinBox[ SpinBox34 ]->isValid( msg, !IsPreview() ) && ok;
774 return !myShape->_is_nil() && myFaces.Extent() > 0 && ok;
776 if (myRadioButton[ RadioButton41 ]->isChecked())
778 ok = mySpinBox[ SpinBox41 ]->isValid( msg, !IsPreview() ) && ok;
779 ok = mySpinBox[ SpinBox42 ]->isValid( msg, !IsPreview() ) && ok;
783 ok = mySpinBox[ SpinBox43 ]->isValid( msg, !IsPreview() ) && ok;
784 ok = mySpinBox[ SpinBox44 ]->isValid( msg, !IsPreview() ) && ok;
786 return !myShape->_is_nil() && myEdges.Extent() > 0 && ok;
787 default: return false;
791 //=================================================================================
792 // function : execute
794 //=================================================================================
795 bool OperationGUI_ChamferDlg::execute (ObjectList& objects)
797 QStringList aParameters;
798 GEOM::GEOM_Object_var anObj;
799 bool flag = (myRadioButton[ RadioButton21 ]->isChecked() &&
800 myRadioButton[ RadioButton31 ]->isChecked() &&
801 myRadioButton[ RadioButton41 ]->isChecked());
803 int anId = getConstructorId();
805 GEOM::GEOM_ILocalOperations_var anOper = GEOM::GEOM_ILocalOperations::_narrow(getOperation());
808 anObj = anOper->MakeChamferAll(myShape, mySpinBox[ SpinBox1 ]->value());
809 if (!anObj->_is_nil())
810 aParameters << mySpinBox[ SpinBox1 ]->text();
812 else if (anId == 1) {
814 anObj = anOper->MakeChamferEdge(myShape,
815 mySpinBox[ SpinBox21 ]->value(),
816 mySpinBox[ SpinBox22 ]->value(),
819 if (!anObj->_is_nil())
821 aParameters << mySpinBox[ SpinBox21 ]->text();
822 aParameters << mySpinBox[ SpinBox22 ]->text();
826 anObj = anOper->MakeChamferEdgeAD(myShape,
827 mySpinBox[ SpinBox23 ]->value(),
828 mySpinBox[ SpinBox24 ]->value() * PI180,
831 if (!anObj->_is_nil())
833 aParameters << mySpinBox[ SpinBox23 ]->text();
834 aParameters << mySpinBox[ SpinBox24 ]->text();
840 GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
841 anArray->length(myFaces.Extent());
843 for (int i = 1, n = myFaces.Extent(); i <= n; i++)
844 anArray[ i - 1 ] = myFaces(i);
847 anObj = anOper->MakeChamferFaces(myShape,
848 mySpinBox[ SpinBox31 ]->value(),
849 mySpinBox[ SpinBox32 ]->value(),
851 if (!anObj->_is_nil())
853 aParameters << mySpinBox[ SpinBox31 ]->text();
854 aParameters << mySpinBox[ SpinBox32 ]->text();
858 anObj = anOper->MakeChamferFacesAD(myShape,
859 mySpinBox[ SpinBox33 ]->value(),
860 mySpinBox[ SpinBox34 ]->value() * PI180,
862 if (!anObj->_is_nil())
864 aParameters << mySpinBox[ SpinBox33 ]->text();
865 aParameters << mySpinBox[ SpinBox34 ]->text();
869 else if (anId == 3) {
870 GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
871 anArray->length(myEdges.Extent());
872 for (int i = 1, n = myEdges.Extent(); i <= n; i++)
873 anArray[ i - 1 ] = myEdges(i);
875 anObj = anOper->MakeChamferEdges(myShape,
876 mySpinBox[ SpinBox41 ]->value(),
877 mySpinBox[ SpinBox42 ]->value(),
879 if (!anObj->_is_nil())
881 aParameters << mySpinBox[ SpinBox41 ]->text();
882 aParameters << mySpinBox[ SpinBox42 ]->text();
886 anObj = anOper->MakeChamferEdgesAD(myShape,
887 mySpinBox[ SpinBox43 ]->value(),
888 mySpinBox[ SpinBox44 ]->value() * PI180,
890 if (!anObj->_is_nil())
892 aParameters << mySpinBox[ SpinBox43 ]->text();
893 aParameters << mySpinBox[ SpinBox44 ]->text();
898 if (!anObj->_is_nil())
901 anObj->SetParameters(aParameters.join(":").toLatin1().constData());
902 objects.push_back(anObj._retn());
908 //=================================================================================
909 // function : RadioButtonPressed()
911 //=================================================================================
912 void OperationGUI_ChamferDlg::RadioButtonPressed()
914 const QObject* s = sender();
915 bool flag = s == myRadioButton[ RadioButton21 ] ||
916 s == myRadioButton[ RadioButton31 ] ||
917 s == myRadioButton[ RadioButton41 ];
919 myRadioButton[ RadioButton21 ]->blockSignals(true);
920 myRadioButton[ RadioButton22 ]->blockSignals(true);
921 myRadioButton[ RadioButton31 ]->blockSignals(true);
922 myRadioButton[ RadioButton32 ]->blockSignals(true);
923 myRadioButton[ RadioButton41 ]->blockSignals(true);
924 myRadioButton[ RadioButton42 ]->blockSignals(true);
926 myRadioButton[ RadioButton21 ]->setChecked(flag);
927 myRadioButton[ RadioButton31 ]->setChecked(flag);
928 myRadioButton[ RadioButton41 ]->setChecked(flag);
929 myRadioButton[ RadioButton22 ]->setChecked(!flag);
930 myRadioButton[ RadioButton32 ]->setChecked(!flag);
931 myRadioButton[ RadioButton42 ]->setChecked(!flag);
932 mySpinBox[ SpinBox21 ]->setEnabled(flag);
933 mySpinBox[ SpinBox22 ]->setEnabled(flag);
934 mySpinBox[ SpinBox31 ]->setEnabled(flag);
935 mySpinBox[ SpinBox32 ]->setEnabled(flag);
936 mySpinBox[ SpinBox41 ]->setEnabled(flag);
937 mySpinBox[ SpinBox42 ]->setEnabled(flag);
938 mySpinBox[ SpinBox23 ]->setEnabled(!flag);
939 mySpinBox[ SpinBox24 ]->setEnabled(!flag);
940 mySpinBox[ SpinBox33 ]->setEnabled(!flag);
941 mySpinBox[ SpinBox34 ]->setEnabled(!flag);
942 mySpinBox[ SpinBox43 ]->setEnabled(!flag);
943 mySpinBox[ SpinBox44 ]->setEnabled(!flag);
945 myRadioButton[ RadioButton21 ]->blockSignals(false);
946 myRadioButton[ RadioButton22 ]->blockSignals(false);
947 myRadioButton[ RadioButton31 ]->blockSignals(false);
948 myRadioButton[ RadioButton32 ]->blockSignals(false);
949 myRadioButton[ RadioButton41 ]->blockSignals(false);
950 myRadioButton[ RadioButton42 ]->blockSignals(false);