]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Modif Smoothing Surfaces V6_5_SMOOTHING_SURFACES
authorfps <fps@opencascade.com>
Thu, 22 Nov 2012 09:02:52 +0000 (09:02 +0000)
committerfps <fps@opencascade.com>
Thu, 22 Nov 2012 09:02:52 +0000 (09:02 +0000)
32 files changed:
doc/salome/gui/GEOM/input/creating_adv_obj.doc
doc/salome/gui/GEOM/input/creating_smoothingsurface.doc [new file with mode: 0644]
doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
resources/GEOMCatalog.xml.in
resources/Makefile.am
resources/smoothingsurface.png [new file with mode: 0644]
resources/smoothingsurface_points_isclosed.png [new file with mode: 0644]
resources/tree_smoothingsurface.png [new file with mode: 0644]
src/AdvancedGUI/AdvancedGUI.cxx
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx [new file with mode: 0644]
src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h [new file with mode: 0644]
src/AdvancedGUI/Makefile.am
src/GEOMGUI/GEOM_images.ts
src/GEOMGUI/GEOM_msg_en.ts
src/GEOMGUI/GEOM_msg_fr.ts
src/GEOMGUI/GeometryGUI.cxx
src/GEOMGUI/GeometryGUI_Operations.h
src/GEOMImpl/GEOMImpl_Gen.cxx
src/GEOMImpl/GEOMImpl_IAdvancedOperations.cxx
src/GEOMImpl/GEOMImpl_IAdvancedOperations.hxx
src/GEOMImpl/GEOMImpl_ISmoothingSurface.hxx [new file with mode: 0644]
src/GEOMImpl/GEOMImpl_SmoothingSurfaceDriver.cxx [new file with mode: 0644]
src/GEOMImpl/GEOMImpl_SmoothingSurfaceDriver.hxx [new file with mode: 0644]
src/GEOMImpl/GEOMImpl_Types.hxx
src/GEOMImpl/Makefile.am
src/GEOM_I/GEOM_IAdvancedOperations_i.cc
src/GEOM_I/GEOM_IAdvancedOperations_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh
src/GEOM_SWIG/geompyDC.py

index eb11522cf0f98b1918ed2c58ab15dd632ed0f437..d61dc1415083229c42ec12ae2d5f182314480b58 100644 (file)
@@ -6,6 +6,7 @@
 
 <ul>
 <li>\subpage create_pipetshape_page</li>
+<li>\subpage create_smoothingsurface_page</li>
 <!--@@ insert new functions before this line @@ do not remove this line @@-->
 </ul>
 
diff --git a/doc/salome/gui/GEOM/input/creating_smoothingsurface.doc b/doc/salome/gui/GEOM/input/creating_smoothingsurface.doc
new file mode 100644 (file)
index 0000000..4326aee
--- /dev/null
@@ -0,0 +1,27 @@
+/*!
+
+\page create_smoothingsurface_page SmoothingSurface
+
+To create a \b SmoothingSurface in the <b>Main Menu</b> select <b>New Entity - >
+Advanced - > SmoothingSurface </b>
+
+Specify the parameters of the SmoothingSurface object creation in the opened dialog
+box and press "Apply" or "Apply & Close" button.
+Result of each operation will be a GEOM_Object.
+
+<b>TUI Command:</b> <em>geompy.MakeSmoothingSurface(Points, isClosed)</em>
+
+<b>Arguments:</b>
+- \b Points - list of points
+- \b isClosed - Define if the created surface must be closed
+
+\image html smoothingsurface_dlg.png
+
+Example:
+
+\image html smoothingsurface.png
+
+Our <b>TUI Scripts</b> provide you with useful examples of creation of
+\ref tui_creation_smoothingsurface "Advanced objects".
+
+*/
index 654cdd15890fa44d895b43470a6cffa026c11633..42fa49ea1329a8a17030e1b08ce8a44c019aabe9 100644 (file)
@@ -80,5 +80,23 @@ gg.createAndDisplayGO(id_pipetshapefillet_position)
 
 \endcode
 
+\anchor tui_creation_smoothingsurface
+<br><h2>Creation of SmoothingSurface</h2>
+
+\code
+import geompy
+import salome
+gg = salome.ImportComponentGUI("GEOM")
+
+# create SmoothingSurface object
+smoothingsurface = geompy.MakeSmoothingSurface([value], false)
+
+# add object in the study
+id_smoothingsurface = geompy.addToStudy(smoothingsurface,"SmoothingSurface")
+
+# display smoothingsurface
+gg.createAndDisplayGO(id_smoothingsurface) 
+\endcode
+
 <!--@@ insert new functions before this line @@ do not remove this line @@-->
 */
index 78339217004e03cb7a7828c04157d9d2dc810e57..bfc5a5e3479934777199387bb509532306844788 100644 (file)
@@ -3758,6 +3758,14 @@ module GEOM
                                                in double theR2, in double theW2, in double theL2,
                                                in double theRF, in boolean theHexMesh,
                                                in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    /*!
+     *  Create a smoothing surface from a set of points
+     *  \param thePoints list of points
+     *  \param theisClosed Define if the created surface must be closed
+     *  \return New GEOM_Object, containing the created shape.
+     */
+    GEOM_Object MakeSmoothingSurface (in ListOfGO thePoints, in boolean theisClosed);
+
     /*@@ insert new functions before this line @@ do not remove this line @@*/
   };
 
index 7bc184a7f26e902f0948b59598cb68778bba06e2..cb2b9adabd98841055035f402cf650822342522d 100644 (file)
@@ -617,6 +617,8 @@ module GEOM
                           in double theRF, in boolean theHexMesh,
                           in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
 
+    GEOM_Object MakeSmoothingSurface (in GEOM_List thePoints, in boolean theisClosed);
+
     /*@@ insert new functions before this line @@ do not remove this line @@*/
  };
 };
index db645d25bc5ec0776858d2eb317fe4aafe43912b..f3a5e70c3017beb7c46e5222ad31eb854e31f91d 100644 (file)
                         </outParameter-list>
                         <DataStream-list></DataStream-list>
                     </component-service>
+                    <component-service>
+                        <service-name>MakeSmoothingSurface</service-name>
+                        <service-author></service-author>
+                        <service-version></service-version>
+                        <service-comment>unknown</service-comment>
+                        <service-by-default>0</service-by-default>
+                        <inParameter-list>
+                            <inParameter>
+                                <inParameter-name>thePoints</inParameter-name>
+                                <inParameter-type>GEOM_List</inParameter-type>
+                                <inParameter-comment>list of points</inParameter-comment>
+                            </inParameter>
+                            <inParameter>
+                                <inParameter-name>theisClosed</inParameter-name>
+                                <inParameter-type>boolean</inParameter-type>
+                                <inParameter-comment>Define if the created surface must be closed</inParameter-comment>
+                            </inParameter>
+                        </inParameter-list>
+                        <outParameter-list>
+                            <outParameter>
+                                <outParameter-name>return</outParameter-name>
+                                <outParameter-type>GEOM_Object</outParameter-type>
+                                <outParameter-comment>Result object</outParameter-comment>
+                            </outParameter>
+                        </outParameter-list>
+                        <DataStream-list></DataStream-list>
+                    </component-service>
                     <!-- @@ insert new functions before this line @@ do not remove this line @@ -->
                 </component-service-list>
             </component-interface-list>
