Surface Filling: Difference between revisions

From FreeCAD Documentation
No edit summary
(Usage)
Line 37: Line 37:


<!--T:4-->
<!--T:4-->
# Press the {{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling|Surface filling]]}} button.
# Press the {{Button|[[File:Surface_Filling.svg|16px]] [[Surface_Filling|Filling]]}} button.
# Inside the {{MenuCommand|Boundary}} section, press {{Button|Add edge}}.
# The {{MenuCommand|Boundaries}} task panel opens. See [[#Options|Options]].
# Use the pointer to pick the desired edges in the [[3D_view|3D view]]; a preview of the final shape will be shown after selecting valid edges that form a closed contour.
# Select two or more edges in the [[3D_view|3D view]]:
#* Optionally, go to the {{MenuCommand|Curvature: non-boundary edges}} section, press {{Button|Add edge}}, and pick the desired edges from the [[3D_view|3D view]].
#* There is no need to press the {{Button|Add edge}} button in the {{MenuCommand|Boundaries}} section at this time.
#* A preview of the final shape will be shown if the selected geometry is valid.
#* Optionally, go to the {{MenuCommand|Curvature: non-boundary vertices}} section, press {{Button|Add vertex}}, and pick the desired vertices from the [[3D_view|3D view]].
#* For a 360° circular boundary two semicircular edges can be selected.
# Press {{Button|OK}} to complete the operation.
# Optionally select a {{MenuCommand|Support surface}}. See [[#Example|Example]].
# Optionally select one or more {{MenuCommand|Edge constraints}}.
# Optionally select one or more {{MenuCommand|Vertex constraints}}.
# Press {{Button|OK}} button.


==Options== <!--T:5-->
==Options== <!--T:5-->

Revision as of 18:52, 4 May 2022

Surface Filling

Menu location
Surface → Filling
Workbenches
Surface
Default shortcut
None
Introduced in version
0.17
See also
None

Description

Surface Filling creates a surface from a series of connected boundary edges. The surface can be further controlled by adding constraint edges, vertices and a support surface.

The base geometry can belong to 2D curves created with the Draft Workbench or the Sketcher Workbench, but can also belong to 3D solid objects such as those created with the Part Workbench or the PartDesign Workbench.

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

Usage

  1. Press the Filling button.
  2. The Boundaries task panel opens. See Options.
  3. Select two or more edges in the 3D view:
    • There is no need to press the Add edge button in the Boundaries section at this time.
    • A preview of the final shape will be shown if the selected geometry is valid.
    • For a 360° circular boundary two semicircular edges can be selected.
  4. Optionally select a Support surface. See Example.
  5. Optionally select one or more Edge constraints.
  6. Optionally select one or more Vertex constraints.
  7. Press OK button.

Options

  • Boundary section:
    • Add edge: press once to start picking Boundary edges in the 3D view. Straight edges such as Draft Wires and Sketcher Polylines, or curved edges such as Draft BSplines and Sketcher BSplines can be chosen, as well as any edge from solid objects, like those of PartDesign Bodies and 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 Points or 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.

Example

The Support surface option can be used to set an initial surface instead of the automatically generated one. The filled surface is computed by deformation of the support surface in order to satisfy the given constraints. The Support surface can also be an additional constraint for the final surface. To get an idea of what it's doing you can try this simple example:

  1. In the Part Workbench create a cylinder and set its DataAngle to 180°.
  2. Switch to the Surface Workbench and press the Surface Filling button.
  3. Select the two semi-circular edges and the two straight edges that connect them.
  4. The result matches the four boundary edges, but the inner shape is quite different from the cylindrical face.
  5. Edit the Surface object and for the Support surface select the cylindrical face.
  6. The modified shape matches the cylindrical face pretty well.

Limitations

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 DataBoundary Edges to that would result in several closed faces. In this case, those edges should be added as DataUnbound Edges to control the curvature only.
  • Using parametric DataBoundary Edges (for example, Draft BSplines) that when recomputed fail to produce a closed boundary. That is, the edges to be used as DataBoundary Edges must always form a closed shape, even if their internal properties change.

Properties

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.

Data

Filling

  • DataBoundary Edges (LinkSubList): boundary edges; C0 is required for edges without a corresponding face.
  • DataBoundary Faces (StringList):
  • DataBoundary Order (IntegerList): order of constraint on boundary faces; 0, 1, and 2 are possible.
  • DataUnbound Edges (LinkSubList): unbound constraint edges; C0 is required for edges without a corresponding face.
  • DataUnbound Faces (StringList):
  • DataUnbound Order (IntegerList): order of constraint on unbound faces; 0, 1, and 2 are possible.
  • DataFree Faces (LinkSubList): free constraint on a face.
  • DataFree Order (IntegerList): order of constraint on free faces.
  • DataPoints (LinkSubList): constraint points on surface.
  • DataInitial Face (LinkSub): initial surface to use.
  • DataDegree (Integer): starting degree, it defaults to 3.
  • DataPoints On Curve (Integer): number of points on an edge for constraint.
  • DataIterations (Integer): number of iterations, it defaults to 2.
  • DataAnisotropy (Bool): it defaults to false.
  • DataTolerance2d (Float): 2D tolerance, it defaults to 0.0.
  • DataTolerance3d (Float): 3D tolerance, it defaults to 0.0.
  • DataTol Angular (Float): G1 tolerance, it defaults to 0.01.
  • DataTol Curvature (Float): G2 tolerance, it defaults to 0.10.
  • DataMaximum Degree (Integer): maximum curve degree, it defaults to 8.
  • DataMaximum Segments (Integer): maximum number of segments, it defaults to 9.

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