// GEOM GEOMGUI : GUI for Geometry component // // Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // File : OperationGUI_ChamferDlg.cxx // Author : Damien COQUERET, Open CASCADE S.A.S. // #include "OperationGUI_ChamferDlg.h" #include #include #include #include #include #include #include #include #include #include #include #include #include //================================================================================= // class : OperationGUI_ChamferDlg() // purpose : Constructs a OperationGUI_ChamferDlg which is a child of 'parent', with the // name 'name' and widget flags set to 'f'. // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. //================================================================================= OperationGUI_ChamferDlg::OperationGUI_ChamferDlg( GeometryGUI* theGeometryGUI, QWidget* parent ) : GEOMBase_Skeleton( theGeometryGUI, parent, false ) { QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_ALL" ) ) ); QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_EDGE_FROM_FACE" ) ) ); QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_FACE" ) ) ); QPixmap image4( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_CHAMFER_EDGE" ) ) ); QPixmap iconSelect( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); setWindowTitle( tr( "GEOM_CHAMFER_TITLE" ) ); mainFrame()->GroupConstructors->setTitle( tr( "GEOM_CHAMFER" ) ); mainFrame()->RadioButton1->setIcon( image1 ); mainFrame()->RadioButton2->setIcon( image2 ); mainFrame()->RadioButton3->setIcon( image3 ); mainFrame()->RadioButton4->show(); mainFrame()->RadioButton4->setIcon( image4 ); // Create first group myGrp1 = new QGroupBox( tr( "GEOM_CHAMFER_ALL" ), centralWidget() ); QGridLayout* aLayout = new QGridLayout( myGrp1 ); aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp1, aLayout, MainObj1 ); int row = aLayout->rowCount(); aLayout->addWidget( new QLabel( tr( "D" ), myGrp1 ), row, 0 ); aLayout->addWidget( ( mySpinBox[ SpinBox1 ] = new QDoubleSpinBox( myGrp1 ) ), row++, 2 ); aLayout->setRowStretch( row, 10 ); // Create second group myGrp2 = new QGroupBox( tr( "GEOM_CHAMFER_EDGES" ), centralWidget() ); aLayout = new QGridLayout( myGrp2 ); aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp2, aLayout, MainObj2 ); createSelWg( tr( "FACE_1" ), iconSelect, myGrp2, aLayout, Face1 ); createSelWg( tr( "FACE_2" ), iconSelect, myGrp2, aLayout, Face2 ); createRadioWg( tr( "GEOM_D1" ), tr( "GEOM_D2" ), myGrp2, aLayout, RadioButton21, SpinBox21, SpinBox22 ); createRadioWg( tr( "GEOM_D" ), tr( "GEOM_ANGLE" ), myGrp2, aLayout, RadioButton22, SpinBox23, SpinBox24 ); aLayout->setRowStretch( aLayout->rowCount(), 10 ); // Create third group myGrp3 = new QGroupBox( tr( "GEOM_CHAMFER_FACES" ), centralWidget() ); aLayout = new QGridLayout( myGrp3 ); aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp3, aLayout, MainObj3 ); createSelWg( tr( "SELECTED_FACES" ), iconSelect, myGrp3, aLayout, Faces ); createRadioWg( tr( "GEOM_D1" ), tr( "GEOM_D2" ), myGrp3, aLayout, RadioButton31, SpinBox31, SpinBox32 ); createRadioWg( tr( "GEOM_D" ), tr( "GEOM_ANGLE" ), myGrp3, aLayout, RadioButton32, SpinBox33, SpinBox34 ); aLayout->setRowStretch( aLayout->rowCount(), 10 ); // Create fourth group myGrp4 = new QGroupBox( tr( "GEOM_CHAMFER_EDGE" ), centralWidget() ); aLayout = new QGridLayout( myGrp4 ); aLayout->setMargin( 9 ); aLayout->setSpacing( 6 ); createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, myGrp4, aLayout, MainObj4 ); createSelWg( tr( "SELECTED_EDGE" ), iconSelect, myGrp4, aLayout, Edges ); createRadioWg( tr( "GEOM_D1" ), tr( "GEOM_D2" ), myGrp4, aLayout, RadioButton41, SpinBox41, SpinBox42 ); createRadioWg( tr( "GEOM_D" ), tr( "GEOM_ANGLE" ), myGrp4, aLayout, RadioButton42, SpinBox43, SpinBox44 ); aLayout->setRowStretch( aLayout->rowCount(), 10 ); // Add groups to layout QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); layout->setMargin( 0 ); layout->setSpacing( 6 ); layout->addWidget( myGrp1 ); layout->addWidget( myGrp2 ); layout->addWidget( myGrp3 ); layout->addWidget( myGrp4 ); // Set range of spinboxes double SpecificStep = 10.0; QMap< int, QDoubleSpinBox* >::iterator anIter; for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter ) { if ( anIter.key() == SpinBox44 || anIter.key() == SpinBox34 || anIter.key() == SpinBox24 ) initSpinBox( anIter.value(), 0.001, 89.999, 5, 0 ); else initSpinBox( anIter.value(), 0.001, COORD_MAX, SpecificStep, 3 ); } setHelpFileName( "chamfer_operation_page.html" ); /* Initialisations */ Init(); myRadioButton[ RadioButton21 ]->click(); } //================================================================================= // function : ~OperationGUI_ChamferDlg() // purpose : Destroys the object and frees any allocated resources //================================================================================= OperationGUI_ChamferDlg::~OperationGUI_ChamferDlg() { } //================================================================================= // function : Init() // purpose : //================================================================================= void OperationGUI_ChamferDlg::Init() { myConstructorId = -1; reset(); /* signals and slots connections */ // main buttons connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); // group box connect( this, SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) ); // push buttons QMap< int, QPushButton* >::iterator anIterBtn; for ( anIterBtn = mySelBtn.begin(); anIterBtn != mySelBtn.end(); ++anIterBtn ) connect( anIterBtn.value(), SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); // line edits QMap< int, QLineEdit* >::iterator anIterLE2; for ( anIterLE2 = mySelName.begin(); anIterLE2 != mySelName.end(); ++anIterLE2 ) connect( anIterLE2.value(), SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); // spin boxes QMap< int, QDoubleSpinBox* >::iterator anIterSpin; for ( anIterSpin = mySpinBox.begin(); anIterSpin != mySpinBox.end(); ++anIterSpin ) connect( anIterSpin.value(), SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); // radio buttons QMap< int, QRadioButton* >::iterator anIterRadio; for ( anIterRadio = myRadioButton.begin(); anIterRadio != myRadioButton.end(); ++anIterRadio ) connect( anIterRadio.value(), SIGNAL( clicked() ), this, SLOT( RadioButtonPressed() ) ); // selection connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_CHAMFER" ) ); ConstructorsClicked( 0 ); } //================================================================================= // function : ConstructorsClicked() // purpose : Radio button management //================================================================================= void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId ) { // Activate next widget if ( myGeomGUI->getApp()->desktop()->activeWindow()->getViewManager()->getType() != OCCViewer_Viewer::Type() ) { mainFrame()->RadioButton1->setChecked( true ); return; } if ( myConstructorId == constructorId ) return; // Get values from previous widget double D1 = 5, D2 = 5, D = 5, Angle = 5; if ( myConstructorId == 0 ) D1 = D2 = mySpinBox[ SpinBox1 ]->value(); else if ( myConstructorId == 1 ) { D1 = mySpinBox[ SpinBox21 ]->value(); D2 = mySpinBox[ SpinBox22 ]->value(); D = mySpinBox[ SpinBox23 ]->value(); Angle = mySpinBox[ SpinBox24 ]->value(); } else if ( myConstructorId == 2 ) { D1 = mySpinBox[ SpinBox31 ]->value(); D2 = mySpinBox[ SpinBox32 ]->value(); D = mySpinBox[ SpinBox33 ]->value(); Angle = mySpinBox[ SpinBox34 ]->value(); } else if ( myConstructorId == 3 ) { D1 = mySpinBox[ SpinBox41 ]->value(); D2 = mySpinBox[ SpinBox42 ]->value(); D = mySpinBox[ SpinBox43 ]->value(); Angle = mySpinBox[ SpinBox44 ]->value(); } myConstructorId = constructorId; switch ( constructorId ) { case 0: myGrp2->hide(); myGrp3->hide(); myGrp4->hide(); myGrp1->show(); mySpinBox[ SpinBox1 ]->setValue( D1 ); break; case 1: myGrp1->hide(); myGrp3->hide(); myGrp4->hide(); myGrp2->show(); mySpinBox[ SpinBox21 ]->setValue( D1 ); mySpinBox[ SpinBox22 ]->setValue( D2 ); mySpinBox[ SpinBox23 ]->setValue( D ); mySpinBox[ SpinBox24 ]->setValue( Angle ); break; case 2: myGrp1->hide(); myGrp2->hide(); myGrp4->hide(); myGrp3->show(); mySpinBox[ SpinBox31 ]->setValue( D1 ); mySpinBox[ SpinBox32 ]->setValue( D2 ); mySpinBox[ SpinBox32 ]->setValue( D2 ); mySpinBox[ SpinBox33 ]->setValue( D ); mySpinBox[ SpinBox34 ]->setValue( Angle ); break; case 3: myGrp1->hide(); myGrp2->hide(); myGrp3->hide(); myGrp4->show(); mySpinBox[ SpinBox41 ]->setValue( D1 ); mySpinBox[ SpinBox42 ]->setValue( D2 ); mySpinBox[ SpinBox43 ]->setValue( D ); mySpinBox[ SpinBox44 ]->setValue( Angle ); break; default: break; } if ( constructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ]; else if ( constructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ]; else if ( constructorId == 2 ) myEditCurrentArgument = mySelName[ MainObj3 ]; else myEditCurrentArgument = mySelName[ MainObj4 ]; activateSelection(); enableWidgets(); if ( !myShape->_is_nil() ) { myEditCurrentArgument->setText( GEOMBase::GetName( myShape ) ); GEOMBase_Skeleton::LineEditReturnPressed(); } else myEditCurrentArgument->setText( "" ); qApp->processEvents(); updateGeometry(); resize( minimumSize() ); displayPreview(); } //================================================================================= // function : ClickOnOk() // purpose : //================================================================================= void OperationGUI_ChamferDlg::ClickOnOk() { if ( ClickOnApply() ) ClickOnCancel(); } //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= bool OperationGUI_ChamferDlg::ClickOnApply() { if ( !onAccept() ) return false; initName(); return true; } //================================================================================= // function : SelectionIntoArgument() // purpose : Called when selection has changed //================================================================================= void OperationGUI_ChamferDlg::SelectionIntoArgument() { erasePreview(); myEditCurrentArgument->setText( "" ); // Get index of current selection focus int aCurrFocus = -1; QMap< int, QLineEdit* >::iterator anIter; for ( anIter = mySelName.begin(); anIter != mySelName.end(); ++anIter ) { if ( myEditCurrentArgument == anIter.value() ) { aCurrFocus = anIter.key(); break; } } // If selection of main object is activated if ( aCurrFocus == MainObj1 || aCurrFocus == MainObj2 || aCurrFocus == MainObj3 || aCurrFocus == MainObj4) { if ( IObjectCount() == 1 ) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); if ( aResult && !anObj->_is_nil() ) { myShape = anObj; mySelName[ aCurrFocus ]->setText( GEOMBase::GetName( anObj ) ); displayPreview(); enableWidgets(); return; } } myShape = GEOM::GEOM_Object::_nil(); enableWidgets(); } // If face selection of second tab is activated else if ( aCurrFocus == Face1 || aCurrFocus == Face2 ) { if ( IObjectCount() == 1 ) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); if ( aResult && !anObj->_is_nil() ) { TColStd_IndexedMapOfInteger anIndexes; ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr()->GetIndexes( firstIObject(), anIndexes ); if ( anIndexes.Extent() == 1 ) { int anIndex = anIndexes( 1 ); QString aFaceName = QString( GEOMBase::GetName( anObj ) ) + ":%1"; myEditCurrentArgument->setText( aFaceName.arg( anIndex ) ); myFace[ aCurrFocus ] = anIndex; displayPreview(); return; } } } myFace[ aCurrFocus ] = -1; } // If face selection of third or fourth tab is activated else if ( aCurrFocus == Faces || aCurrFocus == Edges ) { if ( IObjectCount() == 1 ) { Standard_Boolean aResult = Standard_False; GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult ); if ( aResult && !anObj->_is_nil() ) { TColStd_IndexedMapOfInteger anIndexes; ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr()->GetIndexes( firstIObject(), anIndexes ); if ( anIndexes.Extent() > 0 ) { QString aName; if ( anIndexes.Extent() == 1 ) { int anIndex = anIndexes( 1 ); aName = QString( GEOMBase::GetName( anObj ) ) + QString( ":%1" ).arg( anIndex ); } else { aName = tr( "GEOM_MEN_POPUP_NAME" ).arg( anIndexes.Extent() ); } myEditCurrentArgument->setText( aName ); int aConstructorId = getConstructorId(); if ( aConstructorId == 2) myFaces = anIndexes; else if ( aConstructorId == 3 ) myEdges = anIndexes; displayPreview(); return; } } } myFaces.Clear(); myEdges.Clear(); } } //================================================================================= // function : LineEditReturnPressed() // purpose : //================================================================================= void OperationGUI_ChamferDlg::LineEditReturnPressed() { QLineEdit* aSender = ( QLineEdit* )sender(); QMap< int, QLineEdit* >::iterator anIterLE; for ( anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE ) if ( anIterLE.value() == aSender ) myEditCurrentArgument = anIterLE.value(); GEOMBase_Skeleton::LineEditReturnPressed(); } //================================================================================= // function : RadioButtonPressed() // purpose : //================================================================================= void OperationGUI_ChamferDlg::RadioButtonPressed() { const QObject* s = sender(); bool flag = s == myRadioButton[ RadioButton21 ] || s == myRadioButton[ RadioButton31 ] || s == myRadioButton[ RadioButton41 ]; myRadioButton[ RadioButton21 ]->blockSignals( true ); myRadioButton[ RadioButton22 ]->blockSignals( true ); myRadioButton[ RadioButton31 ]->blockSignals( true ); myRadioButton[ RadioButton32 ]->blockSignals( true ); myRadioButton[ RadioButton41 ]->blockSignals( true ); myRadioButton[ RadioButton42 ]->blockSignals( true ); myRadioButton[ RadioButton21 ]->setChecked( flag ); myRadioButton[ RadioButton31 ]->setChecked( flag ); myRadioButton[ RadioButton41 ]->setChecked( flag ); myRadioButton[ RadioButton22 ]->setChecked( !flag ); myRadioButton[ RadioButton32 ]->setChecked( !flag ); myRadioButton[ RadioButton42 ]->setChecked( !flag ); mySpinBox[ SpinBox21 ]->setEnabled( flag ); mySpinBox[ SpinBox22 ]->setEnabled( flag ); mySpinBox[ SpinBox31 ]->setEnabled( flag ); mySpinBox[ SpinBox32 ]->setEnabled( flag ); mySpinBox[ SpinBox41 ]->setEnabled( flag ); mySpinBox[ SpinBox42 ]->setEnabled( flag ); mySpinBox[ SpinBox23 ]->setEnabled( !flag ); mySpinBox[ SpinBox24 ]->setEnabled( !flag ); mySpinBox[ SpinBox33 ]->setEnabled( !flag ); mySpinBox[ SpinBox34 ]->setEnabled( !flag ); mySpinBox[ SpinBox43 ]->setEnabled( !flag ); mySpinBox[ SpinBox44 ]->setEnabled( !flag ); myRadioButton[ RadioButton21 ]->blockSignals( false ); myRadioButton[ RadioButton22 ]->blockSignals( false ); myRadioButton[ RadioButton31 ]->blockSignals( false ); myRadioButton[ RadioButton32 ]->blockSignals( false ); myRadioButton[ RadioButton41 ]->blockSignals( false ); myRadioButton[ RadioButton42 ]->blockSignals( false ); displayPreview(); } //================================================================================= // function : SetEditCurrentArgument() // purpose : //================================================================================= void OperationGUI_ChamferDlg::SetEditCurrentArgument() { QPushButton* aSender = ( QPushButton* )sender(); QMap< int, QPushButton* >::iterator anIter; for ( anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter ) { if ( anIter.value() == aSender ) { mySelName[ anIter.key() ]->setFocus(); myEditCurrentArgument = mySelName[ anIter.key() ]; } } activateSelection(); } //================================================================================= // function : ActivateThisDialog() // purpose : //================================================================================= void OperationGUI_ChamferDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); activateSelection(); displayPreview(); } //================================================================================= // function : enterEvent() // purpose : //================================================================================= void OperationGUI_ChamferDlg::enterEvent( QEvent* ) { if ( !mainFrame()->GroupConstructors->isEnabled() ) this->ActivateThisDialog(); } //================================================================================= // function : ValueChangedInSpinBox() // purpose : //================================================================================= void OperationGUI_ChamferDlg::ValueChangedInSpinBox( double ) { displayPreview(); } //================================================================================= // function : createSelWg() // purpose : //================================================================================= void OperationGUI_ChamferDlg::createSelWg( const QString& theLbl, QPixmap& thePix, QWidget* theParent, QGridLayout* theLayout, const int theId ) { QLabel* lab = new QLabel( theLbl, theParent ); mySelBtn[ theId ] = new QPushButton( theParent ); mySelBtn[ theId ]->setIcon( thePix ); mySelName[ theId ] = new QLineEdit( theParent ); mySelName[ theId ]->setReadOnly( true ); int row = theLayout->rowCount(); theLayout->addWidget( lab, row, 0 ); theLayout->addWidget( mySelBtn[ theId ], row, 1 ); theLayout->addWidget( mySelName[ theId ], row, 2, 1, 4 ); // take into account createRadioWg() } //================================================================================= // function : createRadioWg() // purpose : //================================================================================= void OperationGUI_ChamferDlg::createRadioWg( const QString& theLbl1, const QString& theLbl2, QWidget* theParent, QGridLayout* theLayout, const int theRbId, const int theSpin1Id, const int theSpin2Id ) { myRadioButton[ theRbId ] = new QRadioButton( theParent ); QLabel* lab1 = new QLabel( theLbl1, theParent ); QLabel* lab2 = new QLabel( theLbl2, theParent ); mySpinBox[ theSpin1Id ] = new QDoubleSpinBox( theParent ); mySpinBox[ theSpin2Id ] = new QDoubleSpinBox( theParent ); int row = theLayout->rowCount(); theLayout->addWidget( myRadioButton[ theRbId ], row, 0 ); theLayout->addWidget( lab1, row, 2 ); theLayout->addWidget( mySpinBox[ theSpin1Id ], row, 3 ); theLayout->addWidget( lab2, row, 4 ); theLayout->addWidget( mySpinBox[ theSpin2Id ], row, 5 ); } //================================================================================= // function : reset() // purpose : //================================================================================= void OperationGUI_ChamferDlg::reset() { // Set Initial values of spinboxes QMap< int, QDoubleSpinBox* >::iterator anIter; for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter ) anIter.value()->setValue( 5 ); // clear line edits QMap< int, QLineEdit* >::iterator anIterLE; for ( anIterLE = mySelName.begin(); anIterLE != mySelName.end(); ++anIterLE ) anIterLE.value()->setText( "" ); // constructor id int aConstructorId = getConstructorId(); if ( aConstructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ]; else if ( aConstructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ]; else if ( aConstructorId == 2 ) myEditCurrentArgument = mySelName[ MainObj3 ]; else myEditCurrentArgument = mySelName[ MainObj4 ]; myShape = GEOM::GEOM_Object::_nil(); myFaces.Clear(); myEdges.Clear(); myFace[ Face1 ] = -1; myFace[ Face2 ] = -1; erasePreview( true ); activateSelection(); enableWidgets(); } //================================================================================= // function : activateSelection // purpose : Activate selection in accordance with myEditCurrentArgument //================================================================================= void OperationGUI_ChamferDlg::activateSelection() { if ( !myShape->_is_nil() && ( myEditCurrentArgument == mySelName[ Face1 ] || myEditCurrentArgument == mySelName[ Face2 ] || myEditCurrentArgument == mySelName[ Faces ] ) ) { localSelection( myShape, TopAbs_FACE ); } else if ( !myShape->_is_nil() && myEditCurrentArgument == mySelName[ Edges ] ) { localSelection( myShape, TopAbs_EDGE ); } else { TColStd_MapOfInteger aMap; aMap.Add( GEOM_SHELL ); aMap.Add( GEOM_SOLID ); aMap.Add( GEOM_COMPOUND ); globalSelection( aMap ); } SelectionIntoArgument(); } //================================================================================= // function : enableWidgets // purpose : Enable widgets of faces in accordance with value of main object //================================================================================= void OperationGUI_ChamferDlg::enableWidgets() { int anId = getConstructorId(); bool toEnable = !myShape->_is_nil(); if ( anId == 1 ) { mySelName[ Face1 ]->setEnabled( toEnable ); mySelName[ Face2 ]->setEnabled( toEnable ); mySelBtn[ Face1 ]->setEnabled( toEnable ); mySelBtn[ Face2 ]->setEnabled( toEnable ); if ( !toEnable ) { mySelName[ Face1 ]->setText( "" ); mySelName[ Face2 ]->setText( "" ); myFace[ Face1 ] = -1; myFace[ Face2 ] = -1; } } else if ( anId == 2 ) { mySelName[ Faces ]->setEnabled( toEnable ); if ( !toEnable ) { mySelName[ Faces ]->setText( "" ); myFaces = -1; } } else if ( anId == 3 ) { mySelName[ Edges ]->setEnabled( toEnable ); if ( !toEnable ) { mySelName[ Edges ]->setText( "" ); myEdges = -1; } } } //================================================================================= // function : createOperation // purpose : //================================================================================= GEOM::GEOM_IOperations_ptr OperationGUI_ChamferDlg::createOperation() { return getGeomEngine()->GetILocalOperations( getStudyId() ); } //================================================================================= // function : ClickOnApply() // purpose : Verify validity of input data //================================================================================= bool OperationGUI_ChamferDlg::isValid( QString& ) { switch ( getConstructorId() ) { case 0: return !myShape->_is_nil(); case 1: return !myShape->_is_nil() && myFace[ Face1 ] > 0 && myFace[ Face2 ] > 0; case 2: return !myShape->_is_nil() && myFaces.Extent() > 0; case 3: return !myShape->_is_nil() && myEdges.Extent() > 0; default: return false; } } //================================================================================= // function : execute // purpose : //================================================================================= bool OperationGUI_ChamferDlg::execute( ObjectList& objects ) { GEOM::GEOM_Object_var anObj; bool flag = ( myRadioButton[ RadioButton21 ]->isChecked() && myRadioButton[ RadioButton31 ]->isChecked() && myRadioButton[ RadioButton41 ]->isChecked() ); int anId = getConstructorId(); if ( anId == 0 ) { anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )->MakeChamferAll( myShape, mySpinBox[ SpinBox1 ]->value() ); } else if ( anId == 1 ) { if ( flag ) { anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )-> MakeChamferEdge( myShape, mySpinBox[ SpinBox21 ]->value(), mySpinBox[ SpinBox22 ]->value(), myFace[ Face1 ], myFace[ Face2 ] ); } else { anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )-> MakeChamferEdgeAD( myShape, mySpinBox[ SpinBox23 ]->value(), mySpinBox[ SpinBox24 ]->value() * PI180, myFace[ Face1 ], myFace[ Face2 ]); } } else if ( anId == 2 ) { GEOM::ListOfLong_var anArray = new GEOM::ListOfLong; anArray->length( myFaces.Extent() ); for ( int i = 1, n = myFaces.Extent(); i <= n; i++ ) anArray[ i - 1 ] = myFaces( i ); if ( flag ) anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )->MakeChamferFaces( myShape, mySpinBox[ SpinBox31 ]->value(), mySpinBox[ SpinBox32 ]->value(), anArray ); else anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )->MakeChamferFacesAD( myShape, mySpinBox[ SpinBox33 ]->value(), mySpinBox[ SpinBox34 ]->value() * PI180, anArray ); } else if ( anId == 3 ) { GEOM::ListOfLong_var anArray = new GEOM::ListOfLong; anArray->length( myEdges.Extent() ); for ( int i = 1, n = myEdges.Extent(); i <= n; i++ ) anArray[ i - 1 ] = myEdges( i ); if ( flag ) { anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )-> MakeChamferEdges( myShape, mySpinBox[ SpinBox41 ]->value(), mySpinBox[ SpinBox42 ]->value(), anArray ); } else { anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )-> MakeChamferEdgesAD( myShape, mySpinBox[ SpinBox43 ]->value(), mySpinBox[ SpinBox44 ]->value() * PI180, anArray ); } } if ( !anObj->_is_nil() ) objects.push_back( anObj._retn() ); return true; }