index 187ca89c6760af2f81ebec11ef2eddb270f01461..aa04c3e62736972d351dbb0c241b7fb8e3753f3c 100644 (file)
@@ -251,6 +251,7 @@ ADVANCED_RESOURCES += dlg_pipetshapechamferh.png dlg_pipetshapechamferw.png
 ADVANCED_RESOURCES += dlg_pipetshapefilletl1.png dlg_pipetshapefilletr1.png dlg_pipetshapefilletw1.png
 ADVANCED_RESOURCES += dlg_pipetshapefilletl2.png dlg_pipetshapefilletr2.png dlg_pipetshapefilletw2.png
 ADVANCED_RESOURCES += dlg_pipetshapefilletrf.png
+ADVANCED_RESOURCES += smoothingsurface.png smoothingsurface_points_isclosed.png tree_smoothingsurface.png
 ##@@ insert new functions before this line @@ do not remove this line @@##
 
 dist_salomeres_DATA += $(ADVANCED_RESOURCES)
diff --git a/resources/smoothingsurface.png b/resources/smoothingsurface.png
new file mode 100644 (file)
index 0000000..38a2457
Binary files /dev/null and b/resources/smoothingsurface.png differ
diff --git a/resources/smoothingsurface_points_isclosed.png b/resources/smoothingsurface_points_isclosed.png
new file mode 100644 (file)
index 0000000..fe6dce0
Binary files /dev/null and b/resources/smoothingsurface_points_isclosed.png differ
diff --git a/resources/tree_smoothingsurface.png b/resources/tree_smoothingsurface.png
new file mode 100644 (file)
index 0000000..38a2457
Binary files /dev/null and b/resources/tree_smoothingsurface.png differ
index a092ecc3a17a8b2c398e5d8e0e70c4c206b13962..5ba967912a7736cddfd17bf44300cfb2e44e99c5 100644 (file)
@@ -29,6 +29,7 @@
 #include <SalomeApp_Application.h>
 
 #include "AdvancedGUI_PipeTShapeDlg.h"
+#include "AdvancedGUI_SmoothingSurfaceDlg.h"
 //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
 
 #include <QDialog>
@@ -69,6 +70,9 @@ bool AdvancedGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
 //   case GEOMOp::OpPipeTShapeGroups:
 //     aDlg = new AdvancedGUI_PipeTShapeGroupsDlg( getGeometryGUI(), parent );
 //     break;
+  case GEOMOp::OpSmoothingSurface:
+    aDlg = new AdvancedGUI_SmoothingSurfaceDlg( getGeometryGUI(), parent );
+    break;
   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@//
   default:
     app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) );
diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.cxx
new file mode 100644 (file)
index 0000000..17373f9
--- /dev/null
@@ -0,0 +1,288 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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
+
+#include "AdvancedGUI_SmoothingSurfaceDlg.h"
+
+#include <DlgRef.h>
+#include <GeometryGUI.h>
+#include <GEOMBase.h>
+
+#include <SUIT_Session.h>
+#include <SUIT_ResourceMgr.h>
+#include <SalomeApp_Application.h>
+#include <LightApp_SelectionMgr.h>
+
+// OCCT Includes
+#include <TopoDS_Shape.hxx>
+#include <TopoDS.hxx>
+#include <TopExp.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+
+#include <GEOMImpl_Types.hxx>
+
+//=================================================================================
+// Constructor
+//=================================================================================
+AdvancedGUI_SmoothingSurfaceDlg::AdvancedGUI_SmoothingSurfaceDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
+  : GEOMBase_Skeleton(theGeometryGUI, parent, false)
+{
+  QPixmap imageOp  (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SMOOTHINGSURFACE_POINTS_ISCLOSED")));
+  QPixmap imageSel (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
+  QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
+
+  setWindowTitle(tr("GEOM_SMOOTHINGSURFACE_TITLE"));
+
+  /***************************************************************/
+  mainFrame()->GroupConstructors->setTitle(tr("GEOM_SMOOTHINGSURFACE"));
+  mainFrame()->RadioButton1->setIcon(imageOp);
+  mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
+  mainFrame()->RadioButton2->close();
+  mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
+  mainFrame()->RadioButton3->close();
+
+  GroupPoints = new DlgRef_1Sel1Check( centralWidget() );
+
+  GroupPoints->GroupBox1->setTitle( tr( "GEOM_SMOOTHINGSURFACE_ARG" ) );
+  GroupPoints->TextLabel1->setText( tr( "GEOM_SMOOTHINGSURFACE_ARG_POINTS" ) );
+  GroupPoints->PushButton1->setIcon( image1 );
+  GroupPoints->LineEdit1->setReadOnly( true );
+  GroupPoints->CheckButton1->setText( tr( "GEOM_SMOOTHINGSURFACE_ARG_ISCLOSED" ) );
+  GroupPoints->CheckButton1->setChecked(false);
+
+  QVBoxLayout* layout = new QVBoxLayout(centralWidget());
+  layout->setMargin(0); layout->setSpacing(6);
+  layout->addWidget(GroupPoints);
+  /***************************************************************/
+
+  setHelpFileName("create_smoothingsurface_page.html");
+
+  Init();
+}
+
+//=================================================================================
+// Destructor
+//=================================================================================
+AdvancedGUI_SmoothingSurfaceDlg::~AdvancedGUI_SmoothingSurfaceDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+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);
+
+  //@@ initialize dialog box widgets here @@//
+
+  // Signal/slot connections
+  connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+  connect(myGeomGUI,     SIGNAL(SignalDefaultStepValueChanged(double)),
+          this,          SLOT(SetDoubleSpinBoxStep(double)));
+  connect( myGeomGUI->getApp()->selectionMgr(),
+           SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
+
+  initName(tr("GEOM_SMOOTHINGSURFACE"));
+  //displayPreview();
+}
+
+/*//=================================================================================
+// function : SetDoubleSpinBoxStep()
+// purpose  : Double spin box management
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::SetDoubleSpinBoxStep (double step)
+{
+  //@@ set double spin box step for all spin boxes here @@//
+}*/
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  :
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::ClickOnOk()
+{
+  if (ClickOnApply())
+    ClickOnCancel();
+}
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+bool AdvancedGUI_SmoothingSurfaceDlg::ClickOnApply()
+{
+  if (!onAccept())
+    return false;
+
+  initName();
+
+  return true;
+}
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+  //displayPreview();
+}
+
+//=================================================================================
+// function : enterEvent [REDEFINED]
+// purpose  :
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::enterEvent (QEvent*)
+{
+  if (!mainFrame()->GroupConstructors->isEnabled())
+    ActivateThisDialog();
+}
+
+/*//=================================================================================
+// function : ValueChangedInSpinBox()
+// purpose  :
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::ValueChangedInSpinBox()
+{
+  //@@ connect custom spin boxes or other widget to this slot in the Init() method for automatic preview update @@//
+  //displayPreview();
+}*/
+
+//=================================================================================
+// function : createOperation
+// purpose  :
+//=================================================================================
+GEOM::GEOM_IOperations_ptr AdvancedGUI_SmoothingSurfaceDlg::createOperation()
+{
+  return getGeomEngine()->GetIAdvancedOperations(getStudyId());
+}
+
+//=================================================================================
+// function : isValid
+// purpose  :
+//=================================================================================
+bool AdvancedGUI_SmoothingSurfaceDlg::isValid (QString& msg)
+{
+  bool ok = true;
+
+  //@@ add custom validation actions here @@//
+
+  return ok;
+}
+
+//=================================================================================
+// function : execute
+// purpose  :
+//=================================================================================
+bool AdvancedGUI_SmoothingSurfaceDlg::execute (ObjectList& objects)
+{
+  bool res = false;
+
+  GEOM::GEOM_Object_var anObj;
+
+  GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation());
+
+  //@@ retrieve input values from the widgets here @@//
+  GEOM::ListOfGO_var points = new GEOM::ListOfGO();
+  points->length( myPoints.count() );
+  for ( int i = 0; i < myPoints.count(); i++ )
+    points[i] = myPoints[i].copy();
+
+  CORBA::Boolean theisClosed = GroupPoints->CheckButton1->isChecked();
+
+  // call engine function
+  anObj = anOper->MakeSmoothingSurface(points, theisClosed);
+  res = !anObj->_is_nil();
+  if (res && !IsPreview())
+  {
+    QStringList aParameters;
+    //@@ put stringified input parameters to the string list here to store in the data model for notebook @@//
+    /*aParameters << @@ stringified parameter value @@; // Points parameter
+    aParameters << @@ stringified parameter value @@; // isClosed parameter*/
+    if ( aParameters.count() > 0 ) anObj->SetParameters(aParameters.join(":").toLatin1().constData());
+  }
+  
+  if (res)
+    objects.push_back(anObj._retn());
+
+  return res;
+}
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection as changed or other case
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::SelectionIntoArgument()
+{
+  QList<GEOM::GeomObjPtr> points = getSelected( TopAbs_VERTEX, -1 );
+  synchronize( myPoints, points );
+  if ( !myPoints.isEmpty()  )
+    GroupPoints->LineEdit1->setText( QString::number( myPoints.count() ) + "_" + tr( "GEOM_POINT" ) + tr( "_S_" ) );
+  else
+    GroupPoints->LineEdit1->setText( "" );
+  processPreview();
+}
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void AdvancedGUI_SmoothingSurfaceDlg::SetEditCurrentArgument()
+{
+  if ( sender() == GroupPoints->PushButton1 )
+    myEditCurrentArgument = GroupPoints->LineEdit1;
+  myEditCurrentArgument->setFocus();
+  SelectionIntoArgument();
+}
+
+void AdvancedGUI_SmoothingSurfaceDlg::synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right )
+{
+  // 1. remove items from the "left" list that are not in the "right" list
+  QMutableListIterator<GEOM::GeomObjPtr> it1( left );
+  while ( it1.hasNext() ) {
+    GEOM::GeomObjPtr o1 = it1.next();
+    bool found = false;
+    QMutableListIterator<GEOM::GeomObjPtr> it2( right );
+    while ( it2.hasNext() && !found )
+      found = o1 == it2.next();
+    if ( !found )
+      it1.remove();
+  }
+  // 2. add items from the "right" list that are not in the "left" list (to keep selection order)
+  it1 = right;
+  while ( it1.hasNext() ) {
+    GEOM::GeomObjPtr o1 = it1.next();
+    bool found = false;
+    QMutableListIterator<GEOM::GeomObjPtr> it2( left );
+    while ( it2.hasNext() && !found )
+      found = o1 == it2.next();
+    if ( !found )
+      left << o1;
+  }
+}
+
diff --git a/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h b/src/AdvancedGUI/AdvancedGUI_SmoothingSurfaceDlg.h
new file mode 100644 (file)
index 0000000..2f02294
--- /dev/null
@@ -0,0 +1,73 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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
+
+#ifndef ADVANCEDGUI_SMOOTHINGSURFACEDLG_H
+#define ADVANCEDGUI_SMOOTHINGSURFACEDLG_H
+
+#include <GEOMBase_Skeleton.h>
+#include "GEOM_GenericObjPtr.h"
+
+#include <list>
+
+class DlgRef_1Sel1Check;
+
+//=================================================================================
+// class    : AdvancedGUI_SmoothingSurfaceDlg
+// purpose  :
+//=================================================================================
+class AdvancedGUI_SmoothingSurfaceDlg : public GEOMBase_Skeleton
+{
+  Q_OBJECT
+
+public:
+  AdvancedGUI_SmoothingSurfaceDlg( GeometryGUI*, QWidget* = 0 );
+  ~AdvancedGUI_SmoothingSurfaceDlg();
+
+protected:
+  // redefined from GEOMBase_Helper
+  virtual GEOM::GEOM_IOperations_ptr createOperation();
+  virtual bool                       isValid( QString& );
+  virtual bool                       execute( ObjectList& );
+
+private:
+  void                               Init();
+  void                               enterEvent( QEvent* );
+  void                               synchronize( QList<GEOM::GeomObjPtr>& left, QList<GEOM::GeomObjPtr>& right );
+
+private:
+  DlgRef_1Sel1Check*                 GroupPoints;
+  QList<GEOM::GeomObjPtr>            myPoints;
+
+private slots:
+  void                               ClickOnOk();
+  bool                               ClickOnApply();
+  
+  void                               ActivateThisDialog();
+  void                               DeactivateActiveDialog();
+  
+  void                               CheckButtonToggled();
+  void                               SelectionIntoArgument();
+  void                               SetEditCurrentArgument();
+  //void                               ValueChangedInSpinBox();
+  //void                               SetDoubleSpinBoxStep( double );
+};
+
+#endif // ADVANCEDGUI_SMOOTHINGSURFACEDLG_H
index 1a1005aeb65b0cf687180dd2d1b1ebe27d8e064b..4eccd642a6ce7d88e12407699214ba7697e996cc 100644 (file)
@@ -28,6 +28,7 @@ salomeinclude_HEADERS =                       \
 
 ADVANCED_INCLUDES  =
 ADVANCED_INCLUDES += AdvancedGUI_PipeTShapeDlg.h
+ADVANCED_INCLUDES += AdvancedGUI_SmoothingSurfaceDlg.h
 ##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@##
 
 salomeinclude_HEADERS += $(ADVANCED_INCLUDES)
@@ -41,6 +42,7 @@ dist_libAdvancedGUI_la_SOURCES =      \
 
 ADVANCED_SOURCES  =
 ADVANCED_SOURCES += AdvancedGUI_PipeTShapeDlg.h AdvancedGUI_PipeTShapeDlg.cxx
+ADVANCED_SOURCES += AdvancedGUI_SmoothingSurfaceDlg.h AdvancedGUI_SmoothingSurfaceDlg.cxx
 ##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@##
 
 dist_libAdvancedGUI_la_SOURCES += $(ADVANCED_SOURCES)
@@ -49,6 +51,7 @@ MOC_FILES =
 
 ADVANCED_MOC_FILES  =
 ADVANCED_MOC_FILES += AdvancedGUI_PipeTShapeDlg_moc.cxx
+ADVANCED_MOC_FILES += AdvancedGUI_SmoothingSurfaceDlg_moc.cxx
 ##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@##
 
 MOC_FILES += $(ADVANCED_MOC_FILES)
