From 12efffce9b0ebe93526a85431536159aa8da4419 Mon Sep 17 00:00:00 2001 From: jfa Date: Fri, 6 Jul 2012 08:44:12 +0000 Subject: [PATCH] Mantis issue 0021541: EDF 2213 GEOM: Filling accuracy --- src/GEOMImpl/GEOMImpl_FillingDriver.cxx | 69 +++--- src/GEOM_SWIG/geompyDC.py | 41 +++- .../GenerationGUI_FillingDlg.cxx | 219 ++++++++++-------- 3 files changed, 193 insertions(+), 136 deletions(-) diff --git a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx index 1126965ac..0b47281ec 100644 --- a/src/GEOMImpl/GEOMImpl_FillingDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_FillingDriver.cxx @@ -18,7 +18,6 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// #include @@ -98,27 +97,23 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); if (aFunction.IsNull()) return 0; - if (aFunction->GetType() != BASIC_FILLING) return 0; GEOMImpl_IFilling IF (aFunction); Handle(GEOM_Function) aShapeFunction = IF.GetShape(); if (aShapeFunction.IsNull()) return 0; - TopoDS_Shape aShape; - BRepBuilderAPI_Copy Copy(aShapeFunction->GetValue()); - if( Copy.IsDone() ) + TopoDS_Shape aShape; + BRepBuilderAPI_Copy Copy (aShapeFunction->GetValue()); + if (Copy.IsDone()) aShape = Copy.Shape(); if (aShape.IsNull() || aShape.ShapeType() != TopAbs_COMPOUND) return 0; Standard_Integer mindeg = IF.GetMinDeg(); Standard_Integer maxdeg = IF.GetMaxDeg(); - Standard_Real tol3d = IF.GetTol2D(); - Standard_Real tol2d = IF.GetTol3D(); - Standard_Integer nbiter = IF.GetNbIter(); + Standard_Real tol3d = IF.GetTol3D(); Standard_Boolean isApprox = IF.GetApprox(); - Standard_Integer aMethod = IF.GetMethod(); if (mindeg > maxdeg) { Standard_RangeError::Raise("Minimal degree can not be more than maximal degree"); @@ -134,6 +129,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const BRep_Builder B; B.MakeCompound(aComp); + // 1. Convert argument wires, if any, into BSpline edges TopoDS_Iterator It (aShape); for (; It.More(); It.Next()) { Scurrent = It.Value(); @@ -198,7 +194,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const Pnts.SetValue(i,PntSeq.Value(i)); } } - GeomAPI_PointsToBSpline PTB(Pnts); + GeomAPI_PointsToBSpline PTB (Pnts); newC = Handle(Geom_BSplineCurve)::DownCast(PTB.Curve()); // set periodic flag if curve is closed //if( newC->IsClosed() ) { @@ -220,7 +216,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const Scurrent = newE; } } - if(newC.IsNull()) { + if (newC.IsNull()) { Standard_ConstructionError::Raise("The argument compound must contain only edges"); } } @@ -228,8 +224,14 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const } aShape = aComp; + // 2. The surface construction if (!isApprox) { // make filling as in old version of SALOME (before 4.1.1) + + Standard_Real tol2d = IF.GetTol2D(); + Standard_Integer nbiter = IF.GetNbIter(); + Standard_Integer aMethod = IF.GetMethod(); + GeomFill_SectionGenerator Section; Standard_Integer i = 0; Handle(Geom_Curve) aLastC; @@ -249,18 +251,18 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const C->D0(First,P1); C->D0(Last,P2); - if( aMethod==1 && Scurrent.Orientation() == TopAbs_REVERSED ) { + if (aMethod == 1 && Scurrent.Orientation() == TopAbs_REVERSED) { C->Reverse(); } - else if( aMethod==2 ) { - if( i==0 ) { + else if (aMethod == 2) { + if (i == 0) { PL1 = P1; PL2 = P2; } else { double d1 = PL1.Distance(P1) + PL2.Distance(P2); double d2 = PL1.Distance(P2) + PL2.Distance(P1); - if(d2Reverse(); PL1 = P2; PL2 = P1; @@ -301,8 +303,10 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const // implemented by skl 20.03.2008 for bug 16568 // make approximation - try to create bspline surface // using GeomAPI_PointsToBSplineSurface + TColGeom_SequenceOfCurve aSeq; int MaxNbPoles = 0; + // add curves from edges to sequence and find maximal // number of poles if some of them are bsplines for (Ex.Init(aShape, TopAbs_EDGE); Ex.More(); Ex.Next()) { @@ -311,21 +315,21 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const if (BRep_Tool::Degenerated(TopoDS::Edge(Scurrent))) continue; C = BRep_Tool::Curve(TopoDS::Edge(Scurrent), First, Last); Handle(Geom_TrimmedCurve) TC = Handle(Geom_TrimmedCurve)::DownCast(C); - if(TC.IsNull()) { + if (TC.IsNull()) { Handle(Geom_BSplineCurve) BC = Handle(Geom_BSplineCurve)::DownCast(C); - if(!BC.IsNull()) { + if (!BC.IsNull()) { MaxNbPoles = Max(MaxNbPoles,BC->NbPoles()); } } else { Handle(Geom_BSplineCurve) BC = Handle(Geom_BSplineCurve)::DownCast(TC->BasisCurve()); - if(BC.IsNull()) { + if (BC.IsNull()) { Handle(Geom_TrimmedCurve) TC1 = Handle(Geom_TrimmedCurve)::DownCast(TC->BasisCurve()); - if(!TC1.IsNull()) { + if (!TC1.IsNull()) { BC = Handle(Geom_BSplineCurve)::DownCast(TC1->BasisCurve()); } } - if(!BC.IsNull()) { + if (!BC.IsNull()) { MaxNbPoles = Max(MaxNbPoles,BC->NbPoles()); } } @@ -336,23 +340,26 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const // by V parameter - determ using MaxNbPoles but it's // value must be between 21(min) and 101(max) int nbc = aSeq.Length(); - int nbp = Max(21,2*MaxNbPoles-1); - if(nbp>101) nbp = 101; - TColgp_Array2OfPnt Points(1,nbc,1,nbp); + int nbp = Max(21, 2*MaxNbPoles-1); + + // commented for Mantis issue 0021541 + //if (nbp > 101) nbp = 101; + + TColgp_Array2OfPnt Points (1, nbc, 1, nbp); int ic = 1; - for(; ic<=nbc; ic++) { + for (; ic <= nbc; ic++) { Handle(Geom_Curve) C = aSeq.Value(ic); double fp = C->FirstParameter(); double lp = C->LastParameter(); double dp = (lp-fp)/(nbp-1); int j = 0; gp_Pnt P; - for(; jD0(fp+dp*j,P); - Points.SetValue(ic,j+1,P); - } + for (; j < nbp; j++) { + C->D0(fp+dp*j, P); + Points.SetValue(ic, j+1, P); + } } - GeomAPI_PointsToBSplineSurface PTB(Points,mindeg,maxdeg,GeomAbs_C2,tol3d); + GeomAPI_PointsToBSplineSurface PTB (Points, mindeg, maxdeg, GeomAbs_C2, tol3d); Handle(Geom_BSplineSurface) BS = PTB.Surface(); #if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version BRepBuilderAPI_MakeFace BB (BS, Precision::Confusion()); @@ -360,7 +367,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const BRepBuilderAPI_MakeFace BB (BS); #endif TopoDS_Face NewF = BB.Face(); - Handle(ShapeFix_Face) sff = new ShapeFix_Face(NewF); + Handle(ShapeFix_Face) sff = new ShapeFix_Face (NewF); sff->Perform(); sff->FixOrientation(); aShape = sff->Face(); @@ -368,7 +375,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const /* We test the validity of resulting shape */ if (!BRepAlgo::IsValid((aShape))) { - Standard_ConstructionError::Raise("Algorithm have produced an invalid shape result"); + Standard_ConstructionError::Raise("Algorithm has produced an invalid shape result"); return 0; } diff --git a/src/GEOM_SWIG/geompyDC.py b/src/GEOM_SWIG/geompyDC.py index b072e7c73..25c167e55 100644 --- a/src/GEOM_SWIG/geompyDC.py +++ b/src/GEOM_SWIG/geompyDC.py @@ -2481,9 +2481,9 @@ class geompyDC(GEOM._objref_GEOM_Gen): # @param theMethod Kind of method to perform filling operation(see GEOM::filling_oper_method()) # @param isApprox if True, BSpline curves are generated in the process # of surface construction. By default it is False, that means - # the surface is created using Besier curves. The usage of + # the surface is created using given curves. The usage of # Approximation makes the algorithm work slower, but allows - # building the surface for rather complex cases + # building the surface for rather complex cases. # @return New GEOM.GEOM_Object, containing the created filling surface. # # @ref tui_creation_filling "Example" @@ -2502,7 +2502,7 @@ class geompyDC(GEOM._objref_GEOM_Gen): theMethod Kind of method to perform filling operation(see GEOM::filling_oper_method()) isApprox if True, BSpline curves are generated in the process of surface construction. By default it is False, that means - the surface is created using Besier curves. The usage of + the surface is created using given curves. The usage of Approximation makes the algorithm work slower, but allows building the surface for rather complex cases @@ -2521,6 +2521,41 @@ class geompyDC(GEOM._objref_GEOM_Gen): anObj.SetParameters(Parameters) return anObj + + ## Create a filling from the given compound of contours. + # This method corresponds to MakeFilling with isApprox=True + # @param theShape the compound of contours + # @param theMinDeg a minimal degree of BSpline surface to create + # @param theMaxDeg a maximal degree of BSpline surface to create + # @param theTol3D a 3d tolerance to be reached + # @return New GEOM.GEOM_Object, containing the created filling surface. + # + # @ref tui_creation_filling "Example" + def MakeFillingNew(self, theShape, theMinDeg, theMaxDeg, theTol3D): + """ + Create a filling from the given compound of contours. + This method corresponds to MakeFilling with isApprox=True + + Parameters: + theShape the compound of contours + theMinDeg a minimal degree of BSpline surface to create + theMaxDeg a maximal degree of BSpline surface to create + theTol3D a 3d tolerance to be reached + + Returns: + New GEOM.GEOM_Object, containing the created filling surface. + + Example of usage: + filling = geompy.MakeFillingNew(compound, 2, 5, 0.0001) + """ + # Example: see GEOM_TestAll.py + theMinDeg,theMaxDeg,theTol3D,Parameters = ParseParameters(theMinDeg, theMaxDeg, theTol3D) + anObj = self.PrimOp.MakeFilling(theShape, theMinDeg, theMaxDeg, + 0, theTol3D, 0, GEOM.FOM_Default, True) + RaiseIfFailed("MakeFillingNew", self.PrimOp) + anObj.SetParameters(Parameters) + return anObj + ## Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices. # @param theSeqSections - set of specified sections. # @param theModeSolid - mode defining building solid or shell diff --git a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx index a33b8d974..cee8cec19 100644 --- a/src/GenerationGUI/GenerationGUI_FillingDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_FillingDlg.cxx @@ -18,12 +18,11 @@ // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com -// // GEOM GEOMGUI : GUI for Geometry component // File : GenerationGUI_FillingDlg.cxx // Author : Lucien PIGNOLONI, Open CASCADE S.A.S. -// + #include "GenerationGUI_FillingDlg.h" #include @@ -45,42 +44,42 @@ // 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, - bool modal, Qt::WindowFlags fl ) - : GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl ) +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"))); - setWindowTitle( tr( "GEOM_FILLING_TITLE" ) ); + setWindowTitle(tr("GEOM_FILLING_TITLE")); /***************************************************************/ - mainFrame()->GroupConstructors->setTitle( tr ( "GEOM_FILLING" ) ); - mainFrame()->RadioButton1->setIcon( image0 ); - mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose ); + 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->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 ); + 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" ); + setHelpFileName("create_filling_page.html"); /* Initialisations */ Init(); @@ -103,24 +102,24 @@ void GenerationGUI_FillingDlg::Init() { /* init variables */ myEditCurrentArgument = GroupPoints->LineEdit1; - GroupPoints->LineEdit1->setReadOnly( true ); + GroupPoints->LineEdit1->setReadOnly(true); - globalSelection( GEOM_COMPOUND ); + globalSelection(GEOM_COMPOUND); int SpecificStep1 = 1; double SpecificStep2 = 0.0001; /* min, max, step and decimals for spin boxes & initial values */ - 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( 2 ); - GroupPoints->SpinBox2->setValue( 0.0001 ); - GroupPoints->SpinBox3->setValue( 0 ); - GroupPoints->SpinBox4->setValue( 5 ); - GroupPoints->SpinBox5->setValue( 0.0001 ); + 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(2); + GroupPoints->SpinBox2->setValue(0.0001); + GroupPoints->SpinBox3->setValue(0); + GroupPoints->SpinBox4->setValue(5); + GroupPoints->SpinBox5->setValue(0.0001); GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_DEFAULT")); GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_USEORI")); @@ -129,29 +128,29 @@ void GenerationGUI_FillingDlg::Init() showOnlyPreviewControl(); /* signals and slots connections */ - connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); - connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); + connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); + connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); - connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - connect( GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(MethodChanged())); + 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->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() ) ); + 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(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double))); - 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())); - initName( tr( "GEOM_FILLING" ) ); + initName(tr("GEOM_FILLING")); resize(100,100); } @@ -159,39 +158,36 @@ void GenerationGUI_FillingDlg::Init() // function : SetDoubleSpinBoxStep() // purpose : Double spin box management //================================================================================= -void GenerationGUI_FillingDlg::SetDoubleSpinBoxStep( double step ) +void GenerationGUI_FillingDlg::SetDoubleSpinBoxStep(double step) { GroupPoints->SpinBox2->setSingleStep(step); GroupPoints->SpinBox5->setSingleStep(step); } - //================================================================================= // function : ClickOnOk() // purpose : //================================================================================= void GenerationGUI_FillingDlg::ClickOnOk() { - setIsApplyAndClose( true ); - if ( ClickOnApply() ) + setIsApplyAndClose(true); + if (ClickOnApply()) ClickOnCancel(); } - //================================================================================= // function : ClickOnApply() // purpose : //================================================================================= bool GenerationGUI_FillingDlg::ClickOnApply() { - if ( !onAccept() ) + if (!onAccept()) return false; initName(); return true; } - //================================================================================= // function : SelectionIntoArgument() // purpose : Called when selection as changed or other case @@ -202,14 +198,14 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument() myEditCurrentArgument->setText(""); if (myEditCurrentArgument == GroupPoints->LineEdit1) { - myCompound = getSelected( TopAbs_COMPOUND ); - if ( myCompound ) { - if ( myCompound->GetMaxShapeType() < GEOM::WIRE || myCompound->GetMinShapeType() > GEOM::EDGE ) { - myCompound.nullify(); + myCompound = getSelected(TopAbs_COMPOUND); + if (myCompound) { + if (myCompound->GetMaxShapeType() < GEOM::WIRE || myCompound->GetMinShapeType() > GEOM::EDGE) { + myCompound.nullify(); } else { - QString aName = GEOMBase::GetName( myCompound.get() ); - myEditCurrentArgument->setText( aName ); + QString aName = GEOMBase::GetName(myCompound.get()); + myEditCurrentArgument->setText(aName); } } } @@ -224,17 +220,16 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument() void GenerationGUI_FillingDlg::SetEditCurrentArgument() { QPushButton* send = (QPushButton*)sender(); - globalSelection( GEOM_ALLSHAPES ); + globalSelection(GEOM_ALLSHAPES); - if ( send == GroupPoints->PushButton1 ) { + if (send == GroupPoints->PushButton1) { GroupPoints->LineEdit1->setFocus(); myEditCurrentArgument = GroupPoints->LineEdit1; - globalSelection( GEOM_COMPOUND ); + globalSelection(GEOM_COMPOUND); this->SelectionIntoArgument(); } } - //================================================================================= // function : ActivateThisDialog() // purpose : @@ -242,29 +237,27 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument() void GenerationGUI_FillingDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); - connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), - SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - globalSelection( GEOM_COMPOUND ); + connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(), + SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); + globalSelection(GEOM_COMPOUND); processPreview(); } - //================================================================================= // function : enterEvent() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::enterEvent( QEvent* ) +void GenerationGUI_FillingDlg::enterEvent(QEvent*) { - if ( !mainFrame()->GroupConstructors->isEnabled() ) + if (!mainFrame()->GroupConstructors->isEnabled()) ActivateThisDialog(); } - //================================================================================= // function : ValueChangedInSpinBox() // purpose : //================================================================================= -void GenerationGUI_FillingDlg::ValueChangedInSpinBox( double newValue ) +void GenerationGUI_FillingDlg::ValueChangedInSpinBox(double newValue) { processPreview(); } @@ -284,30 +277,52 @@ void GenerationGUI_FillingDlg::MethodChanged() //================================================================================= void GenerationGUI_FillingDlg::ApproxChanged() { + if (GroupPoints->CheckBox1->isChecked()) { + // tol2d + GroupPoints->TextLabel3->setEnabled(false); + GroupPoints->SpinBox2->setEnabled(false); + // nbIter + GroupPoints->TextLabel4->setEnabled(false); + GroupPoints->SpinBox3->setEnabled(false); + // method + GroupPoints->TextLabel7->setEnabled(false); + GroupPoints->ComboBox1->setEnabled(false); + } + else { + // tol2d + GroupPoints->TextLabel3->setEnabled(true); + GroupPoints->SpinBox2->setEnabled(true); + // nbIter + GroupPoints->TextLabel4->setEnabled(true); + GroupPoints->SpinBox3->setEnabled(true); + // method + GroupPoints->TextLabel7->setEnabled(true); + GroupPoints->ComboBox1->setEnabled(true); + } + processPreview(); } - //================================================================================= // function : createOperation // purpose : //================================================================================= GEOM::GEOM_IOperations_ptr GenerationGUI_FillingDlg::createOperation() { - return getGeomEngine()->GetI3DPrimOperations( getStudyId() ); + return getGeomEngine()->GetI3DPrimOperations(getStudyId()); } //================================================================================= // function : isValid // purpose : //================================================================================= -bool GenerationGUI_FillingDlg::isValid( QString& msg ) +bool GenerationGUI_FillingDlg::isValid(QString& msg) { - bool ok = GroupPoints->SpinBox1->isValid( msg, !IsPreview() ) && - GroupPoints->SpinBox2->isValid( msg, !IsPreview() ) && - GroupPoints->SpinBox3->isValid( msg, !IsPreview() ) && - GroupPoints->SpinBox4->isValid( msg, !IsPreview() ) && - GroupPoints->SpinBox5->isValid( msg, !IsPreview() ) && + bool ok = GroupPoints->SpinBox1->isValid(msg, !IsPreview()) && + GroupPoints->SpinBox2->isValid(msg, !IsPreview()) && + GroupPoints->SpinBox3->isValid(msg, !IsPreview()) && + GroupPoints->SpinBox4->isValid(msg, !IsPreview()) && + GroupPoints->SpinBox5->isValid(msg, !IsPreview()) && myCompound; return ok; } @@ -316,7 +331,7 @@ bool GenerationGUI_FillingDlg::isValid( QString& msg ) // function : execute // purpose : //================================================================================= -bool GenerationGUI_FillingDlg::execute( ObjectList& objects ) +bool GenerationGUI_FillingDlg::execute(ObjectList& objects) { GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); @@ -331,17 +346,17 @@ bool GenerationGUI_FillingDlg::execute( ObjectList& objects ) } GEOM::GEOM_Object_var anObj = - anOper->MakeFilling( myCompound.get(), - GroupPoints->SpinBox1->value(), - GroupPoints->SpinBox4->value(), - GroupPoints->SpinBox2->value(), - GroupPoints->SpinBox5->value(), - GroupPoints->SpinBox3->value(), - aMethod, - GroupPoints->CheckBox1->isChecked() ); - if ( !anObj->_is_nil() ) + anOper->MakeFilling(myCompound.get(), + GroupPoints->SpinBox1->value(), + GroupPoints->SpinBox4->value(), + GroupPoints->SpinBox2->value(), + GroupPoints->SpinBox5->value(), + GroupPoints->SpinBox3->value(), + aMethod, + GroupPoints->CheckBox1->isChecked()); + if (!anObj->_is_nil()) { - if ( !IsPreview() ) + if (!IsPreview()) { QStringList aParameters; aParameters << GroupPoints->SpinBox1->text(); @@ -351,7 +366,7 @@ bool GenerationGUI_FillingDlg::execute( ObjectList& objects ) aParameters << GroupPoints->SpinBox5->text(); anObj->SetParameters(aParameters.join(":").toLatin1().constData()); } - objects.push_back( anObj._retn() ); + objects.push_back(anObj._retn()); } return true; -- 2.39.2