Salome HOME
Mantis issue 0021541: EDF 2213 GEOM: Filling accuracy
authorjfa <jfa@opencascade.com>
Fri, 6 Jul 2012 08:44:12 +0000 (08:44 +0000)
committerjfa <jfa@opencascade.com>
Fri, 6 Jul 2012 08:44:12 +0000 (08:44 +0000)
src/GEOMImpl/GEOMImpl_FillingDriver.cxx
src/GEOM_SWIG/geompyDC.py
src/GenerationGUI/GenerationGUI_FillingDlg.cxx

index 1126965ac54c5d2664d1ee22cb5c211e51c23a0d..0b47281ec98922afbd1dfa675ac57c77d5a84048 100644 (file)
@@ -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 <Standard_Stream.hxx>
 
@@ -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(d2<d1) {
+          if (d2 < d1) {
             C->Reverse();
             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(; j<nbp; j++) {
-        C->D0(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;
   }
 
index b072e7c736c38da0dde5951a679288214fd6db0d..25c167e55a42efbfe64715df6192d632cf97e49b 100644 (file)
@@ -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
index a33b8d9744f969222bcb6e30234d77a8dea31f59..cee8cec19bb71a7a35a4a9f66079a41f65e7f92b 100644 (file)
 // 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 <DlgRef.h>
 //            The dialog will by default be modeless, unless you set 'modal' to
 //            TRUE to construct a modal dialog.
 //=================================================================================
-GenerationGUI_FillingDlg::GenerationGUI_FillingDlgGeometryGUI* 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;