@@ -80,4 +83,7 @@ libAdvancedGUI_la_CPPFLAGS =                  \
 
 libAdvancedGUI_la_LDFLAGS =                                    \
        ../GEOMFiltersSelection/libGEOMFiltersSelection.la      \
-       ../GEOMBase/libGEOMBase.la
+       ../GEOMBase/libGEOMBase.la                              \
+       ../GEOMGUI/libGEOM.la                                   \
+       $(CAS_LDFLAGS) -lTKGeomBase                             \
+       $(GUI_LDFLAGS) -lsuit
index 98439825d7beaaff177c3e226ca2b3bd2839dd20..928aeae89474277a8f30091241f9f41bf8687b2d 100644 (file)
             <translation>pipetshapegroups.png</translation>
         </message>
 -->
+        <message>
+            <source>ICON_DLG_SMOOTHINGSURFACE_POINTS_ISCLOSED</source>
+            <translation>smoothingsurface_points_isclosed.png</translation>
+        </message>
+        <message>
+            <source>ICO_SMOOTHINGSURFACE</source>
+            <translation>smoothingsurface.png</translation>
+        </message>
+        <message>
+            <source>ICON_OBJBROWSER_ADVANCED_202</source>
+            <translation>tree_smoothingsurface.png</translation>
+        </message>
        <!-- @@ insert new functions before this line @@ do not remove this line @@ -->
     </context>
 </TS>
index 83b653889fac18db6121dc356655fc76d1a9a5a5..32db576d281e297cd80eb044752cdf90d6b6ef4d 100644 (file)
@@ -5414,6 +5414,33 @@ Do you want to create new material?</translation>
         <translation>New L2</translation>
     </message>
 </context>
+<context>
+    <name>AdvancedGUI_SmoothingSurfaceDlg</name>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_TITLE</source>
+        <translation>Smoothing surface Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE</source>
+        <translation>Smoothing surface</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_RESULT</source>
+        <translation>Result name</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_ARG</source>
+        <translation>Nodes</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_ARG_POINTS</source>
+        <translation>Points</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_ARG_ISCLOSED</source>
+        <translation>Build a closed surface</translation>
+    </message>
+</context>
 <context>
     <name>GEOMToolsGUI_PublishDlg</name>
     <message>
index d0a4c96dabb728a58338527f0ac09d8b134c264d..7f7baab53bf446ae0b6f9a7cbffce6099b4a699f 100644 (file)
@@ -5414,6 +5414,33 @@ Voulez-vous en créer un nouveau ?</translation>
         <translation>Nouvelle L2</translation>
     </message>
 </context>
+<context>
+    <name>AdvancedGUI_SmoothingSurfaceDlg</name>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_TITLE</source>
+        <translation>Constructions de surface lisse</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE</source>
+        <translation>Surface lisse</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_RESULT</source>
+        <translation>Nom du résultat</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_ARG</source>
+        <translation>Noeuds</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_ARG_POINTS</source>
+        <translation>Points</translation>
+    </message>
+    <message>
+        <source>GEOM_SMOOTHINGSURFACE_ARG_ISCLOSED</source>
+        <translation>Cration d'une surface fermée</translation>
+    </message>
+</context>
 <context>
     <name>GEOMToolsGUI_PublishDlg</name>
     <message>
index 918a9f31647e61fcb111e1ef44e67943895f8439..bd2ffdd3b0bbf6bf7bf498355c9c78540b896d9b 100644 (file)
@@ -566,6 +566,7 @@ void GeometryGUI::OnGUIEvent( int id )
   case GEOMOp::OpAdvancedNoOp:       // NO OPERATION (advanced operations base)
   case GEOMOp::OpPipeTShape:         // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
 //   case GEOMOp::OpPipeTShapeGroups:     // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
+  case GEOMOp::OpSmoothingSurface:           // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
     //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
     libName = "AdvancedGUI";
     break;
@@ -887,6 +888,7 @@ void GeometryGUI::initialize( CAM_Application* app )
                     "Geometry:Decrease number of isolines");
 
 //   createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
+  createGeomAction( GEOMOp::OpSmoothingSurface, "SMOOTHINGSURFACE" );
   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
 
   // ---- create menus --------------------------
@@ -933,9 +935,10 @@ void GeometryGUI::initialize( CAM_Application* app )
   createMenu( GEOMOp::OpFilling,    genId, -1 );
   createMenu( GEOMOp::OpPipe,       genId, -1 );
 
-//   int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
+   int advId = createMenu( tr( "MEN_ADVANCED" ), newEntId, -1 );
 //   createMenu( GEOMOp::OpPipeTShape, advId, -1 );
 //   createMenu( GEOMOp::OpPipeTShapeGroups, advId, -1 );
+  createMenu( GEOMOp::OpSmoothingSurface, advId, -1 );
   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
 
   createMenu( separator(), newEntId, -1 );
@@ -1191,6 +1194,8 @@ void GeometryGUI::initialize( CAM_Application* app )
     createTool( GEOMOp::OpFeatureDetect,  picturesTbId );
   #endif
 
+  int advancedTbId = createTool( tr( "TOOL_ADVANCED" ) );
+  createTool( GEOMOp::OpSmoothingSurface, advancedTbId );
   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
 
   // ---- create popup menus --------------------------
index 80764383192432f4787026e71f732486c020ca87..0aa1b225821bb027f9372b9e738902c62c93f1ad 100644 (file)
@@ -185,6 +185,7 @@ namespace GEOMOp {
     OpAdvancedNoOp        = 10000,  // NO OPERATION (advanced operations base)
     OpPipeTShape          = 10001,  // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
 //     OpPipeTShapeGroups  = 10002,  // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
+    OpSmoothingSurface            = 10003,  // MENU NEW ENTITY - ADVANCED - SMOOTHINGSURFACE
     //@@ insert new functions before this line @@ do not remove this line @@//
   };
 }
index 6fd6cb8dd51fcde0ca62719b9ac4737d8bc0306f..f6833d1a7ff64017ff2f26152f965211184afe3e 100644 (file)
@@ -83,6 +83,7 @@
 #include <GEOMImpl_MeasureDriver.hxx>
 // Advanced operations
 #include <GEOMImpl_PipeTShapeDriver.hxx>
+#include <GEOMImpl_SmoothingSurfaceDriver.hxx>
 /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
 
 //=============================================================================
@@ -166,6 +167,7 @@ GEOMImpl_Gen::GEOMImpl_Gen()
 
    // Advanced operations
    TFunction_DriverTable::Get()->AddDriver(GEOMImpl_PipeTShapeDriver::GetID(), new GEOMImpl_PipeTShapeDriver());
+   TFunction_DriverTable::Get()->AddDriver(GEOMImpl_SmoothingSurfaceDriver::GetID(), new GEOMImpl_SmoothingSurfaceDriver());
    /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
 
    SetEngine(this);
index 7c415bc085a37dfde9f25a1ea696f6acea398210..c8029f023968f6468165f04572a75f6ab71a0d32 100644 (file)
@@ -45,6 +45,8 @@
 
 #include "GEOMImpl_PipeTShapeDriver.hxx"
 #include "GEOMImpl_IPipeTShape.hxx"
+#include <GEOMImpl_SmoothingSurfaceDriver.hxx>
+#include <GEOMImpl_ISmoothingSurface.hxx>
 /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
 
 #include <TopExp.hxx>
