Surface Filling/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "Surface Remplissage (classe {{incode|Surface::Filling}}) est dérivée de la classe de base Part Feature (classe {{incode|Part::Feat...")
No edit summary
 
(56 intermediate revisions by 2 users not shown)
Line 1: Line 1:
<languages/>
<languages/>

{{UnfinishedDocu{{#translation:}}}}
{{Docnav/fr
{{Docnav/fr
|
|
|[[Surface_GeomFillSurface/fr|Remplir entre les courbes limites]]
|[[Surface_GeomFillSurface/fr|Remplir entre les courbes limites]]
|[[Surface_Module/fr|Surface]]
|[[Surface_Workbench/fr|Surface]]
|IconL=
|IconL=
|IconR=Surface_GeomFillSurface.svg
|IconC=Workbench_Surface.svg
|IconC=Workbench_Surface.svg
|IconR=BSplineSurf.svg
}}
}}


{{GuiCommand/fr
{{GuiCommand/fr
|Icon=Filling.svg
|Name=Surface Filling
|Name=Surface Filling
|Name/fr=Surface Remplissage
|Name/fr=Surface Remplissage
|MenuLocation=Surface → Filling...
|MenuLocation=Surface → Filling...
|Workbenches=[[Surface_Module/fr|Surface]]
|Workbenches=[[Surface_Workbench/fr|Surface]]
|Version=0.17
|Version=0.17
}}
}}
Line 21: Line 20:
==Description==
==Description==


{{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling/fr|Surface Remplissage]]}} crée une surface à partir d'une série d'arêtes limites connectées.
{{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling/fr|Surface Remplissage]]}} crée une surface à partir d'une série d'arêtes de délimitation connectées. La courbure de la surface peut être contrôlée en outre par des bords et des sommets non délimités, ainsi que par une surface de support.


La géométrie de base peut appartenir à des courbes créées avec l'[[Draft_Workbench/fr|atelier Draft]] ou l'[[Sketcher_Workbench/fr|atelier Sketcher]], mais aussi à des objets solides tels que ceux créés avec l'[[Part_Workbench/fr|atelier Part]] ou l'[[PartDesign_Workbench/fr|atelier PartDesign]].
La surface peut être modifiée en ajoutant des arêtes et des sommets de contrainte que la surface doit traverser.


[[Image:Surface_Filling_example.png|600px]]
[[Image:Surface_Filling_example.png|600px]]
{{Caption|Deux surfaces remplies délimitées par quatre arêtes situées sur le plan XY. La surface de droite est en plus contrôlée par une arête non délimitée.}}


