X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGenerationGUI%2FGenerationGUI_FillingDlg.cxx;h=fc343b4b1624a3a5ad42137264ed13dd6948a2cd;hb=8b1511ff6327ae63c450b10e49714d3c83577eda;hp=8cda67418f0500ac28449cdf72f0343713720ca3;hpb=732211808796539fcf1de34e06038e7fb015ece9;p=modules%2Fgeom.git diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx index 8cda67418..fc343b4b1 100644 --- a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx @@ -1,105 +1,100 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // -// 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// Copyright (C) 2003-2007 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 : GenerationGUI_FillingDlg.cxx -// Author : Lucien PIGNOLONI -// Module : GEOM -// $Header$ +// GEOM GEOMGUI : GUI for Geometry component +// File : GenerationGUI_FillingDlg.cxx +// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. +// #include "GenerationGUI_FillingDlg.h" -#include "SUIT_Desktop.h" -#include "SUIT_Session.h" -#include "SalomeApp_Application.h" -#include "SalomeApp_SelectionMgr.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "GEOMImpl_Types.hxx" +#include +#include +#include -#include +#include +#include +#include +#include -#include "utilities.h" +#include +#include //================================================================================= // class : GenerationGUI_FillingDlg() -// purpose : Constructs a GenerationGUI_FillingDlg which is a child of 'parent', with the +// purpose : Constructs a GenerationGUI_FillingDlg 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. //================================================================================= -GenerationGUI_FillingDlg::GenerationGUI_FillingDlg(GeometryGUI* theGeometryGUI, QWidget* parent, const char* name, bool modal, WFlags fl) - :GEOMBase_Skeleton(parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu) +GenerationGUI_FillingDlg::GenerationGUI_FillingDlg( GeometryGUI* theGeometryGUI, QWidget* parent, + bool modal, Qt::WindowFlags fl ) + : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl ) { - QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_FILLING"))); - QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT"))); + QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_FILLING" ) ) ); + QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) ); - setCaption(tr("GEOM_FILLING_TITLE")); + setWindowTitle( tr( "GEOM_FILLING_TITLE" ) ); /***************************************************************/ - GroupConstructors->setTitle(tr("GEOM_FILLING")); - RadioButton1->setPixmap(image0); - RadioButton2->close(TRUE); - RadioButton3->close(TRUE); - - GroupPoints = new DlgRef_1Sel5Spin(this, "GroupPoints"); - GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS")); - GroupPoints->TextLabel1->setText(tr("GEOM_FILLING_COMPOUND")); - GroupPoints->TextLabel2->setText(tr("GEOM_FILLING_MIN_DEG")); - GroupPoints->TextLabel3->setText(tr("GEOM_FILLING_TOL_2D")); - GroupPoints->TextLabel4->setText(tr("GEOM_FILLING_NB_ITER")); - GroupPoints->TextLabel5->setText(tr("GEOM_FILLING_MAX_DEG")); - GroupPoints->TextLabel6->setText(tr("GEOM_FILLING_TOL_3D")); - GroupPoints->PushButton1->setPixmap(image1); + mainFrame()->GroupConstructors->setTitle( tr ( "GEOM_FILLING" ) ); + mainFrame()->RadioButton1->setIcon( image0 ); + mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton2->close(); + mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); + mainFrame()->RadioButton3->close(); + + GroupPoints = new DlgRef_1Sel5Spin1Check( centralWidget() ); + GroupPoints->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) ); + GroupPoints->TextLabel1->setText( tr( "GEOM_FILLING_COMPOUND" ) ); + GroupPoints->TextLabel2->setText( tr( "GEOM_FILLING_MIN_DEG" ) ); + GroupPoints->TextLabel3->setText( tr( "GEOM_FILLING_TOL_2D" ) ); + GroupPoints->TextLabel4->setText( tr( "GEOM_FILLING_NB_ITER" ) ); + GroupPoints->TextLabel5->setText( tr( "GEOM_FILLING_MAX_DEG" ) ); + GroupPoints->TextLabel6->setText( tr( "GEOM_FILLING_TOL_3D" ) ); + GroupPoints->CheckBox1->setText( tr( "GEOM_FILLING_APPROX" ) ); + GroupPoints->TextLabel7->setText( tr( "GEOM_FILLING_METHOD" ) ); + GroupPoints->PushButton1->setIcon( image1 ); GroupPoints->LineEdit1->setReadOnly( true ); - Layout1->addWidget(GroupPoints, 2, 0); + QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); + layout->setMargin( 0 ); layout->setSpacing( 6 ); + layout->addWidget( GroupPoints ); /***************************************************************/ + setHelpFileName( "create_filling_page.html" ); + /* Initialisations */ Init(); } - //================================================================================= // function : ~GenerationGUI_FillingDlg() // purpose : Destroys the object and frees any allocated resources //================================================================================= GenerationGUI_FillingDlg::~GenerationGUI_FillingDlg() { - // no need to delete child widgets, Qt does it all for us + // no need to delete child widgets, Qt does it all for us } - //================================================================================= // function : Init() // purpose : @@ -114,49 +109,68 @@ void GenerationGUI_FillingDlg::Init() myMaxDeg = 5; myTol3D = 0.0001; myTol2D = 0.0001; - myNbIter = 5; + myNbIter = 0; + myMethod = 0; + myIsApprox = false; myOkCompound = false; globalSelection( GEOM_COMPOUND ); - double SpecificStep1 = 1; + int SpecificStep1 = 1; double SpecificStep2 = 0.0001; /* min, max, step and decimals for spin boxes & initial values */ - GroupPoints->SpinBox_1->RangeStepAndValidator(2.0, 999.999, SpecificStep1, 3); - GroupPoints->SpinBox_2->RangeStepAndValidator(0.00001, 10000.0, SpecificStep2, 5); - GroupPoints->SpinBox_3->RangeStepAndValidator(1.0, 999.999, SpecificStep1, 3); - GroupPoints->SpinBox_4->RangeStepAndValidator(1.0, 999.999, SpecificStep1, 3); - GroupPoints->SpinBox_5->RangeStepAndValidator(0.00001, 10000.0, SpecificStep2, 5); - - GroupPoints->SpinBox_1->SetValue(myMinDeg); - GroupPoints->SpinBox_2->SetValue(myTol2D); - GroupPoints->SpinBox_3->SetValue(myNbIter); - GroupPoints->SpinBox_4->SetValue(myMaxDeg); - GroupPoints->SpinBox_5->SetValue(myTol3D); + initSpinBox( GroupPoints->SpinBox1, 2, MAX_NUMBER, SpecificStep1 ); + initSpinBox( GroupPoints->SpinBox2, 0.00001, 10000.0, SpecificStep2, "len_tol_precision" ); + initSpinBox( GroupPoints->SpinBox3, 0, MAX_NUMBER, SpecificStep1 ); + initSpinBox( GroupPoints->SpinBox4, 1, MAX_NUMBER, SpecificStep1 ); + initSpinBox( GroupPoints->SpinBox5, 0.00001, 10000.0, SpecificStep2, "len_tol_precision" ); + + GroupPoints->SpinBox1->setValue( myMinDeg ); + GroupPoints->SpinBox2->setValue( myTol2D ); + GroupPoints->SpinBox3->setValue( myNbIter ); + GroupPoints->SpinBox4->setValue( myMaxDeg ); + GroupPoints->SpinBox5->setValue( myTol3D ); + + GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_DEFAULT")); + GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_USEORI")); + GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_AUTO")); /* signals and slots connections */ - connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk())); - connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply())); - - connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); - - connect(GroupPoints->SpinBox_1, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(GroupPoints->SpinBox_2, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(GroupPoints->SpinBox_3, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(GroupPoints->SpinBox_4, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - connect(GroupPoints->SpinBox_5, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); - - connect(myGeometryGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_1, SLOT(SetStep(double))); - connect(myGeometryGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_2, SLOT(SetStep(double))); - connect(myGeometryGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_3, SLOT(SetStep(double))); - connect(myGeometryGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_4, SLOT(SetStep(double))); - connect(myGeometryGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_5, SLOT(SetStep(double))); - - connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), - SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ; - - initName(tr("GEOM_FILLING")); + connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); + connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + + connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); + + connect( GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(MethodChanged())); + + connect( GroupPoints->SpinBox1, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); + connect( GroupPoints->SpinBox2, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); + connect( GroupPoints->SpinBox3, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); + connect( GroupPoints->SpinBox4, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); + connect( GroupPoints->SpinBox5, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); + + connect( GroupPoints->CheckBox1, SIGNAL( stateChanged( int ) ), + this, SLOT( ApproxChanged() ) ); + + // san: Commented, as all spin boxes here either are integer or use specific non-default step value + //connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) ); + + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + + initName( tr( "GEOM_FILLING" ) ); + resize(100,100); +} + +//================================================================================= +// function : SetDoubleSpinBoxStep() +// purpose : Double spin box management +//================================================================================= +void GenerationGUI_FillingDlg::SetDoubleSpinBoxStep( double step ) +{ + GroupPoints->SpinBox2->setSingleStep(step); + GroupPoints->SpinBox5->setSingleStep(step); } @@ -193,41 +207,43 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument() { erasePreview(); myEditCurrentArgument->setText(""); - - if(IObjectCount() != 1) { - if(myEditCurrentArgument == GroupPoints->LineEdit1) + + LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); + SALOME_ListIO aSelList; + aSelMgr->selectedObjects(aSelList); + + if (aSelList.Extent() != 1) { + if (myEditCurrentArgument == GroupPoints->LineEdit1) myOkCompound = false; return; } - + // nbSel == 1 Standard_Boolean testResult = Standard_False; - GEOM::GEOM_Object_ptr aSelectedObject = GEOMBase::ConvertIOinGEOMObject(firstIObject(), testResult ); - + GEOM::GEOM_Object_ptr aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult); + if (!testResult) return; - - if(myEditCurrentArgument == GroupPoints->LineEdit1) { + + if (myEditCurrentArgument == GroupPoints->LineEdit1) { TopoDS_Shape S; myOkCompound = false; - - if ( GEOMBase::GetShape(aSelectedObject, S) && - S.ShapeType() == TopAbs_COMPOUND) - { - // myCompound should be a compound of edges - for ( TopoDS_Iterator it( S ); it.More(); it.Next() ) - if ( it.Value().ShapeType() != TopAbs_EDGE ) - return; - myCompound = aSelectedObject; - myOkCompound = true; - } + + if (GEOMBase::GetShape(aSelectedObject, S) && S.ShapeType() == TopAbs_COMPOUND) { + // myCompound should be a compound of edges + for (TopoDS_Iterator it (S); it.More(); it.Next()) + if ( it.Value().ShapeType() != TopAbs_EDGE && + it.Value().ShapeType() != TopAbs_WIRE ) + return; + myCompound = aSelectedObject; + myOkCompound = true; + } } - - myEditCurrentArgument->setText( GEOMBase::GetName( aSelectedObject ) ); + + myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject)); displayPreview(); } - //================================================================================= // function : SetEditCurrentArgument() // purpose : @@ -237,7 +253,7 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument() QPushButton* send = (QPushButton*)sender(); globalSelection( GEOM_ALLSHAPES ); - if(send == GroupPoints->PushButton1) { + if ( send == GroupPoints->PushButton1 ) { GroupPoints->LineEdit1->setFocus(); myEditCurrentArgument = GroupPoints->LineEdit1; globalSelection( GEOM_COMPOUND ); @@ -251,13 +267,12 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument() // purpose : //================================================================================= void GenerationGUI_FillingDlg::LineEditReturnPressed() -{ +{ QLineEdit* send = (QLineEdit*)sender(); - if(send == GroupPoints->LineEdit1) - { - myEditCurrentArgument = send; - GEOMBase_Skeleton::LineEditReturnPressed(); - } + if ( send == GroupPoints->LineEdit1 ) { + myEditCurrentArgument = send; + GEOMBase_Skeleton::LineEditReturnPressed(); + } } @@ -268,7 +283,8 @@ void GenerationGUI_FillingDlg::LineEditReturnPressed() void GenerationGUI_FillingDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); globalSelection( GEOM_COMPOUND ); displayPreview(); } @@ -278,9 +294,9 @@ void GenerationGUI_FillingDlg::ActivateThisDialog() // function : enterEvent() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::enterEvent(QEvent* e) +void GenerationGUI_FillingDlg::enterEvent( QEvent* ) { - if ( !GroupConstructors->isEnabled() ) + if ( !mainFrame()->GroupConstructors->isEnabled() ) ActivateThisDialog(); } @@ -289,24 +305,45 @@ void GenerationGUI_FillingDlg::enterEvent(QEvent* e) // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::ValueChangedInSpinBox(double newValue) +void GenerationGUI_FillingDlg::ValueChangedInSpinBox( double newValue ) { QObject* send = (QObject*)sender(); - if(send == GroupPoints->SpinBox_1) - myMinDeg = int(newValue); - else if(send == GroupPoints->SpinBox_2) + if ( send == GroupPoints->SpinBox1 ) + myMinDeg = int( newValue ); + else if ( send == GroupPoints->SpinBox2 ) myTol2D = newValue; - else if(send == GroupPoints->SpinBox_3) + else if ( send == GroupPoints->SpinBox3 ) myNbIter = int(newValue); - else if(send == GroupPoints->SpinBox_4) + else if ( send == GroupPoints->SpinBox4 ) myMaxDeg = int(newValue); - else if(send == GroupPoints->SpinBox_5) + else if ( send == GroupPoints->SpinBox5 ) myTol3D = newValue; displayPreview(); } +//================================================================================= +// function : MethodChanged +// purpose : +//================================================================================= +void GenerationGUI_FillingDlg::MethodChanged() +{ + myMethod = GroupPoints->ComboBox1->currentIndex(); + displayPreview(); +} + +//================================================================================= +// function : ApproxChanged() +// purpose : +//================================================================================= +void GenerationGUI_FillingDlg::ApproxChanged() +{ + myIsApprox = GroupPoints->CheckBox1->isChecked(); + displayPreview(); +} + + //================================================================================= // function : createOperation // purpose : @@ -320,9 +357,16 @@ GEOM::GEOM_IOperations_ptr GenerationGUI_FillingDlg::createOperation() // function : isValid // purpose : //================================================================================= -bool GenerationGUI_FillingDlg::isValid( QString& ) +bool GenerationGUI_FillingDlg::isValid( QString& msg ) { - return myOkCompound > 0; + bool ok = true; + ok = GroupPoints->SpinBox1->isValid( msg, !IsPreview() ) && ok; + ok = GroupPoints->SpinBox2->isValid( msg, !IsPreview() ) && ok; + ok = GroupPoints->SpinBox3->isValid( msg, !IsPreview() ) && ok; + ok = GroupPoints->SpinBox4->isValid( msg, !IsPreview() ) && ok; + ok = GroupPoints->SpinBox5->isValid( msg, !IsPreview() ) && ok; + + return myOkCompound > 0 && ok; } //================================================================================= @@ -331,14 +375,35 @@ bool GenerationGUI_FillingDlg::isValid( QString& ) //================================================================================= bool GenerationGUI_FillingDlg::execute( ObjectList& objects ) { - GEOM::GEOM_Object_var anObj; - - anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation() )->MakeFilling( - myCompound, myMinDeg, myMaxDeg, myTol2D, myTol3D, myNbIter ); + GEOM::GEOM_I3DPrimOperations_var anOper = + GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); + + GEOM::filling_oper_method aMethod; + switch (GroupPoints->ComboBox1->currentIndex()) + { + case 0: aMethod = GEOM::FOM_Default; break; + case 1: aMethod = GEOM::FOM_UseOri; break; + case 2: aMethod = GEOM::FOM_AutoCorrect; break; + default: break; + } + GEOM::GEOM_Object_var anObj = + anOper->MakeFilling( myCompound, myMinDeg, myMaxDeg, myTol2D, myTol3D, + myNbIter, aMethod, myIsApprox ); if ( !anObj->_is_nil() ) + { + if ( !IsPreview() ) + { + QStringList aParameters; + aParameters << GroupPoints->SpinBox1->text(); + aParameters << GroupPoints->SpinBox2->text(); + aParameters << GroupPoints->SpinBox3->text(); + aParameters << GroupPoints->SpinBox4->text(); + aParameters << GroupPoints->SpinBox5->text(); + anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + } objects.push_back( anObj._retn() ); + } return true; } -