@@ -2227,4 +2229,73 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
   return aSeq;
 }
 
+//=============================================================================
+/*!
+ *  Create a smoothing surface from a set of points
+ *  \param thePoints list of points
+ *  \param theisClosed Define if the created surface must be closed
+ *  \return New GEOM_Object, containing the created shape.
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeSmoothingSurface (std::list<Handle(GEOM_Object)> thePoints, bool theisClosed)
+{
+  SetErrorCode(KO);
+
+  //Add a new object
+  Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_SMOOTHINGSURFACE);
+
+  //Add a new shape function with parameters
+  Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_SmoothingSurfaceDriver::GetID(), SMOOTHINGSURFACE_POINTS_ISCLOSED);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_SmoothingSurfaceDriver::GetID()) return NULL;
+
+  GEOMImpl_ISmoothingSurface aData (aFunction);
+
+  int aLen = thePoints.size();
+  aData.SetLength(aLen);
+  int ind = 1;
+  std::list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
+  for (; it != thePoints.end(); it++, ind++) {
+    Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
+    if (aRefPnt.IsNull()) {
+      SetErrorCode("NULL point for bSplineFaceShape");
+      return NULL;
+    }
+    aData.SetPoint(ind, aRefPnt);
+  }
+
+  aData.SetisClosed(theisClosed);
+
+  //Compute the resulting value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("SmoothingSurface driver failed");
+      return NULL;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  //Make a Python command
+  GEOM::TPythonDump pd (aFunction);
+  pd << aShape << " = geompy.MakeSmoothingSurface([";
+  it = thePoints.begin();
+  pd << (*it++);
+  while (it != thePoints.end()) {
+    pd << ", " << (*it++);
+  }
+  pd << "], " << theisClosed << ")";
+
+  SetErrorCode(OK);
+
+  return aShape;
+}
 /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
index 6c0d3f67707ee0adbebeab4f3e0961ec4b129f9b..ff95f8bbaa192e8ab3f7c5207efc4dd333184a58 100644 (file)
@@ -27,6 +27,8 @@
 #include "GEOM_Engine.hxx"
 #include "GEOM_Object.hxx"
 
+#include <list>
+
 class GEOMImpl_IBasicOperations;
 class GEOMImpl_IBooleanOperations;
 class GEOMImpl_IShapesOperations;
@@ -109,6 +111,7 @@ public:
                                                    Handle(GEOM_Object) P1 = 0,
                                                    Handle(GEOM_Object) P2 = 0,
                                                    Handle(GEOM_Object) P3 = 0);
+  Standard_EXPORT Handle(GEOM_Object) MakeSmoothingSurface (std::list<Handle(GEOM_Object)> thePoints, bool theisClosed);
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 };
 #endif
diff --git a/src/GEOMImpl/GEOMImpl_ISmoothingSurface.hxx b/src/GEOMImpl/GEOMImpl_ISmoothingSurface.hxx
new file mode 100644 (file)
index 0000000..4683a97
--- /dev/null
@@ -0,0 +1,49 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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
+
+#ifndef _GEOMImpl_ISmoothingSurface_HXX_
+#define _GEOMImpl_ISmoothingSurface_HXX_
+
+#include "GEOM_Function.hxx"
+
+#define SMOOTHINGSURFACE_ARG_LENG        1
+#define SMOOTHINGSURFACE_ARG_LAST        2
+#define SMOOTHINGSURFACE_ARG_ISCLOSED    3
+
+class GEOMImpl_ISmoothingSurface
+{
+public:
+  GEOMImpl_ISmoothingSurface(Handle(GEOM_Function) theFunction): _func(theFunction) {}
+
+  void SetLength(int theLen) { _func->SetInteger(SMOOTHINGSURFACE_ARG_LENG, theLen); }
+  int GetLength() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_LENG); }
+
+  void SetPoint(int theId, Handle(GEOM_Function) theP) { _func->SetReference(SMOOTHINGSURFACE_ARG_LAST + theId, theP); }
+  Handle(GEOM_Function) GetPoint(int theId) { return _func->GetReference(SMOOTHINGSURFACE_ARG_LAST + theId); }
+
+  void SetisClosed(bool theisClosed) { _func->SetInteger(SMOOTHINGSURFACE_ARG_ISCLOSED, theisClosed); }
+  bool GetisClosed() { return _func->GetInteger(SMOOTHINGSURFACE_ARG_ISCLOSED); }
+
+private:
+  Handle(GEOM_Function) _func;
+};
+
+#endif // _GEOMImpl_ISmoothingSurface_HXX_
diff --git a/src/GEOMImpl/GEOMImpl_SmoothingSurfaceDriver.cxx b/src/GEOMImpl/GEOMImpl_SmoothingSurfaceDriver.cxx
new file mode 100644 (file)
index 0000000..aa7e636
--- /dev/null
@@ -0,0 +1,346 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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
+
+#include <Standard_Stream.hxx>
+
+#include <GEOMImpl_SmoothingSurfaceDriver.hxx>
+#include <GEOMImpl_ISmoothingSurface.hxx>
+#include <GEOMImpl_Types.hxx>
+#include <GEOM_Function.hxx>
+
+#include <TFunction_Logbook.hxx>
+#include <StdFail_NotDone.hxx>
+
+//@@ include required header files here @@//
+#include <TopoDS_Vertex.hxx>
+#include <TopoDS_Face.hxx>
+#include <TopoDS_Compound.hxx>
+#include <TopoDS.hxx>
+
+#include <TColgp_SequenceOfPnt.hxx>
+#include <TColgp_Array2OfPnt.hxx>
+#include <TColgp_SequenceOfXY.hxx>
+#include <TColgp_SequenceOfXYZ.hxx>
+#include <TColStd_Array1OfInteger.hxx>
+
+#include <BRepAdaptor_HSurface.hxx>
+
+#include <BRep_Builder.hxx>
+#include <BRepGProp.hxx>
+#include <BRep_Tool.hxx>
+#include <BRepPrimAPI_MakeSphere.hxx>
+#include <BRepPrimAPI_MakeBox.hxx>
+#include <BRepBuilderAPI_MakeFace.hxx>
+#include <BRepAlgoAPI_Cut.hxx>
+
+#include <GeomPlate_Surface.hxx>
+#include <GeomPlate_BuildPlateSurface.hxx>
+#include <GeomPlate_PointConstraint.hxx>
+#include <GeomPlate_MakeApprox.hxx>
+#include <GeomPlate_PlateG0Criterion.hxx>
+#include <GeomPlate_BuildAveragePlane.hxx>
+
+#include <Geom_BSplineSurface.hxx>
+#include <Geom_Surface.hxx>
+#include <Geom_Plane.hxx>
+
+#include <GProp_GProps.hxx>
+#include <Bnd_Box.hxx>
+#include <BRepBndLib.hxx>
+
+#include <gp_Pnt.hxx>
+#include <gp_Pln.hxx>
+#include <gp_Ax3.hxx>
+#include <gp_Dir.hxx>
+#include <gp_Vec.hxx>
+
+#include <GC_MakePlane.hxx>
+//=======================================================================
+//function : GetID
+//purpose  :
+//=======================================================================
+const Standard_GUID& GEOMImpl_SmoothingSurfaceDriver::GetID()
+{
+  static Standard_GUID aGUID("1C3A0F3F-729D-4E83-8232-78E74FC5637C");
+  return aGUID;
+}
+
+//=======================================================================
+//function : GEOMImpl_SmoothingSurfaceDriver
+//purpose  :
+//=======================================================================
+GEOMImpl_SmoothingSurfaceDriver::GEOMImpl_SmoothingSurfaceDriver()
+{
+}
+
+//=======================================================================
+//function : MakeSmoothingSurfaceUnClosed
+//purpose  :
+//=======================================================================
+TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed(Handle_TColgp_HArray1OfPnt myListOfPoints) 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(Geom_Plane) plane(gpbap.Plane());
+  Standard_Real Umin, Umax, Vmin, Vmax;
+  gpbap.MinMaxBox(Umin,Umax,Vmin,Vmax);
+  cout << "Vals : " << Umin << ", " << Umax << ", " << Vmin << ", " << Vmax << endl;
+  BRepBuilderAPI_MakeFace mf(plane,Umin,Umax,Vmin,Vmax,Precision::Confusion());
+  aInitShape =  mf.Face();
+  //return aInitShape;
+  
+  GeomPlate_BuildPlateSurface aBuilder(3,10);
+  // ** Initialization of surface
+  Handle(BRepAdaptor_HSurface) HSI = new BRepAdaptor_HSurface();
+  HSI->ChangeSurface().Initialize(aInitShape);
+  aBuilder.LoadInitSurface( BRep_Tool::Surface(HSI->ChangeSurface().Face()));
+
+  Standard_Integer j, j1, j2;
+  cout << "Init surface" << endl;
+  j1 = myListOfPoints->Lower();
+  j2 = myListOfPoints->Upper();
+  for (j=j1; j<=j2 ; j++)
+  {
+    gp_Pnt aPnt = myListOfPoints->Value(j); 
+    Handle(GeomPlate_PointConstraint) PCont = new GeomPlate_PointConstraint(aPnt,0);
+    aBuilder.Add(PCont);
+  }
+  cout << "avant Perform surface" << endl;
+  aBuilder.Perform();
+  cout << "Perform surface" << endl;
+
+  // 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());
+  GeomPlate_MakeApprox Mapp(gpPlate,0.0001,nbcarreau,degmax,seuil);
+  cout << "Approx surface" << endl;
+
+  Handle (Geom_Surface) Surf (Mapp.Surface());
+  aBuilder.Surface()->Bounds( Umin, Umax, Vmin, Vmax);
+  
+  BRepBuilderAPI_MakeFace MF(Surf,Umin, Umax, Vmin, Vmax, Precision::Confusion());
+  TopoDS_Shape aShape = MF.Shape();
+  
+  return aShape;
+}
+
+//=======================================================================
+//function : MakeSmoothingSurfaceClosed
+//purpose  :
+//=======================================================================
+TopoDS_Shape GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceClosed(Handle_TColgp_HArray1OfPnt myListOfPoints) 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(Geom_Plane) plane(gpbap.Plane());
+  Standard_Real Umin, Umax, Vmin, Vmax;
+  gpbap.MinMaxBox(Umin,Umax,Vmin,Vmax);
+  cout << "Vals : " << Umin << ", " << Umax << ", " << Vmin << ", " << Vmax << endl;
+  BRepBuilderAPI_MakeFace mf(plane,Umin,Umax,Vmin,Vmax,Precision::Confusion());
+  aInitShape =  mf.Face();
+  
+  // Retrieve normal and center of mass of the plane
+  gp_Pln aPln = plane->Pln();
+  gp_Ax3 aAxisNormal = aPln.Position();
+  gp_Dir N = aAxisNormal.Direction();
+  Standard_Real xN = N.X();
+  Standard_Real yN = N.Y();
+  Standard_Real zN = N.Z();
+  GProp_GProps aSystem;
+  BRepGProp::SurfaceProperties(aInitShape, aSystem);
+  gp_Pnt aCenterMass = aSystem.CentreOfMass();
+  
+  // Splitting points
+  Standard_Integer j, j1, j2;
+  j1 = myListOfPoints->Lower();
+  j2 = myListOfPoints->Upper();
+  TColStd_Array1OfInteger ReparPoints(1, myListOfPoints->Length());
+  Standard_Real eps = 0.0001;
+  for (j=j1; j<=j2 ; j++)
+  {
+    gp_Pnt aPnt = myListOfPoints->Value(j); 
+    gp_Vec vec(aCenterMass,aPnt);
+    Standard_Real xVec = vec.X();
+    Standard_Real yVec = vec.Y();
+    Standard_Real zVec = vec.Z();
+    
+    Standard_Real Scalar = xN*xVec+yN*yVec+zN*zVec;
+    if (Scalar > 0.)
+    {
+      ReparPoints(j) = 1;
+    }
+    else
+    {
+      ReparPoints(j) = 0;
+    }
+  }
+  
+  cout << "Init surface" << endl;
+  GeomPlate_BuildPlateSurface aBuilder(3,10);
+  GeomPlate_BuildPlateSurface aBuilder2(3,10);
+  // ** Initialization of surface
+  Handle(BRepAdaptor_HSurface) HSI = new BRepAdaptor_HSurface();
+  HSI->ChangeSurface().Initialize(aInitShape);
+  aBuilder.LoadInitSurface( BRep_Tool::Surface(HSI->ChangeSurface().Face()));
+  aBuilder2.LoadInitSurface( BRep_Tool::Surface(HSI->ChangeSurface().Face()));
+
+  for (j=j1; j<=j2 ; j++)
+  {
+    gp_Pnt aPnt = myListOfPoints->Value(j); 
+    Handle(GeomPlate_PointConstraint) PCont = new GeomPlate_PointConstraint(aPnt,0);
+    if (ReparPoints(j) = 1)
+    {
+      aBuilder.Add(PCont);
+    }
+    else
+    {
+      aBuilder2.Add(PCont);
+    }
+  }
+  cout << "avant Perform surface" << endl;
+  aBuilder.Perform();
+  cout << "Perform surface" << endl;
+
+  // 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());
+  GeomPlate_MakeApprox Mapp(gpPlate,0.0001,nbcarreau,degmax,seuil);
+  cout << "Approx surface" << endl;
+
+  Handle (Geom_Surface) Surf (Mapp.Surface());
+  aBuilder.Surface()->Bounds( Umin, Umax, Vmin, Vmax);
+  
+  BRepBuilderAPI_MakeFace MF(Surf,Umin, Umax, Vmin, Vmax, Precision::Confusion());
+  TopoDS_Shape aShapePartOne = MF.Shape();
+  
+  // Recuperation de la curve
+  //return (aShape);  
+
+  //Modification A.D (Incka)
+  return (aShapePartOne);
+}
+
+//=======================================================================
+//function : Execute
+//purpose  :
+//=======================================================================
+Standard_Integer GEOMImpl_SmoothingSurfaceDriver::Execute(TFunction_Logbook& log) const
+{
+  //double eps = 0.001;
+  if (Label().IsNull()) return 0;
+  Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
+  if (aFunction.IsNull()) return 0;
+
+  Standard_Integer aType = aFunction->GetType();
+  cout << "Type : " << aType << endl;
+
+  if (aType != SMOOTHINGSURFACE_POINTS_ISCLOSED) return 0;
+  cout << "Youhou : " << aType << endl;
+
+  GEOMImpl_ISmoothingSurface aData (aFunction);
+  
+  bool isClosed = aData.GetisClosed();
+  Standard_Integer nbPoints = aData.GetLength();
+
+  Handle(TColgp_HArray1OfPnt) anArrayofPnt = new TColgp_HArray1OfPnt(1,nbPoints);
+  for (int ind=1;ind<=nbPoints;ind++)
+  {
+    Handle(GEOM_Function) aPoint = aData.GetPoint(ind);
+    TopoDS_Shape aShapePnt = aPoint->GetValue();
+    TopoDS_Vertex dsPoint;
+    dsPoint = TopoDS::Vertex( aShapePnt );
+    gp_Pnt aPnt = BRep_Tool::Pnt( dsPoint );
+    anArrayofPnt->SetValue(ind,aPnt);
+  }
+  
+  TopoDS_Shape aShape;
+  if (isClosed) 
+  {   
+     aShape = GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceClosed(anArrayofPnt);
+  }
+  else
+  {
+     aShape = GEOMImpl_SmoothingSurfaceDriver::MakeSmoothingSurfaceUnClosed(anArrayofPnt);
+  }
+  if (aShape.IsNull()) return 0;
+
+  aFunction->SetValue(aShape);
+
+  log.SetTouched(Label());
+
+  return 1;
+}
+
+//=======================================================================
+//function :  GEOMImpl_SmoothingSurfaceDriver_Type_
+//purpose  :
+//=======================================================================
+Standard_EXPORT Handle_Standard_Type& GEOMImpl_SmoothingSurfaceDriver_Type_()
+{
+  static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver);
+  if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver);
+  static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared);
+  if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared);
+  static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient);
+  if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient);
+
+  static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL};
+  static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_SmoothingSurfaceDriver",
+                                                         sizeof(GEOMImpl_SmoothingSurfaceDriver),
+                                                         1,
+                                                         (Standard_Address)_Ancestors,
+                                                         (Standard_Address)NULL);
+  return _aType;
+}
+
+//=======================================================================
+//function : DownCast
+//purpose  :
+//=======================================================================
+const Handle(GEOMImpl_SmoothingSurfaceDriver) Handle(GEOMImpl_SmoothingSurfaceDriver)::DownCast(const Handle(Standard_Transient)& AnObject)
+{
+  Handle(GEOMImpl_SmoothingSurfaceDriver) _anOtherObject;
+
+  if (!AnObject.IsNull()) {
+     if (AnObject->IsKind(STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver))) {
+       _anOtherObject = Handle(GEOMImpl_SmoothingSurfaceDriver)((Handle(GEOMImpl_SmoothingSurfaceDriver)&)AnObject);
+     }
+  }
+
+  return _anOtherObject;
+}
diff --git a/src/GEOMImpl/GEOMImpl_SmoothingSurfaceDriver.hxx b/src/GEOMImpl/GEOMImpl_SmoothingSurfaceDriver.hxx
new file mode 100644 (file)
index 0000000..2d5fc85
--- /dev/null
@@ -0,0 +1,135 @@
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  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
+
+#ifndef _GEOMImpl_SmoothingSurfaceDriver_HXX
+#define _GEOMImpl_SmoothingSurfaceDriver_HXX
+
+#ifndef _TFunction_Driver_HeaderFile
+#include <TFunction_Driver.hxx>
+#endif
+#ifndef _TFunction_Logbook_HeaderFile
+#include <TFunction_Logbook.hxx>
+#endif
+#ifndef _Standard_CString_HeaderFile
+#include <Standard_CString.hxx>
+#endif
+#include <TColgp_HArray1OfPnt.hxx>
+#include <TopoDS_Shape.hxx>
+
+class Handle_Standard_Type;
+class GEOMImpl_SmoothingSurfaceDriver;
+
+Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver);
+
+class Handle(GEOMImpl_SmoothingSurfaceDriver) : public Handle(TFunction_Driver) {
+public:
+  inline void* operator new(size_t,void* anAddress) 
+  {
+    return anAddress;
+  }
+  inline void* operator new(size_t size) 
+  { 
+    return Standard::Allocate(size); 
+  }
+  inline void  operator delete(void *anAddress) 
+  { 
+    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+  }
+  
+  Handle(GEOMImpl_SmoothingSurfaceDriver)():Handle(TFunction_Driver)() {} 
+  Handle(GEOMImpl_SmoothingSurfaceDriver)(const Handle(GEOMImpl_SmoothingSurfaceDriver)& aHandle) : Handle(TFunction_Driver)(aHandle) 
+  {}
+
+  Handle(GEOMImpl_SmoothingSurfaceDriver)(const GEOMImpl_SmoothingSurfaceDriver* anItem) : Handle(TFunction_Driver)((TFunction_Driver *)anItem) 
+  {}
+
+  Handle(GEOMImpl_SmoothingSurfaceDriver)& operator=(const Handle(GEOMImpl_SmoothingSurfaceDriver)& aHandle)
+  {
+    Assign(aHandle.Access());
+    return *this;
+  }
+  
+  Handle(GEOMImpl_SmoothingSurfaceDriver)& operator=(const GEOMImpl_SmoothingSurfaceDriver* anItem)
+  {
+    Assign((Standard_Transient *)anItem);
+    return *this;
+  }
+  
+  GEOMImpl_SmoothingSurfaceDriver* operator->() 
+  {
+    return (GEOMImpl_SmoothingSurfaceDriver *)ControlAccess();
+  }
+  
+  GEOMImpl_SmoothingSurfaceDriver* operator->() const 
+  {
+    return (GEOMImpl_SmoothingSurfaceDriver *)ControlAccess();
+  }
+  
+  Standard_EXPORT ~Handle(GEOMImpl_SmoothingSurfaceDriver)() {};
+  
+  Standard_EXPORT static const Handle(GEOMImpl_SmoothingSurfaceDriver) DownCast(const Handle(Standard_Transient)& AnObject);
+};
+
+class GEOMImpl_SmoothingSurfaceDriver : public TFunction_Driver {
+public:
+  inline void* operator new(size_t,void* anAddress) 
+  {
+    return anAddress;
+  }
+  inline void* operator new(size_t size) 
+  { 
+    return Standard::Allocate(size); 
+  }
+  inline void  operator delete(void *anAddress) 
+  { 
+    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+  }
+  
+  // Methods PUBLIC
+  // 
+  Standard_EXPORT GEOMImpl_SmoothingSurfaceDriver();
+  Standard_EXPORT virtual  Standard_Integer Execute(TFunction_Logbook& log) const; 
+  Standard_EXPORT virtual void Validate(TFunction_Logbook&) const {}
+  Standard_EXPORT Standard_Boolean MustExecute(const TFunction_Logbook&) const
+  {
+    return Standard_True;
+  }
+  Standard_EXPORT static const Standard_GUID& GetID();
+  Standard_EXPORT ~GEOMImpl_SmoothingSurfaceDriver() {};
+  
+  // Type management
+  //
+  Standard_EXPORT friend Handle_Standard_Type& GEOMImpl_SmoothingSurfaceDriver_Type_();
+  Standard_EXPORT const Handle(Standard_Type)& DynamicType() const
+  {
+    return STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver);
+  }
+  Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const
+  {
+    return (STANDARD_TYPE(GEOMImpl_SmoothingSurfaceDriver) == AType || TFunction_Driver::IsKind(AType));
+  } 
+private:
+  TopoDS_Shape MakeSmoothingSurfaceUnClosed(Handle_TColgp_HArray1OfPnt myListOfPoints) const;
+  TopoDS_Shape MakeSmoothingSurfaceClosed(Handle_TColgp_HArray1OfPnt myListOfPoints) const;
+  
+};
+
+#endif // _GEOMImpl_SmoothingSurfaceDriver_HXX
index a18cd853c0d1d5df9234af36ea1a264844ff58c9..54d9070e7c0fefec623a5a6088882b368ac8b862 100755 (executable)
 // Advanced functions (base = 200)
 #define ADVANCED_BASE 200  // NO OPERATION (advanced operations base)
 #define GEOM_TSHAPE 201
+#define GEOM_SMOOTHINGSURFACE 202
 /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
 // Advanced functions sub-operations codes
 #define TSHAPE_BASIC 1
 #define TSHAPE_CHAMFER 2
 #define TSHAPE_FILLET 3
+#define SMOOTHINGSURFACE_POINTS_ISCLOSED 1
 /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/
index 5cb6822517e059b4066ec669d7ae2cb5afd80916..f7266c48e37e23567d124e7030a76a9424eb20ae 100644 (file)
@@ -144,6 +144,7 @@ salomeinclude_HEADERS =                             \
 
 ADVANCED_INCLUDES  =
 ADVANCED_INCLUDES += GEOMImpl_IPipeTShape.hxx GEOMImpl_PipeTShapeDriver.hxx
+ADVANCED_INCLUDES += GEOMImpl_ISmoothingSurface.hxx GEOMImpl_SmoothingSurfaceDriver.hxx
 ##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@##
 
 salomeinclude_HEADERS += $(ADVANCED_INCLUDES)
@@ -214,6 +215,7 @@ dist_libGEOMimpl_la_SOURCES =                       \
 
 ADVANCED_SOURCES  =
 ADVANCED_SOURCES += GEOMImpl_PipeTShapeDriver.cxx
+ADVANCED_SOURCES += GEOMImpl_SmoothingSurfaceDriver.cxx
 ##@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@##
 
 dist_libGEOMimpl_la_SOURCES += $(ADVANCED_SOURCES)
index 271c3cecb2841a9bda451ed90d8418a928233585..f7dfbccf76cfb4a7bf01eb5cd0a646a438b62eb6 100644 (file)
@@ -321,4 +321,37 @@ GEOM::ListOfGO* GEOM_IAdvancedOperations_i::MakePipeTShapeFilletWithPosition (CO
   return aSeq._retn();
 }
 
+//=============================================================================
+/*!
+ *  Create a smoothing surface from a set of points
+ *  \param thePoints list of points
+ *  \param theisClosed Define if the created surface must be closed
+ *  \return New GEOM_Object, containing the created shape.
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeSmoothingSurface (const GEOM::ListOfGO& thePoints, CORBA::Boolean theisClosed)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  //Get the reference point
+  int ind = 0;
+  int aLen = thePoints.length();
+  std::list<Handle(GEOM_Object)> aPoints;
+  for (; ind < aLen; ind++) {
+    Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]);
+    if (aPnt.IsNull()) return aGEOMObject._retn();
+    aPoints.push_back(aPnt);
+  }
+
+  //Create the SmoothingSurface
+  Handle(GEOM_Object) anObject = GetOperations()->MakeSmoothingSurface(aPoints, theisClosed);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 /*@@ insert new functions before this line @@ do not remove this line @@*/
index d0d3308c780607ccb5dd2a312e830fba8b8bf466..d05f787ddee0a723b14d27640ffbe80540f507bb 100644 (file)
@@ -63,6 +63,7 @@ class GEOM_I_EXPORT GEOM_IAdvancedOperations_i :
                                                    CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2, 
                                                    CORBA::Double theRF, CORBA::Boolean theHexMesh,
                                                    GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