<span id="Usage"></span>
{{Caption|Exemple de surface remplie, délimitée par quatre arêtes situées dans le plan XY; (à gauche) uniquement les quatre arêtes et (à droite) une courbe supplémentaire dans l'espace définissant la courbure de la surface}}

==Utilisation==
==Utilisation==


# Appuyez sur le bouton {{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling/fr|Remplissage]]}}.
# Assurez-vous d'avoir au moins trois arêtes ou courbes dans l'espace formant un contour fermé. Par exemple, ceux-ci peuvent être créés avec des outils de l'[[File:Workbench_Draft.svg|24px]] [[Draft_Module/fr|atelier Draft]] ou de l' [[File:Workbench_Sketcher.svg|24px]] [[Sketcher_Workbench/fr|atelier Sketcher]] . L'utilisation de trois arêtes créerait une surface triangulaire; quatre arêtes une surface quadrilatérale.
# Le panneau de tâches {{MenuCommand|Boundaries}} s'ouvre. Voir [[#Options|Options]].
#* En option, les courbes peuvent être dessinées à l'intérieur du contour fermé, sans nécessairement toucher les bords. Ces courbes peuvent être utilisées pour contrôler la courbure de la surface résultante.
# Sélectionnez deux ou plusieurs bords dans la [[3D_view/fr|Vue 3D]] :
#* De même, un certain nombre de sommets peuvent être utilisés dans le même but pour indiquer où la surface doit passer.
#* Il n'est pas nécessaire d'appuyer sur le bouton {{Button|Ajouter une arête}} dans la section {{MenuCommand|Limites}} à ce moment-là.
# Appuyez sur le bouton {{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling/fr|Surface fill]]}}.
#* Les arêtes doivent être sélectionnées dans un ordre consécutif.
# Dans la section {{MenuCommand|Filling}}, appuyez sur {{Button|Add edge}}.
#* Les arêtes doivent être connectées, mais la frontière complète ne doit pas nécessairement être fermée.
# Utilisez le pointeur pour sélectionner les arêtes souhaitées dans la [[3D_view/fr|Vue 3D]]. Un aperçu de la forme finale sera affiché après avoir sélectionné des arêtes valides qui forment un contour fermé.
#* Le contour complet ne doit pas s'auto-intersecter.
#* Facultativement, pour contrôler la courbure de la surface, allez dans la section {{MenuCommand|Unbound bords}}, appuyez sur {{Button|Add edge}}, et choisissez les arêtes souhaitées dans la [[3D_view/fr|Vue 3D]] .
#* Pour un contour circulaire de 360°, deux bords semi-circulaires peuvent être sélectionnés.
#* Facultativement, pour contrôler la courbure au moyen de sommets, allez dans la section {{MenuCommand|Vertices}}, appuyez sur {{Button|Add vertex}}, et choisissez les sommets désirés dans la [[3D_view/fr|Vue 3D]] .
# Un aperçu de la forme finale s'affiche dès qu'un nombre suffisant de géométries valides a été sélectionné.
# Appuyez sur {{Button|OK}} pour terminer l'opération.
# Optionnellement, sélectionnez une {{MenuCommand|Support surface}}. Voir [[#Exemple|Exemple]].

# Sélectionnez éventuellement une ou plusieurs {{MenuCommand|Contraintes d'arête}}.
Les arêtes de base qui forment le contour fermé, ainsi que les sommets et arêtes auxiliaires, peuvent appartenir à des courbes 2D de [[File:Workbench_Draft.svg|24px]] [[Draft_Module/fr|Draft]] ou de [[File:Workbench_Sketcher.svg|24px]] [[Sketcher_Workbench/fr|Sketcher]] mais peut également appartenir à des objets solides 3D tels que ceux créés avec [[File:Workbench_Part.svg|24px]] [[Part_Module/fr|Part]] ou [[File:Workbench_PartDesign.svg|24px]] [[PartDesign_Workbench/fr|PartDesign]].
# Sélectionnez éventuellement une ou plusieurs {{MenuCommand|Contraintes de vertices}}.
# Appuyez sur le bouton {{Button|OK}}.


==Options==
==Options==


* Dans la section {{MenuCommand|Filling}}.
* Dans la section {{MenuCommand|Limites}}, vous pouvez spécifier une surface de support et les bords des limites :
** Appuyez sur le bouton {{Button|Surface de support}} et sélectionnez une face dans la [[3D_view/fr|Vue 3D]] pour ajouter une surface de support.
** {{Button|Add edge}}: appuyez une fois pour commencer à sélectionner les arêtes dans la [[3D_view/fr|Vue 3D]]. Les lignes individuelles telles que {{Button|[[File:Draft_BSpline.svg|16px]] [[Draft_BSpline/fr|Draft BSplines]]}} et {{Button|[[File:Sketcher_CreateBSpline.svg|16px]] [[Sketcher_CreateBSpline/fr|Sketcher BSplines]]}} peuvent être choisies ainsi que n'importe quelle arête des objets solides, comme ceux des {{Button|[[File:PartDesign_Body.svg|16px]] [[PartDesign_Body/fr|PartDesign Corps]]}} et des {{Button|[[File:Part_Primitives.svg|16px]] [[Part_Primitives/fr|Part Primitives]]}}.
*** Cliquez sur l'icône [[File:Edit-cleartext.svg|16px]] pour supprimer la surface de support.
** {{Button|Remove edge}}: appuyez une fois pour commencer à choisir les arêtes dans la [[3D_view/fr|Vue 3D]]. Celles-ci doivent être des arêtes précédemment sélectionnées avec {{Button|Add edge}}.
** Appuyez une fois sur le bouton {{Button|Ajouter une arête}} pour commencer à sélectionner les arêtes de délimitation dans la [[3D_view/fr|Vue 3D]].
* {{KEY|Right mouse button}}: ouvrez le menu contextuel et sélectionnez {{Button|Remove}} ou appuyez sur {{KEY|Suppr}} au clavier pour supprimer le bord actuellement sélectionné dans la liste.
** Il existe plusieurs façons de désélectionner les arêtes de délimitation :
*** Appuyez une fois sur le bouton {{Button|Supprimer l'arête}} pour commencer à désélectionner les arêtes dans la [[3D_view/fr|Vue 3D]].
*** Sélectionnez un bord dans la liste et appuyez sur {{KEY|Supprimer}}.
*** Cliquez avec le bouton droit de la souris sur un bord de la liste et sélectionnez {{MenuCommand|Remove}} dans le menu contextuel.


* Dans la section {{MenuCommand|Contraintes d'arêtes}}, il est possible de spécifier des arêtes non limites :
** Les options de sélection sont similaires à celles des arêtes limites.


* Dans la section {{MenuCommand|Contraintes de sommets}}, il est possible de spécifier des sommets non-bornés :
* Dans la section {{MenuCommand|Unbound Edges}}, des boutons similaires {{Button|Add edge}} et {{Button|Remove edge}} sont disponibles pour sélectionner des arêtes de support afin de contrôler la courbure de la surface d'origine.
** Les options de sélection sont similaires à celles des arêtes limites.
* Dans la section {{MenuCommand|Filling}}, des boutons similaires {{Button|Add vertex}} et {{Button|Remove vertex}} sont disponibles, dans ce cas pour sélectionner les sommets de support.
* Appuyez sur {{Button|Cancel}} ou {{KEY|Echap}} pour abandonner l'opération en cours.


* Appuyez sur {{KEY|Echap}} ou sur le bouton {{Button|Annuler}} pour annuler l'opération.

<span id="Example"></span>
== Exemple ==

{{MenuCommand|Support surface}} agit comme une contrainte supplémentaire pour la surface. L'exemple simple suivant vous donnera une idée de la façon dont cela fonctionne :

# Dans l'[[File:Workbench_Part.svg|16px]] [[Part_Workbench/fr|atelier Part]], créez un [[File:Part_Cylinder.svg|16px]][[Part_Cylinder/fr|cylindre]] et définissez {{PropertyData|Angle}} à {{Value|180°}}.
# Passez à l'[[File:Workbench_Surface.svg|16px]] [[Surface_Workbench/fr|atelier Surface]] et appuyez sur {{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling/fr|Remplissage]]}}.
# Sélectionnez les deux bords semi-circulaires et les deux bords droits qui les relient.
# Le résultat correspond aux quatre arêtes limites, mais la forme intérieure est très différente de la face cylindrique.
# Editez l'objet Surface et pour la {{MenuCommand|Support surface}} sélectionnez la face cylindrique.
# La forme modifiée correspond beaucoup mieux à la face cylindrique.

<span id="Properties"></span>
==Propriétés==
==Propriétés==


[[Surface_Filling/fr|Surface Remplissage]] (classe {{incode|Surface::Filling}}) est dérivée de la classe de base [[Part_Feature/fr|Part Feature]] (classe {{incode|Part::Feature}} via la sous-classe {{incode|Part::Spline}}), elle partage donc toutes les propriétés de cette dernière.
[[Surface_Filling/fr|Surface Remplissage]] (classe {{incode|Surface::Filling}}) est dérivée de la classe de base [[Part_Feature/fr|Part Feature]] (classe {{incode|Part::Feature}} via la sous-classe {{incode|Part::Spline}}), elle partage donc toutes les propriétés de cette dernière.


In addition to the properties described in [[Part_Feature|Part Feature]], the Surface Filling has the following properties in the [[property_editor|property editor]].
Outre les propriétés décrites dans [[Part_Feature/fr|Part Feature]], Surface Remplissage a les propriétés suivantes dans l'[[Property_editor/fr|éditeur de propriétés]].


<span id="Data"></span>
=== Data ===
===Données===


{{TitleProperty|Filling}}
{{TitleProperty|Filling}}


* {{PropertyData/fr|Boundary Edges|LinkSubList}}: bords de frontière; C0 est requis pour les arêtes sans face correspondante.
<div class="mw-translate-fuzzy">
* {{PropertyData/fr|Property}}: description de la propriété
* {{PropertyData/fr|Boundary Faces|StringList}}:
* {{PropertyData/fr|Boundary Order|IntegerList}}: ordre de contrainte sur les faces limites; {{Value|0}}, {{Value|1}} et {{Value|2}} sont possibles.
* {{PropertyView/fr|Property}}: description de la propriété
* {{PropertyData/fr|Bords non liés|LinkSubList}}: bords de contrainte non liés; C0 est requis pour les arêtes sans face correspondante.
</div>
* {{PropertyData/fr|Unbound Faces|StringList}}:
* {{PropertyData/fr|Unbound Order|IntegerList}}: ordre de contrainte sur les faces non liées; {{Value|0}}, {{Value|1}} et {{Value|2}} sont possibles.
* {{PropertyData/fr|Free Faces|LinkSubList}}: contrainte libre sur une face.
* {{PropertyData/fr|Free Order|IntegerList}}: ordre de contrainte sur les faces libres.
* {{PropertyData/fr|Points|LinkSubList}}: points de contrainte sur la surface.
* {{PropertyData/fr|Initial Face|LinkSub}}: surface initiale à utiliser.
* {{PropertyData/fr|Degree|Integer}}: degré de départ, la valeur par défaut est {{Value|3}}.
* {{PropertyData/fr|Points On Curve|Integer}}: nombre de points sur une arête pour la contrainte.
* {{PropertyData/fr|Iterations|Integer}}: nombre d'itérations, la valeur par défaut est {{Value|2}}.
* {{PropertyData/fr|Anisotropy|Bool}}: il vaut par défaut {{FALSE}}.
* {{PropertyData/fr|Tolerance2d|Float}}: tolérance 2D, la valeur par défaut est {{Value|0.0}}.
* {{PropertyData/fr|Tolerance3d|Float}}: tolérance 3D, la valeur par défaut est {{Value|0.0}}.
* {{PropertyData/fr|Tol Angular|Float}}: tolérance G1, la valeur par défaut est {{Value|0.01}}.
* {{PropertyData/fr|Tol Curvature|Float}}: tolérance G2, la valeur par défaut est {{Value|0.10}}.
* {{PropertyData/fr|Maximum Degree|Integer}}: degré maximum de la courbe, la valeur par défaut est {{Value|8}}.
* {{PropertyData/fr|Maximum Segments|Integer}}: nombre maximum de segments, la valeur par défaut est {{Value|9}}.


<span id="View"></span>
=== View ===
=== Vue ===


{{TitleProperty|Base}}
{{TitleProperty|Base}}


* {{PropertyView|Control Points|Bool}}: it defaults to {{FALSE}}; if set to {{TRUE}}, it will show an overlay with the control points of the surface.
* {{PropertyView|Control Points|Bool}}: par défaut {{FALSE}}. Mis à {{TRUE}}, elle affichera une superposition avec les points de contrôle de la surface.


== Scripting ==
<span id="Scripting"></span>
== Script ==


{{Emphasis|See also:}} [[FreeCAD_Scripting_Basics|FreeCAD Scripting Basics]].
{{Emphasis|Voir aussi:}} [[FreeCAD_Scripting_Basics/fr|FreeCAD Script de base]].


The Surface Filling tool can be used in [[macros|macros]] and from the [[Python|Python]] console by adding the {{incode|Surface::Filling}} object.
L'outil Remplissage de Surface peut être utilisé dans [[Macros/fr|macros]] et depuis la console [[Python/fr|Python]] en ajoutant l'objet {{incode|Surface :: Filling}}.
* The edges to be used to define the surface must be assigned as a [[LinkSubList|LinkSubList]] to the {{incode|BoundaryEdges}} property of the object.
* Les arêtes à utiliser pour définir la surface doivent être affectées en tant que [[LinkSubList/fr|LinkSubList]] à la propriété {{incode|BoundaryEdges}} de l'objet.
* Auxiliary edges and vertices must be assigned as a [[LinkSubList|LinkSubLists]] to the {{incode|UnboundEdges}} and {{incode|Points}} properties of the object.
* Les arêtes et les sommets auxiliaires doivent être affectés en tant que [[LinkSubList/fr|LinkSubLists]] aux propriétés {{incode|UnboundEdges}} et {{incode|Points}} de l'objet.
* Tous les objets avec des arêtes doivent être calculés avant de pouvoir être utilisés comme entrée pour les propriétés de l'objet Filling.
* All objects with edges need to be computed before they can be used as input for the properties of the Filling object.


{{Code|code=
{{Code|code=
Line 139: Line 179:
doc.recompute()
doc.recompute()
}}
}}



{{Docnav/fr
{{Docnav/fr
|
|
|[[Surface_GeomFillSurface/fr|Remplir entre les courbes limites]]
|[[Surface_GeomFillSurface/fr|Remplir entre les courbes limites]]
|[[Surface_Module/fr|Surface]]
|[[Surface_Workbench/fr|Surface]]
|IconL=
|IconL=
|IconR=Surface_GeomFillSurface.svg
|IconC=Workbench_Surface.svg
|IconC=Workbench_Surface.svg
|IconR=BSplineSurf.svg
}}
}}


{{Surface Tools navi{{#translation:}}}}
{{Surface Tools navi{{#translation:}}}}
{{Userdocnavi{{#translation:}}}}
{{Userdocnavi{{#translation:}}}}
{{clear}}

Latest revision as of 20:59, 2 June 2023

Other languages:

Surface Remplissage

Emplacement du menu
Surface → Filling...
Ateliers
Surface
Raccourci par défaut
Aucun
Introduit dans la version
0.17
Voir aussi
Aucun

Description

Surface Remplissage crée une surface à partir d'une série d'arêtes de délimitation connectées. La courbure de la surface peut être contrôlée en outre par des bords et des sommets non délimités, ainsi que par une surface de support.

La géométrie de base peut appartenir à des courbes créées avec l'atelier Draft ou l'atelier Sketcher, mais aussi à des objets solides tels que ceux créés avec l'atelier Part ou l'atelier PartDesign.

Deux surfaces remplies délimitées par quatre arêtes situées sur le plan XY. La surface de droite est en plus contrôlée par une arête non délimitée.

Utilisation

  1. Appuyez sur le bouton Remplissage.
  2. Le panneau de tâches Boundaries s'ouvre. Voir Options.
  3. Sélectionnez deux ou plusieurs bords dans la Vue 3D :
    • Il n'est pas nécessaire d'appuyer sur le bouton Ajouter une arête dans la section Limites à ce moment-là.
    • Les arêtes doivent être sélectionnées dans un ordre consécutif.
    • Les arêtes doivent être connectées, mais la frontière complète ne doit pas nécessairement être fermée.
    • Le contour complet ne doit pas s'auto-intersecter.
    • Pour un contour circulaire de 360°, deux bords semi-circulaires peuvent être sélectionnés.
  4. Un aperçu de la forme finale s'affiche dès qu'un nombre suffisant de géométries valides a été sélectionné.
  5. Optionnellement, sélectionnez une Support surface. Voir Exemple.
  6. Sélectionnez éventuellement une ou plusieurs Contraintes d'arête.
  7. Sélectionnez éventuellement une ou plusieurs Contraintes de vertices.
  8. Appuyez sur le bouton OK.

Options

  • Dans la section Limites, vous pouvez spécifier une surface de support et les bords des limites :
    • Appuyez sur le bouton Surface de support et sélectionnez une face dans la Vue 3D pour ajouter une surface de support.
      • Cliquez sur l'icône pour supprimer la surface de support.
    • Appuyez une fois sur le bouton Ajouter une arête pour commencer à sélectionner les arêtes de délimitation dans la Vue 3D.
    • Il existe plusieurs façons de désélectionner les arêtes de délimitation :
      • Appuyez une fois sur le bouton Supprimer l'arête pour commencer à désélectionner les arêtes dans la Vue 3D.
      • Sélectionnez un bord dans la liste et appuyez sur Supprimer.
      • Cliquez avec le bouton droit de la souris sur un bord de la liste et sélectionnez Remove dans le menu contextuel.
  • Dans la section Contraintes d'arêtes, il est possible de spécifier des arêtes non limites :
    • Les options de sélection sont similaires à celles des arêtes limites.
  • Dans la section Contraintes de sommets, il est possible de spécifier des sommets non-bornés :
    • Les options de sélection sont similaires à celles des arêtes limites.
  • Appuyez sur Echap ou sur le bouton Annuler pour annuler l'opération.

Exemple

Support surface agit comme une contrainte supplémentaire pour la surface. L'exemple simple suivant vous donnera une idée de la façon dont cela fonctionne :

  1. Dans l' atelier Part, créez un cylindre et définissez DonnéesAngle à 180°.
  2. Passez à l' atelier Surface et appuyez sur Remplissage.
  3. Sélectionnez les deux bords semi-circulaires et les deux bords droits qui les relient.
  4. Le résultat correspond aux quatre arêtes limites, mais la forme intérieure est très différente de la face cylindrique.
  5. Editez l'objet Surface et pour la Support surface sélectionnez la face cylindrique.
  6. La forme modifiée correspond beaucoup mieux à la face cylindrique.

Propriétés

Surface Remplissage (classe Surface::Filling) est dérivée de la classe de base Part Feature (classe Part::Feature via la sous-classe Part::Spline), elle partage donc toutes les propriétés de cette dernière.

Outre les propriétés décrites dans Part Feature, Surface Remplissage a les propriétés suivantes dans l'éditeur de propriétés.

Données

Filling

  • DonnéesBoundary Edges (LinkSubList): bords de frontière; C0 est requis pour les arêtes sans face correspondante.
  • DonnéesBoundary Faces (StringList):
  • DonnéesBoundary Order (IntegerList): ordre de contrainte sur les faces limites; 0, 1 et 2 sont possibles.
  • DonnéesBords non liés (LinkSubList): bords de contrainte non liés; C0 est requis pour les arêtes sans face correspondante.
  • DonnéesUnbound Faces (StringList):
  • DonnéesUnbound Order (IntegerList): ordre de contrainte sur les faces non liées; 0, 1 et 2 sont possibles.
  • DonnéesFree Faces (LinkSubList): contrainte libre sur une face.
  • DonnéesFree Order (IntegerList): ordre de contrainte sur les faces libres.
  • DonnéesPoints (LinkSubList): points de contrainte sur la surface.
  • DonnéesInitial Face (LinkSub): surface initiale à utiliser.
  • DonnéesDegree (Integer): degré de départ, la valeur par défaut est 3.
  • DonnéesPoints On Curve (Integer): nombre de points sur une arête pour la contrainte.
  • DonnéesIterations (Integer): nombre d'itérations, la valeur par défaut est 2.
  • DonnéesAnisotropy (Bool): il vaut par défaut false.
  • DonnéesTolerance2d (Float): tolérance 2D, la valeur par défaut est 0.0.
  • DonnéesTolerance3d (Float): tolérance 3D, la valeur par défaut est 0.0.
  • DonnéesTol Angular (Float): tolérance G1, la valeur par défaut est 0.01.
  • DonnéesTol Curvature (Float): tolérance G2, la valeur par défaut est 0.10.
  • DonnéesMaximum Degree (Integer): degré maximum de la courbe, la valeur par défaut est 8.
  • DonnéesMaximum Segments (Integer): nombre maximum de segments, la valeur par défaut est 9.

Vue

Base

  • VueControl Points (Bool): par défaut false. Mis à true, elle affichera une superposition avec les points de contrôle de la surface.

Script

Voir aussi: FreeCAD Script de base.

L'outil Remplissage de Surface peut être utilisé dans macros et depuis la console Python en ajoutant l'objet Surface :: Filling.

  • Les arêtes à utiliser pour définir la surface doivent être affectées en tant que LinkSubList à la propriété BoundaryEdges de l'objet.
  • Les arêtes et les sommets auxiliaires doivent être affectés en tant que LinkSubLists aux propriétés UnboundEdges et Points de l'objet.
  • Tous les objets avec des arêtes doivent être calculés avant de pouvoir être utilisés comme entrée pour les propriétés de l'objet Filling.
import FreeCAD as App
import Draft

doc = App.newDocument()

a = App.Vector(-20, -20, 0)
b = App.Vector(-18, 25, 0)
c = App.Vector(60, 26, 0)
d = App.Vector(33, -20, 0)

points1 = [a, App.Vector(-20, -8, 0), App.Vector(-17, 7, 0), b]
obj1 = Draft.make_bspline(points1)

points2 = [b, App.Vector(0, 25, 0), c]
obj2 = Draft.make_bspline(points2)

points3 = [c, App.Vector(37, 4, 0), d]
obj3 = Draft.make_bspline(points3)

points4 = [d, App.Vector(-2, -18, 0), a]
obj4 = Draft.make_bspline(points4)
doc.recompute()

surf = doc.addObject("Surface::Filling", "Surface")
surf.BoundaryEdges = [(obj1, "Edge1"),
                      (obj2, "Edge1"),
                      (obj3, "Edge1"),
                      (obj4, "Edge1")]
doc.recompute()

# ---------------------------------------------------------
points_spl = [App.Vector(-10, 0, 2),
              App.Vector(4, 0, 7),
              App.Vector(18, 0, -5),
              App.Vector(25, 0, 0),
              App.Vector(30, 0, 0)]
aux_edge = Draft.make_bspline(points_spl)
doc.recompute()

surf.UnboundEdges = [(aux_edge, "Edge1")]
doc.recompute()

# ---------------------------------------------------------
aux_v1 = Draft.make_line(App.Vector(-13, -12, 5),
                         App.Vector(-13, -12, -5))
aux_v2 = Draft.make_line(App.Vector(-3, 18, 5),
                         App.Vector(-3, 18, -5))
doc.recompute()

surf.Points = [(aux_v1, "Vertex2"),
               (aux_v2, "Vertex1")]
doc.recompute()