X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGenerationGUI%2FGenerationGUI_FillingDlg.cxx;h=fc343b4b1624a3a5ad42137264ed13dd6948a2cd;hb=8b1511ff6327ae63c450b10e49714d3c83577eda;hp=968e4df57e8b74ec6d004d3dd9d49dc4d9ae7de8;hpb=c577ca78d7a6e286526662cf54df6de1f4f2f449;p=modules%2Fgeom.git diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx index 968e4df57..fc343b4b1 100644 --- a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx @@ -1,96 +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$ -using namespace std; +// GEOM GEOMGUI : GUI for Geometry component +// File : GenerationGUI_FillingDlg.cxx +// Author : Lucien PIGNOLONI, Open CASCADE S.A.S. +// #include "GenerationGUI_FillingDlg.h" -#include "QAD_Config.h" +#include +#include +#include + +#include +#include +#include +#include -#include -#include -#include -#include -#include -#include -#include -#include -#include +#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(QWidget* parent, const char* name, GenerationGUI* theGenerationGUI, SALOME_Selection* Sel, bool modal, WFlags fl) - :GEOMBase_Skeleton(parent, name, Sel, 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(QAD_Desktop::getResourceManager()->loadPixmap("GEOM",tr("ICON_DLG_FILLING"))); - QPixmap image1(QAD_Desktop::getResourceManager()->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); - - Layout1->addWidget(GroupPoints, 1, 0); + 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 ); + + QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); + layout->setMargin( 0 ); layout->setSpacing( 6 ); + layout->addWidget( GroupPoints ); /***************************************************************/ + setHelpFileName( "create_filling_page.html" ); + /* Initialisations */ - myGenerationGUI = theGenerationGUI; 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 : @@ -99,58 +103,74 @@ void GenerationGUI_FillingDlg::Init() { /* init variables */ myEditCurrentArgument = GroupPoints->LineEdit1; + GroupPoints->LineEdit1->setReadOnly( true ); myMinDeg = 2; myMaxDeg = 5; myTol3D = 0.0001; myTol2D = 0.0001; - myNbIter = 5; - myOkSectionShape = false; + myNbIter = 0; + myMethod = 0; + myIsApprox = false; + myOkCompound = false; - myCompoundFilter = new GEOM_ShapeTypeFilter(TopAbs_COMPOUND, myGeom); - mySelection->AddFilter(myCompoundFilter); + 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(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_1, SLOT(SetStep(double))); - connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_2, SLOT(SetStep(double))); - connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_3, SLOT(SetStep(double))); - connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_4, SLOT(SetStep(double))); - connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_5, SLOT(SetStep(double))); - - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ; - - /* displays Dialog */ - GroupPoints->show(); - this->show(); - - return; + 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); } @@ -160,9 +180,8 @@ void GenerationGUI_FillingDlg::Init() //================================================================================= void GenerationGUI_FillingDlg::ClickOnOk() { - this->ClickOnApply(); - ClickOnCancel(); - return; + if ( ClickOnApply() ) + ClickOnCancel(); } @@ -170,17 +189,13 @@ void GenerationGUI_FillingDlg::ClickOnOk() // function : ClickOnApply() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::ClickOnApply() +bool GenerationGUI_FillingDlg::ClickOnApply() { - QAD_Application::getDesktop()->putInfo(tr("")); - if (mySimulationTopoDs.IsNull()) - return; - myGeomBase->EraseSimulationShape(); - mySimulationTopoDs.Nullify(); + if ( !onAccept() ) + return false; - if(myOkSectionShape) - myGenerationGUI->MakeFillingAndDisplay(myGeomShape, myMinDeg, myMaxDeg, myTol3D, myTol2D, myNbIter); - return; + initName(); + return true; } @@ -190,38 +205,45 @@ void GenerationGUI_FillingDlg::ClickOnApply() //================================================================================= void GenerationGUI_FillingDlg::SelectionIntoArgument() { - myGeomBase->EraseSimulationShape(); - mySimulationTopoDs.Nullify(); + erasePreview(); myEditCurrentArgument->setText(""); - QString aString = ""; /* name of selection */ - - int nbSel = myGeomBase->GetNameOfSelectedIObjects(mySelection, aString); - if(nbSel != 1) { - if(myEditCurrentArgument == GroupPoints->LineEdit1) - myOkSectionShape = false; + + 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; - Handle(SALOME_InteractiveObject) IO = mySelection->firstIObject(); - if(!myGeomBase->GetTopoFromSelection(mySelection, mySectionShape)) + Standard_Boolean testResult = Standard_False; + GEOM::GEOM_Object_ptr aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult); + + if (!testResult) return; - - if(myEditCurrentArgument == GroupPoints->LineEdit1 && mySectionShape.ShapeType() == TopAbs_COMPOUND) { - myEditCurrentArgument->setText(aString); - myGeomShape = myGeomBase->ConvertIOinGEOMShape(IO, testResult); - if(!testResult) - return; - myOkSectionShape = true; + + 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 && + it.Value().ShapeType() != TopAbs_WIRE ) + return; + myCompound = aSelectedObject; + myOkCompound = true; + } } - if(myOkSectionShape) - this->MakeFillingSimulationAndDisplay(); - return; + myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject)); + displayPreview(); } - //================================================================================= // function : SetEditCurrentArgument() // purpose : @@ -229,16 +251,14 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument() void GenerationGUI_FillingDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - mySelection->ClearFilters(); + globalSelection( GEOM_ALLSHAPES ); - if(send == GroupPoints->PushButton1) { + if ( send == GroupPoints->PushButton1 ) { GroupPoints->LineEdit1->setFocus(); myEditCurrentArgument = GroupPoints->LineEdit1; - mySelection->AddFilter(myCompoundFilter); + globalSelection( GEOM_COMPOUND ); this->SelectionIntoArgument(); } - - return; } @@ -247,15 +267,12 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument() // purpose : //================================================================================= void GenerationGUI_FillingDlg::LineEditReturnPressed() -{ +{ QLineEdit* send = (QLineEdit*)sender(); - if(send == GroupPoints->LineEdit1) - myEditCurrentArgument = GroupPoints->LineEdit1; - else - return; - - GEOMBase_Skeleton::LineEditReturnPressed(); - return; + if ( send == GroupPoints->LineEdit1 ) { + myEditCurrentArgument = send; + GEOMBase_Skeleton::LineEditReturnPressed(); + } } @@ -266,11 +283,10 @@ void GenerationGUI_FillingDlg::LineEditReturnPressed() void GenerationGUI_FillingDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect(mySelection, SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); - mySelection->AddFilter(myCompoundFilter); - if(!mySimulationTopoDs.IsNull()) - myGeomBase->DisplaySimulationShape(mySimulationTopoDs); - return; + connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), + SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + globalSelection( GEOM_COMPOUND ); + displayPreview(); } @@ -278,12 +294,10 @@ void GenerationGUI_FillingDlg::ActivateThisDialog() // function : enterEvent() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::enterEvent(QEvent* e) +void GenerationGUI_FillingDlg::enterEvent( QEvent* ) { - if (GroupConstructors->isEnabled()) - return; - this->ActivateThisDialog(); - return; + if ( !mainFrame()->GroupConstructors->isEnabled() ) + ActivateThisDialog(); } @@ -291,82 +305,105 @@ 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; - if(myOkSectionShape) - this->MakeFillingSimulationAndDisplay(); - return; + displayPreview(); } +//================================================================================= +// function : MethodChanged +// purpose : +//================================================================================= +void GenerationGUI_FillingDlg::MethodChanged() +{ + myMethod = GroupPoints->ComboBox1->currentIndex(); + displayPreview(); +} //================================================================================= -// function : MakeFillingSimulationAndDisplay() +// function : ApproxChanged() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::MakeFillingSimulationAndDisplay() +void GenerationGUI_FillingDlg::ApproxChanged() { - myGeomBase->EraseSimulationShape(); - mySimulationTopoDs.Nullify(); - - try { - /* we verify the contents of the shape */ - TopExp_Explorer Ex; - TopoDS_Shape Scurrent; - Standard_Real First, Last; - Handle(Geom_Curve) C; - GeomFill_SectionGenerator Section; - - Standard_Integer i = 0; - for(Ex.Init(mySectionShape, TopAbs_EDGE); Ex.More(); Ex.Next()) { - Scurrent = Ex.Current(); - if( Scurrent.IsNull() || Scurrent.ShapeType() != TopAbs_EDGE) - return; - C = BRep_Tool::Curve(TopoDS::Edge(Scurrent), First, Last); - C = new Geom_TrimmedCurve(C, First, Last); - Section.AddCurve(C) ; - i++ ; - } - - /* a 'tolerance' is used to compare 2 knots : see GeomFill_Generator.cdl */ - /* We set 'tolerance' = tol3d */ - // Section.Perform( tol3d ) ; NRI */ - Section.Perform(Precision::Confusion()); - Handle(GeomFill_Line) Line = new GeomFill_Line(i); - - GeomFill_AppSurf App(myMinDeg, myMaxDeg, myTol3D, myTol2D, myNbIter) ; /* user parameters */ - App.Perform(Line, Section); - - if(!App.IsDone()) - return; - - Standard_Integer UDegree, VDegree, NbUPoles, NbVPoles, NbUKnots, NbVKnots; - App.SurfShape(UDegree, VDegree, NbUPoles, NbVPoles, NbUKnots, NbVKnots); - Handle(Geom_BSplineSurface) GBS = new Geom_BSplineSurface(App.SurfPoles(), App.SurfWeights(), App.SurfUKnots(), App.SurfVKnots(), App.SurfUMults(), App.SurfVMults(), App.UDegree(), App.VDegree()); - - if(GBS.IsNull()) - return; - mySimulationTopoDs = BRepBuilderAPI_MakeFace(GBS); - if(mySimulationTopoDs.IsNull()) - return; - else - myGeomBase->DisplaySimulationShape(mySimulationTopoDs); + myIsApprox = GroupPoints->CheckBox1->isChecked(); + displayPreview(); +} + + +//================================================================================= +// function : createOperation +// purpose : +//================================================================================= +GEOM::GEOM_IOperations_ptr GenerationGUI_FillingDlg::createOperation() +{ + return getGeomEngine()->GetI3DPrimOperations( getStudyId() ); +} + +//================================================================================= +// function : isValid +// purpose : +//================================================================================= +bool GenerationGUI_FillingDlg::isValid( QString& msg ) +{ + 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; +} + +//================================================================================= +// function : execute +// purpose : +//================================================================================= +bool GenerationGUI_FillingDlg::execute( ObjectList& objects ) +{ + 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; } - catch(Standard_Failure) { - MESSAGE("Exception catched in MakePrismSimulationAndDisplay" << endl); - return; + + 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; + + return true; }