+  GEOM::GEOM_Object_ptr MakeSmoothingSurface (const GEOM::ListOfGO& thePoints, CORBA::Boolean theisClosed);
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 
   ::GEOMImpl_IAdvancedOperations* GetOperations()
index e29a8faa9d1e37af1843eaa65b335e58b85e6b85..7d16df91f04b9052853d48691825ea7235502953 100644 (file)
@@ -3402,6 +3402,26 @@ GEOM::GEOM_List_ptr GEOM_Superv_i::MakePipeTShapeFilletWithPosition
   return aSeqPtr->_this();
 }
 
+//=============================================================================
+//  MakeSmoothingSurface
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSmoothingSurface (GEOM::GEOM_List_ptr thePoints, CORBA::Boolean theisClosed)
+{
+  beginService( " GEOM_Superv_i::MakeSmoothingSurface" );
+  MESSAGE("GEOM_Superv_i::MakeSmoothingSurface");
+  getAdvancedOp();
+  //GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeSmoothingSurface(thePoints, theisClosed);
+  if (GEOM_List_i<GEOM::ListOfGO>* aListImplP =
+      dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
+    getCurvesOp();
+    GEOM::GEOM_Object_ptr anObj = myAdvancedOp->MakeSmoothingSurface(aListImplP->GetList(), theisClosed);
+    endService( " GEOM_Superv_i::MakeSmoothingSurface" );
+    return anObj;
+  }
+  endService( " GEOM_Superv_i::MakeSmoothingSurface" );
+  return NULL;
+}
+
 /*@@ insert new functions before this line @@ do not remove this line @@*/
 
 //=====================================================================================
