Powierzchnia 3D: Wypełnianie
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 modified by adding constraint edges and vertices which the surface must pass through.
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
- Make sure you have at lease three edges or curves in space forming a closed contour. For example, these can be created with tools of the Draft Workbench or the Sketcher. Using three edges would create a triangular surface; four edges a quadrilateral surface.
- Optionally, curves can be drawn inside the closed contour, not necessarily touching the edges. These curves can be used to control the curvature of the resulting surface.
- Likewise, a number of vertices can be used with the same purpose to indicate where the surface must go through.
- Press the Surface filling button.
- Inside the Boundary section, press Add edge.
- Use the pointer to pick the desired edges in the 3D view; a preview of the final shape will be shown after selecting valid edges that form a closed contour.
- Press OK to complete the operation.
The base edges that form the closed contour, as well as the auxiliary vertices and edges, can belong to 2D curves from Draft or the Sketcher, but can also belong to 3D solid objects such as those created with the Part or PartDesign Workbenches.
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.
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
- DANEBoundary Edges (
LinkSubList
): boundary edges; C0 is required for edges without a corresponding face. - DANEBoundary Faces (
StringList
): - DANEBoundary Order (
IntegerList
): order of constraint on boundary faces;0
,1
, and2
are possible. - DANEUnbound Edges (
LinkSubList
): unbound constraint edges; C0 is required for edges without a corresponding face. - DANEUnbound Faces (
StringList
): - DANEUnbound Order (
IntegerList
): order of constraint on unbound faces;0
,1
, and2
are possible. - DANEFree Faces (
LinkSubList
): free constraint on a face. - DANEFree Order (
IntegerList
): order of constraint on free faces. - DANEPoints (
LinkSubList
): constraint points on surface. - DANEInitial Face (
LinkSub
): initial surface to use. - DANEDegree (
Integer
): starting degree, it defaults to3
. - DANEPoints On Curve (
Integer
): number of points on an edge for constraint. - DANEIterations (
Integer
): number of iterations, it defaults to2
. - DANEAnisotropy (
Bool
): it defaults tofalse
. - DANETolerance2d (
Float
): 2D tolerance, it defaults to0.0
. - DANETolerance3d (
Float
): 3D tolerance, it defaults to0.0
. - DANETol Angular (
Float
): G1 tolerance, it defaults to0.01
. - DANETol Curvature (
Float
): G2 tolerance, it defaults to0.10
. - DANEMaximum Degree (
Integer
): maximum curve degree, it defaults to8
. - DANEMaximum Segments (
Integer
): maximum number of segments, it defaults to9
.
View
Base
- WIDOKControl Points (
Bool
): it defaults tofalse
; if set totrue
, it will show an overlay with the control points of the surface.
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 DANEBoundary Edges to that would result in several closed faces. In this case, those edges should be added as DANEUnbound Edges to control the curvature only.
- Using parametric DANEBoundary Edges (for example, Draft BSplines) that when recomputed fail to produce a closed boundary. That is, the edges to be used as DANEBoundary Edges must always form a closed shape, even if their internal properties change.
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
andPoints
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()
- Jak zacząć
- Instalacja: Pobieranie programu, Windows, Linux, Mac, Dodatkowych komponentów, Docker, AppImage, Ubuntu Snap
- Podstawy: Informacje na temat FreeCAD, Interfejs użytkownika, Profil nawigacji myszką, Metody wyboru, Nazwa obiektu, Edytor ustawień, Środowiska pracy, Struktura dokumentu, Właściwości, Pomóż w rozwoju FreeCAD, Dotacje
- Pomoc: Poradniki, Wideo poradniki
- Środowiska pracy: Strona Startowa, Architektura, Assembly, CAM, Rysunek Roboczy, MES, Inspekcja, Siatka, OpenSCAD, Część, Projekt Części, Punkty, Inżynieria Wsteczna, Robot, Szkicownik, Arkusz Kalkulacyjny, Powierzchnia 3D, Rysunek Techniczny, Test Framework