From a4aaa470ae85e6bb5bfe9cdd7f9681f88ce41c96 Mon Sep 17 00:00:00 2001 From: skv Date: Wed, 26 Mar 2014 13:07:43 +0400 Subject: [PATCH] 0022475: EDF 2811 GEOM: Features for "Smoothing Surface" function --- .../gui/GEOM/images/smoothingsurface_dlg.png | Bin 16418 -> 25637 bytes .../GEOM/input/creating_smoothingsurface.doc | 11 +++- idl/GEOM_Gen.idl | 10 +++- .../GEOMImpl_IAdvancedOperations.cxx | 16 ++++- .../GEOMImpl_IAdvancedOperations.hxx | 5 +- .../GEOMImpl_ISmoothingSurface.hxx | 12 ++++ .../GEOMImpl_SmoothingSurfaceDriver.cxx | 56 ++++++++++++------ .../GEOMImpl_SmoothingSurfaceDriver.hxx | 6 +- .../GEOM_IAdvancedOperations_i.cc | 11 +++- .../GEOM_IAdvancedOperations_i.hh | 5 +- .../AdvancedGUI_SmoothingSurfaceDlg.cxx | 48 +++++++++++++-- .../AdvancedGUI_SmoothingSurfaceDlg.h | 4 ++ src/AdvancedGUI/AdvancedGUI_msg_en.ts | 18 +++++- src/GEOM_I_Superv/GEOM_Superv_i.cc | 2 +- src/GEOM_SWIG/geomBuilder.py | 33 ++++++++++- 15 files changed, 199 insertions(+), 38 deletions(-) mode change 100755 => 100644 src/GEOM_SWIG/geomBuilder.py diff --git a/doc/salome/gui/GEOM/images/smoothingsurface_dlg.png b/doc/salome/gui/GEOM/images/smoothingsurface_dlg.png index a92bbba8a02420194465a7fea3b7142b8171445d..4605175c2d7a3d25e62c52a98263bb4c395ee34b 100644 GIT binary patch literal 25637 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 z�bh>XN=i{u7hO_^Fcz`|hy%Urg@a@+GgLy#%EO972$GEtas(ylS|S)C+%`VWird z3C!_Lpm(h2@)i`f9xmoJKk6s*$f7Kv>hHfm-v7|_{lF|<|0!_CW!N082wa_G_;6Zp zHIMk_g#F(}`#ofHVwlX*m7?A`4aoAiDMZcXg-40OHl`SpPw7%U7`no%9lGSTC zs8ASHvHPm^@cfiphq1y~m4db-4(Dx-JBZXz65T<4LfPM(5!e<;e*Q69eP}6rRtj5@ z(yA~kuC#+5kx2NaSn$3exT2qo&rJkuAVu~NhmQO0%}_QtI{ znsO+U<~wj#Yz%s!NBC>i8Ma>~zKwRKTU0xsA3tw&&A%B56afOEsiv!1plliRH`q@` A&Hw-a literal 16418 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 eQ`~!YK0HID Smoothing Surface in the Main Menu select New Entity - > Advanced - > SmoothingSurface -Specify the \b Name of the surface and the list of \b Points, from which it is approximated and press "Apply" or "Apply & Close" button. +To create a surface it is necessary to specify the \b Name of the surface, the list of \b Points +from which it is approximated and some plate approximation parameters such as: Max nbr of +Bezier pieces, Max BSpline surface degree and Max plate criterion value. +And then press "Apply" or "Apply & Close" button. \note The dialog accepts compounds of points as well as single nodes. The result of the operation will be a GEOM_Object(Surface). -TUI Command: geompy.MakeSmoothingSurface(Points) +TUI Command: geompy.MakeSmoothingSurface(thelPoints, theNbMax, theDegMax, theDMax), where: +- \em thelPoints list of points. Compounds of points are accepted as well +- \em theNbMax maximum number of Bezier pieces in the resulting surface +- \em theDegMax maximum degree of the resulting BSpline surface +- \em theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion \image html smoothingsurface_dlg.png diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index dcb9de5a0..921e35995 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -4694,10 +4694,16 @@ module GEOM /*! * * Create a smoothing surface from a set of points - * \param thelPoints list of points + * \param thelPoints list of points. Compounds of points are accepted as well. + * \param theNbMax maximum number of Bezier pieces in the resulting surface. + * \param theDegMax maximum degree of the resulting BSpline surface + * \param theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion. * \return New GEOM_Object, containing the created shape. */ - GEOM_Object MakeSmoothingSurface (in ListOfGO thelPoints); + GEOM_Object MakeSmoothingSurface (in ListOfGO thelPoints, + in long theNbMax, + in long theDegMax, + in double theDMax); /*@@ insert new functions before this line @@ do not remove this line @@*/ }; diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx index 6e535e2ac..59c4d95f8 100644 --- a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx +++ b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.cxx @@ -3430,10 +3430,16 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedCylinder (double th /*! * Create a smoothing surface from a set of points * \param thelPoints list of points or compounds of points + * \param theNbMax maximum number of Bezier pieces in the resulting surface. + * \param theDegMax maximum degree of the resulting BSpline surface + * \param theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion. * \return New GEOM_Object, containing the created shape. */ //============================================================================= -Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::list thelPoints) +Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::list thelPoints, + int theNbMax, + int theDegMax, + double theDMax) { SetErrorCode(KO); @@ -3462,6 +3468,9 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::lis aData.SetPntOrComp(ind, aRefObj); } + aData.SetNbMax(theNbMax); + aData.SetDegMax(theDegMax); + aData.SetDMax(theDMax); //Compute the resulting value try { @@ -3487,7 +3496,10 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::lis while (it != thelPoints.end()) { pd << ", " << (*it++); } - pd << "])"; + pd << "], " + << theNbMax << ", " + << theDegMax << ", " + << theDMax <<")"; SetErrorCode(OK); diff --git a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx index 2f2367f3e..8f59a9590 100644 --- a/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx +++ b/src/AdvancedEngine/GEOMImpl_IAdvancedOperations.hxx @@ -236,7 +236,10 @@ public: double theH, int thePattern); - Standard_EXPORT Handle(GEOM_Object) MakeSmoothingSurface (std::list thelPoints); + Standard_EXPORT Handle(GEOM_Object) MakeSmoothingSurface (std::list thelPoints, + int theNbMax, + int theDegMax, + double theDMax); /*@@ insert new functions before this line @@ do not remove this line @@*/ }; #endif diff --git a/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx b/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx index 5cd77a502..ec3cf1a24 100644 --- a/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx +++ b/src/AdvancedEngine/GEOMImpl_ISmoothingSurface.hxx @@ -27,6 +27,9 @@ #define SMOOTHINGSURFACE_ARG_LENG 1 #define SMOOTHINGSURFACE_ARG_LAST 2 +#define SMOOTHINGSURFACE_ARG_NB_MAX 3 +#define SMOOTHINGSURFACE_ARG_DEG_MAX 4 +#define SMOOTHINGSURFACE_ARG_D_MAX 5 class GEOMImpl_ISmoothingSurface { @@ -39,6 +42,15 @@ public: void SetPntOrComp(int theId, Handle(GEOM_Function) theP) { _func->SetReference(SMOOTHINGSURFACE_ARG_LAST + theId, theP); } Handle(GEOM_Function) GetPntOrComp(int theId) { return _func->GetReference(SMOOTHINGSURFACE_ARG_LAST + theId); } + void SetNbMax(int theNbMax) { _func->SetInteger(SMOOTHINGSURFACE_ARG_NB_MAX, theNbMax); } + int GetNbMax() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_NB_MAX); } + + void SetDegMax(int theDegMax) { _func->SetInteger(SMOOTHINGSURFACE_ARG_DEG_MAX, theDegMax); } + int GetDegMax() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_DEG_MAX); } + + void SetDMax(double theDMax) { _func->SetReal(SMOOTHINGSURFACE_ARG_D_MAX, theDMax); } + double GetDMax() { return _func->GetReal(SMOOTHINGSURFACE_ARG_D_MAX); } + private: Handle(GEOM_Function) _func; }; diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx index 662df4623..ef1b732ae 100644 --- a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx +++ b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.cxx @@ -98,13 +98,17 @@ GEOMImpl_SmoothingSurfaceDriver::GEOMImpl_SmoothingSurfaceDriver() //function : MakeSmoothingSurfaceUnClosed //purpose : //======================================================================= -TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed(Handle_TColgp_HArray1OfPnt myListOfPoints) const +TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed + (const Handle_TColgp_HArray1OfPnt &theListOfPoints, + const Standard_Integer theNbMax, + const Standard_Integer theDegMax, + const Standard_Real theDMax) const { TopoDS_Face aInitShape; // Create an average Plane - //Handle(TColgp_HArray1OfPnt) HAP = new TColgp_HArray1OfPnt(1,myListOfPoints.Length()) - GeomPlate_BuildAveragePlane gpbap(myListOfPoints,myListOfPoints->Length(),Precision::Confusion(),1,1); + //Handle(TColgp_HArray1OfPnt) HAP = new TColgp_HArray1OfPnt(1,theListOfPoints.Length()) + GeomPlate_BuildAveragePlane gpbap(theListOfPoints,theListOfPoints->Length(),Precision::Confusion(),1,1); Handle(Geom_Plane) plane(gpbap.Plane()); Standard_Real Umin, Umax, Vmin, Vmax; gpbap.MinMaxBox(Umin,Umax,Vmin,Vmax); @@ -121,11 +125,11 @@ TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed(Handl Standard_Integer j, j1, j2; // cout << "Init surface" << endl; - j1 = myListOfPoints->Lower(); - j2 = myListOfPoints->Upper(); + j1 = theListOfPoints->Lower(); + j2 = theListOfPoints->Upper(); for (j=j1; j<=j2 ; j++) { - gp_Pnt aPnt = myListOfPoints->Value(j); + gp_Pnt aPnt = theListOfPoints->Value(j); Handle(GeomPlate_PointConstraint) PCont = new GeomPlate_PointConstraint(aPnt,0); aBuilder.Add(PCont); } @@ -136,10 +140,14 @@ TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed(Handl // A ce niveau : surface algo Handle(GeomPlate_Surface) gpPlate = aBuilder.Surface(); - Standard_Integer nbcarreau=2; - Standard_Integer degmax=8; - Standard_Real seuil; - seuil = Max(0.0001,10*aBuilder.G0Error()); + Standard_Integer nbcarreau = (theNbMax > 0 ? theNbMax : 2); + Standard_Integer degmax = (theDegMax > 0 ? theDegMax : 8); + Standard_Real seuil = theDMax; + + if (seuil <= 0.) { + seuil = Max(0.0001,10*aBuilder.G0Error()); + } + GeomPlate_MakeApprox Mapp(gpPlate,0.0001,nbcarreau,degmax,seuil); // cout << "Approx surface" << endl; @@ -204,9 +212,13 @@ Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log anArrayofPnt->SetValue(i, aPnt); } + const Standard_Integer aNbMax = aData.GetNbMax(); + const Standard_Integer aDegMax = aData.GetDegMax(); + const Standard_Real aDMax = aData.GetDMax(); + // Make smoothing surface. - TopoDS_Shape aShape = - GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed(anArrayofPnt); + TopoDS_Shape aShape = GEOMImpl_SmoothingSurfaceDriver:: + MakeSmoothingSurfaceUnClosed(anArrayofPnt, aNbMax, aDegMax, aDMax); if (aShape.IsNull()) return 0; @@ -237,11 +249,21 @@ GetCreationInformation(std::string& theOperationName, switch ( aType ) { case SMOOTHINGSURFACE_LPOINTS: - AddParam( theParams, "Points" ); - if ( aCI.GetLength() > 1 ) - theParams[0] << aCI.GetLength() << " points: "; - for ( int i = 1, nb = aCI.GetLength(); i <= nb; ++i ) - theParams[0] << aCI.GetPntOrComp( i ) << " "; + { + AddParam( theParams, "Points" ); + if ( aCI.GetLength() > 1 ) + theParams[0] << aCI.GetLength() << " points: "; + for ( int i = 1, nb = aCI.GetLength(); i <= nb; ++i ) + theParams[0] << aCI.GetPntOrComp( i ) << " "; + + const Standard_Integer aNbMax = aCI.GetNbMax(); + const Standard_Integer aDegMax = aCI.GetDegMax(); + const Standard_Real aDMax = aCI.GetDMax(); + + AddParam(theParams, "Max nbr of Bezier pieces", aCI.GetNbMax()); + AddParam(theParams, "Max BSpline surface degree", aCI.GetDegMax()); + AddParam(theParams, "Max plate criterion value", aCI.GetDMax()); + } break; default: return false; diff --git a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx index 6887f1f29..6a22f65dc 100644 --- a/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx +++ b/src/AdvancedEngine/GEOMImpl_SmoothingSurfaceDriver.hxx @@ -63,7 +63,11 @@ public: DEFINE_STANDARD_RTTI( GEOMImpl_SmoothingSurfaceDriver ) private: - TopoDS_Shape MakeSmoothingSurfaceUnClosed(Handle_TColgp_HArray1OfPnt myListOfPoints) const; + TopoDS_Shape MakeSmoothingSurfaceUnClosed + (const Handle_TColgp_HArray1OfPnt &theListOfPoints, + const Standard_Integer theNbMax, + const Standard_Integer theDegMax, + const Standard_Real theDMax) const; }; #endif // _GEOMImpl_SmoothingSurfaceDriver_HXX diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc index cd131f3ef..7ff12c39d 100644 --- a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc +++ b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.cc @@ -755,10 +755,16 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedCylinder (CORBA::Do /*! * * \param thelPoints list of points + * \param theNbMax maximum number of Bezier pieces in the resulting surface. + * \param theDegMax maximum degree of the resulting BSpline surface + * \param theDMax specifies maximum value of the GeomPlate_PlateG0Criterion criterion. * \return New GEOM_Object, containing the created shape. */ //============================================================================= -GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GEOM::ListOfGO& thelPoints) +GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GEOM::ListOfGO& thelPoints, + CORBA::Long theNbMax, + CORBA::Long theDegMax, + CORBA::Double theDMax) { GEOM::GEOM_Object_var aGEOMObject; @@ -775,7 +781,8 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GE aPoints.push_back(aPnt); } //Create the SmoothingSurface - Handle(GEOM_Object) anObject = GetOperations()->MakeSmoothingSurface(aPoints); + Handle(GEOM_Object) anObject = GetOperations()->MakeSmoothingSurface + (aPoints, theNbMax, theDegMax, theDMax); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); diff --git a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh index d7fa5d6a8..7f700132d 100644 --- a/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh +++ b/src/AdvancedEngine/GEOM_IAdvancedOperations_i.hh @@ -127,7 +127,10 @@ class ADVANCEDENGINE_EXPORT GEOM_IAdvancedOperations_i : GEOM::GEOM_Object_ptr MakeDividedCylinder (CORBA::Double theR, CORBA::Double theH, GEOM::pattern thePattern); - GEOM::GEOM_Object_ptr MakeSmoothingSurface (const GEOM::ListOfGO& thelPoints); + GEOM::GEOM_Object_ptr MakeSmoothingSurface (const GEOM::ListOfGO& thelPoints, + CORBA::Long theNbMax, + CORBA::Long theDegMax, + CORBA::Double theDMax); /*@@ insert new functions before this line @@ do not remove this line @@*/ ::GEOMImpl_IAdvancedOperations* GetOperations() diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx index d8fe39809..15a5cd570 100644 --- a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx +++ b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx @@ -42,7 +42,10 @@ // Constructor //================================================================================= AdvancedGUI_SmoothingSurfaceDlg::AdvancedGUI_SmoothingSurfaceDlg (GeometryGUI* theGeometryGUI, QWidget* parent) - : GEOMBase_Skeleton(theGeometryGUI, parent, false) + : GEOMBase_Skeleton(theGeometryGUI, parent, false), + myNbMaxSpin(0), + myDegMaxSpin(0), + myDMaxSpin(0) { QPixmap imageOp (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SMOOTHINGSURFACE_LPOINTS"))); QPixmap imageSel (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); @@ -65,6 +68,20 @@ AdvancedGUI_SmoothingSurfaceDlg::AdvancedGUI_SmoothingSurfaceDlg (GeometryGUI* t GroupPoints->PushButton1->setIcon( image1 ); GroupPoints->LineEdit1->setReadOnly( true ); + QLabel *aNbMax = new QLabel(tr("GEOM_SMOOTHINGSURFACE_ARG_NB_MAX")); + QLabel *aDegMax = new QLabel(tr("GEOM_SMOOTHINGSURFACE_ARG_DEG_MAX")); + QLabel *aDMax = new QLabel(tr("GEOM_SMOOTHINGSURFACE_ARG_D_MAX")); + + myNbMaxSpin = new SalomeApp_IntSpinBox(0, 1000, 1, 0, true, true); + myDegMaxSpin = new SalomeApp_IntSpinBox(0, 1000, 1, 0, true, true); + myDMaxSpin = new SalomeApp_DoubleSpinBox; + GroupPoints->gridLayout1->addWidget(aNbMax, 1, 0); + GroupPoints->gridLayout1->addWidget(aDegMax, 2, 0); + GroupPoints->gridLayout1->addWidget(aDMax, 3, 0); + GroupPoints->gridLayout1->addWidget(myNbMaxSpin, 1, 1, 1, 2); + GroupPoints->gridLayout1->addWidget(myDegMaxSpin, 2, 1, 1, 2); + GroupPoints->gridLayout1->addWidget(myDMaxSpin, 3, 1, 1, 2); + QVBoxLayout* layout = new QVBoxLayout(centralWidget()); layout->setMargin(0); layout->setSpacing(6); layout->addWidget(GroupPoints); @@ -91,7 +108,12 @@ void AdvancedGUI_SmoothingSurfaceDlg::Init() { // Get setting of step value from file configuration SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100); + + initSpinBox(myDMaxSpin, 0., COORD_MAX, 0.00001, "parametric_precision" ); + + myNbMaxSpin->setValue(2); + myDegMaxSpin->setValue(8); + myDMaxSpin->setValue(0.); //@@ initialize dialog box widgets here @@// @@ -102,7 +124,13 @@ void AdvancedGUI_SmoothingSurfaceDlg::Init() this, SLOT(SetDoubleSpinBoxStep(double))); connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); - + connect(myNbMaxSpin, SIGNAL(valueChanged(const QString&)), + this, SLOT(processPreview()) ); + connect(myDegMaxSpin, SIGNAL(valueChanged(const QString&)), + this, SLOT(processPreview()) ); + connect(myDMaxSpin, SIGNAL(valueChanged(const QString&)), + this, SLOT(processPreview()) ); + initName(tr("GEOM_SMOOTHINGSURFACE")); //displayPreview(); } @@ -167,9 +195,14 @@ GEOM::GEOM_IOperations_ptr AdvancedGUI_SmoothingSurfaceDlg::createOperation() //================================================================================= bool AdvancedGUI_SmoothingSurfaceDlg::isValid (QString& msg) { - bool ok = true; + if (myPoints.empty()) { + msg += tr("GEOM_SMOOTHINGSURFACE_NO_POINTS"); + return false; + } - //@@ add custom validation actions here @@// + bool ok = myNbMaxSpin->isValid (msg, !IsPreview()) && + myDegMaxSpin->isValid(msg, !IsPreview()) && + myDMaxSpin->isValid (msg, !IsPreview()); return ok; } @@ -192,9 +225,12 @@ bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects) for ( int i = 0; i < myPoints.count(); i++ ) points[i] = myPoints[i].copy(); + const int aNbMax = myNbMaxSpin->value(); + const int aDegMax = myDegMaxSpin->value(); + const double aDMax = myDMaxSpin->value(); // call engine function - anObj = anOper->MakeSmoothingSurface(points); + anObj = anOper->MakeSmoothingSurface(points, aNbMax, aDegMax, aDMax); res = !anObj->_is_nil(); if (res && !IsPreview()) { diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h index c12ab5173..822d2aa0f 100644 --- a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h +++ b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h @@ -26,6 +26,7 @@ #include class DlgRef_1Sel; +class SalomeApp_IntSpinBox; //================================================================================= // class : AdvancedGUI_SmoothingSurfaceDlg @@ -53,6 +54,9 @@ private: private: DlgRef_1Sel* GroupPoints; QList myPoints; + SalomeApp_IntSpinBox *myNbMaxSpin; + SalomeApp_IntSpinBox *myDegMaxSpin; + SalomeApp_DoubleSpinBox *myDMaxSpin; private slots: void ClickOnOk(); diff --git a/src/AdvancedGUI/AdvancedGUI_msg_en.ts b/src/AdvancedGUI/AdvancedGUI_msg_en.ts index 2aab6e88a..3e6b28602 100644 --- a/src/AdvancedGUI/AdvancedGUI_msg_en.ts +++ b/src/AdvancedGUI/AdvancedGUI_msg_en.ts @@ -287,11 +287,27 @@ GEOM_SMOOTHINGSURFACE_ARG - Nodes + Arguments GEOM_SMOOTHINGSURFACE_ARG_POINTS Points + + GEOM_SMOOTHINGSURFACE_ARG_NB_MAX + Max nbr of Bezier pieces + + + GEOM_SMOOTHINGSURFACE_ARG_DEG_MAX + Max BSpline surface degree + + + GEOM_SMOOTHINGSURFACE_ARG_D_MAX + Max plate criterion value + + + GEOM_SMOOTHINGSURFACE_NO_POINTS + No points selected + diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 71e38f9d2..792cbe5ae 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -3516,7 +3516,7 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSmoothingSurface (GEOM::GEOM_List_ptr t if (GEOM_List_i* aListImplP = dynamic_cast*>(GetServant(thelPoints, myPOA).in())) { getCurvesOp(); - GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeSmoothingSurface(aListImplP->GetList()); + GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeSmoothingSurface(aListImplP->GetList(), 2, 8, 0.); endService( " GEOM_Superv_i::MakeSmoothingSurface" ); return anObj; } diff --git a/src/GEOM_SWIG/geomBuilder.py b/src/GEOM_SWIG/geomBuilder.py old mode 100755 new mode 100644 index 34fe54d71..c269bc765 --- a/src/GEOM_SWIG/geomBuilder.py +++ b/src/GEOM_SWIG/geomBuilder.py @@ -12631,12 +12631,41 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen): ## Create a surface from a cloud of points # @param thelPoints list of points. Compounds of points are # accepted as well. + # @param theNbMax maximum number of Bezier pieces in the resulting + # surface. + # @param theDegMax maximum degree of the resulting BSpline surface. + # @param theDMax specifies maximum value of the + # GeomPlate_PlateG0Criterion criterion. + # @param theName Object name; when specified, this parameter is used + # for result publication in the study. Otherwise, if automatic + # publication is switched on, default value is used for result name. # @return New GEOM_Object, containing the created shape. # # @ref tui_creation_smoothingsurface "Example" - def MakeSmoothingSurface(self, thelPoints): - anObj = self.AdvOp.MakeSmoothingSurface(thelPoints) + def MakeSmoothingSurface(self, thelPoints, theNbMax=2, theDegMax=8, + theDMax=0.0, theName=None): + """ + Create a surface from a cloud of points + + Parameters: + thelPoints list of points. Compounds of points are + accepted as well. + theNbMax maximum number of Bezier pieces in the resulting + surface. + theDegMax maximum degree of the resulting BSpline surface. + theDMax specifies maximum value of the + GeomPlate_PlateG0Criterion criterion. + theName Object name; when specified, this parameter is used + for result publication in the study. Otherwise, if automatic + publication is switched on, default value is used for result name. + + Returns: + New GEOM_Object, containing the created shape. + """ + anObj = self.AdvOp.MakeSmoothingSurface + (thelPoints, theNbMax, theDegMax, theDMax) RaiseIfFailed("MakeSmoothingSurface", self.AdvOp) + self._autoPublish(anObj, theName, "smoothing") return anObj ## Export a shape to XAO format