index 67ccd80ddacf8c8d16ce317ac3b1de37fe5e4e2a..65a2a93efd211a21af1afedcafeac9655e21f2d0 100644 (file)
@@ -703,6 +703,7 @@ public:
                                                         CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2,
                                                         CORBA::Double theRF, CORBA::Boolean theHexMesh,
                                                         GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
+  GEOM::GEOM_Object_ptr MakeSmoothingSurface (GEOM::GEOM_List_ptr thePoints, CORBA::Boolean theisClosed);
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 
 private:
index b072e7c736c38da0dde5951a679288214fd6db0d..6ee2af80241b8b569ea14c1628aed53ece253366 100644 (file)
@@ -8513,6 +8513,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             if Parameters: anObj[0].SetParameters(Parameters)
             return anObj
 
+        ## Create a smoothing surface from a set of points
+        #  @param thePoints list of points
+        #  @param theisClosed Define if the created surface must be closed
+        #  @return New GEOM_Object, containing the created shape.
+        #
+        #  @ref tui_creation_smoothingsurface "Example"
+        def MakeSmoothingSurface(self, thePoints, theisClosed):
+            thePoints, theisClosed, Parameters = ParseParameters(thePoints, theisClosed)
+            anObj = self.AdvOp.MakeSmoothingSurface(thePoints, theisClosed)
+            RaiseIfFailed("MakeSmoothingSurface", self.AdvOp)
+            if Parameters: anObj.SetParameters(Parameters)
+            return anObj
+
         #@@ insert new functions before this line @@ do not remove this line @@#
 
         # end of l4_advanced