Surface GeomFillSurface

From FreeCAD Documentation
Revision as of 04:24, 4 October 2020 by Vocx (talk | contribs) (→‎Twisting: Section on twisting of the surface)

This documentation is not finished. Please help and contribute documentation.

GuiCommand model explains how commands should be documented. Browse Category:UnfinishedDocu to see more incomplete pages like this one. See Category:Command Reference for all commands.

See WikiPages to learn about editing the wiki pages, and go to Help FreeCAD to learn about other ways in which you can contribute.

Surface GeomFillSurface

Menu location
Surface → Fill boundary curves
Workbenches
Surface
Default shortcut
None
Introduced in version
0.17
See also
None

Description

Surface GeomFillSurface creates a surface from two, three or four boundary edges, trying to create a smooth transition between them.

Left: edges that are used to generate a surface with the GeomFillSurface tool, 4 connected edges, 3 connected edges, and 2 disconnected edges. Right: resulting surface from using the 4, 3, and 2 edges, respectively.

Usage

  1. Press the Fill boundary curves button.
  2. Select edges in the 3D view. The edges must connect together so that they formed a closed profile.
  3. Press OK.

It is not possible to apply additional constraints to the created surface.

Twisting of the surface

The shape of the surface depends a lot on the direction of the chosen edges; if various edges are selected and the result is a surface that "twists" on itself, one of the edges may need its list of vertices in the reverse order.

For example, if two curves have the points

curve1 = [a, b, c, d]
curve2 = [e, f, g]

and the resulting surface after using GeomFillSurface or Sections is a twisted surface, you may create a third curve that is equal to one of the two original curves but with a reversed list of points.

Either

curve1 = [a, b, c, d]
curve3 = [g, f, e]

or

curve3 = [d, c, b, a]
curve2 = [e, f, g]

should work to generate a surface that doesn't twist.

In practical terms this means that all edges used to generate a surface should be created in the same clockwise or anti-clockwise direction. Following this simple rule usually guarantees that the surface will follow the smoothest direction and won't twist.

Options

Fill type: Stretch, Coons, or Curved.

Properties

A Surface GeomFillSurface (Surface::GeomFillSurface 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.

Data

Base

  • DataFill Type (Enumeration): the applied filling algorithm; Stretch, the style with the flattest patches; Coons, a rounded style with less depth than Curved; Curved, the style with the most rounded patches.
  • DataBoundary List (LinkSubList): a list of edges that will be used to build the surface.
  • Data ((hidden))Reversed List (BoolList):

View

Base

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

Scripting

See also: FreeCAD Scripting Basics.

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

  • The edges to be used to define the surface must be assigned as a LinkSubList to the BoundaryList property of the object.
  • The type of algorithm must be assigned like a string to the FillType property.
  • All objects with edges need to be computed before they can be used as input for the properties of the GeomFillSurface object.
import FreeCAD as App
import Draft

doc = App.newDocument()

a = App.Vector(-140, -100, 0)
b = App.Vector(175, -108, 0)
c = App.Vector(200, 101, 0)
d = App.Vector(-135, 107, 70)

points1 = [a, App.Vector(-55, -91, 65), App.Vector(35, -85, -5), b]
obj1 = Draft.make_bspline(points1)

points2 = [b, App.Vector(217, -45, 55), App.Vector(217, 35, -15), c]
obj2 = Draft.make_bspline(points2)

points3 = [c, App.Vector(33, 121, 55), App.Vector(0, 91, 15), App.Vector(-80, 121, -40), d]
obj3 = Draft.make_bspline(points3)

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

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