Surface Filling

From FreeCAD Documentation
Jump to navigation Jump to search
This page is a translated version of the page Surface Filling and the translation is 14% complete.
Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎français • ‎hrvatski • ‎italiano • ‎polski • ‎română

Filling.svg Surface Filling

Menu location
Surface → Filling...
Default shortcut
Introduced in version
See also


Surface Filling.svg Surface Filling creates a surface from a series of connected boundary edges.

The surface can be modified by adding constraint edges and vertices which the surface must pass through.

Surface Filling example.png

Example of a filled surface, delimited by four edges located in the XY plane; (left) only the four edges, and (right) one additional curve in space that defines the curvature of the surface

Cum se folosește

  1. apăsați butonul Filling.svg Surface filling... button.
  2. Detalierea pașilor este necesară.
  3. Definiți opțiunile și apăsați OK.

The base edges that form the closed contour, as well as the auxiliary vertices and edges, can belong to 2D curves from Workbench Draft.svg Draft or the Workbench Sketcher.svg Sketcher, but can also belong to 3D solid objects such as those created with the Workbench Part.svg Part or Workbench PartDesign.svg PartDesign Workbenches.


  • Boundary section:
    • Add edge: press once to start picking Boundary edges in the 3D view. Straight edges such as Draft Wire.svg Draft Wires and Sketcher CreatePolyline.svg Sketcher Polylines, or curved edges such as Draft BSpline.svg Draft BSplines and Sketcher CreateBSpline.svg Sketcher BSplines can be chosen, as well as any edge from solid objects, like those of PartDesign Body.svg PartDesign Bodies and Part Primitives.svg Part Primitives.
    • Remove edge: press once to start picking edges in the 3D view; these edges must have been previously picked with Add edge.
    • Right mouse button: open the context menu and select Remove, or press Del in the keyboard, to remove the currently selected edge in the list.
  • Curvature: non-boundary edges section; the Add edge button is available to pick auxiliary edges (straight lines or B-Splines) to control the curvature of the surface. The surface will be forced to pass through these auxiliary edges. This works best when the auxiliary edges lie inside the region delimited by the Boundary edges.
  • Curvature: non-boundary vertices section; similar to the non-boundary edges, the user can pick auxiliary vertices to control the curvature. These vertices may be free standing Draft Point.svg Draft Points or Part Point.svg Part Points, or may belong to any edge (straight lines or B-Splines), or be a corner vertex in a solid object. In this case, the surface will be constrained to pass through these auxiliary points.
  • Press Cancel or Esc to abort the current operation.


A Surface Filling (Surface::Filling class) is derived from the basic Part Feature (Part::Feature class, through the Part::Spline subclass), therefore it shares all the latter's properties.

In addition to the properties described in Part Feature, the Surface Filling has the following properties in the property editor.



  • DateProperty: descrierea proprietăților
  • VizualizareProperty: descrierea proprietăților



  • VizualizareControl Points (Bool): it defaults to false; if set to true, it will show an overlay with the control points of the surface.


The surface code from the internal OpenCASCADE modelling kernel is fragile, and cannot handle wrong input properly. The following situations may cause problems, and may crash the program, so they should be avoided:

  • Adding DateBoundary Edges to that would result in several closed faces. In this case, those edges should be added as DateUnbound Edges to control the curvature only.
  • Using parametric DateBoundary Edges (for example, Draft BSpline.svg Draft BSplines) that when recomputed fail to produce a closed boundary. That is, the edges to be used as DateBoundary Edges must always form a closed shape, even if their internal properties change.


See also: FreeCAD Scripting Basics.

The Surface Filling tool can be used in macros and from the Python console by adding the Surface::Filling object.

  • The edges to be used to define the surface must be assigned as a LinkSubList to the BoundaryEdges property of the object.
  • Auxiliary edges and vertices must be assigned as a LinkSubLists to the UnboundEdges and Points properties of the object.
  • All objects with edges need to be computed before they can be used as input for the properties of the Filling object.
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)

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

# ---------------------------------------------------------
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)

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

# ---------------------------------------------------------
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))

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