Files
modeling-app/docs/kcl/loft.md
Adam Chalmers a094995730 KCL: Chamfer and fillet now use keyword arguments (#5389)
Previously:
`|> fillet({ radius = 5, tags = [seg01] }, %)`
Now:
`|> fillet(radius = 5, tags = [seg01])`

Also tweaks the formatter for keyword argument calls slightly.
2025-02-21 20:41:25 +00:00

503 KiB

title, excerpt, layout
title excerpt layout
loft Create a 3D surface or solid by interpolating between two or more sketches. manual

Create a 3D surface or solid by interpolating between two or more sketches.

The sketches need to closed and on the same plane.

loft(sketches: [Sketch], v_degree: NonZeroU32, bez_approximate_rational: bool, base_curve_index?: integer, tolerance?: number) -> Solid

Arguments

Name Type Description Required
sketches [Sketch] Which sketches to loft. Must include at least 2 sketches. Yes
v_degree NonZeroU32 Degree of the interpolation. Must be greater than zero. For example, use 2 for quadratic, or 3 for cubic interpolation in the V direction. This defaults to 2, if not specified. Yes
bez_approximate_rational bool Attempt to approximate rational curves (such as arcs) using a bezier. This will remove banding around interpolations between arcs and non-arcs. It may produce errors in other scenarios Over time, this field won't be necessary. Yes
base_curve_index integer This can be set to override the automatically determined topological base curve, which is usually the first section encountered. No
tolerance number Tolerance for the loft operation. No

Returns

Solid - A solid is a collection of extrude surfaces.

Examples

// Loft a square and a triangle.
squareSketch = startSketchOn('XY')
  |> startProfileAt([-100, 200], %)
  |> line(end = [200, 0])
  |> line(end = [0, -200])
  |> line(end = [-200, 0])
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

triangleSketch = startSketchOn(offsetPlane('XY', offset = 75))
  |> startProfileAt([0, 125], %)
  |> line(end = [-15, -30])
  |> line(end = [30, 0])
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

loft([squareSketch, triangleSketch])

Rendered example of loft 0

// Loft a square, a circle, and another circle.
squareSketch = startSketchOn('XY')
  |> startProfileAt([-100, 200], %)
  |> line(end = [200, 0])
  |> line(end = [0, -200])
  |> line(end = [-200, 0])
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

circleSketch0 = startSketchOn(offsetPlane('XY', offset = 75))
  |> circle({ center = [0, 100], radius = 50 }, %)

circleSketch1 = startSketchOn(offsetPlane('XY', offset = 150))
  |> circle({ center = [0, 100], radius = 20 }, %)

loft([
  squareSketch,
  circleSketch0,
  circleSketch1
])

Rendered example of loft 1

// Loft a square, a circle, and another circle with options.
squareSketch = startSketchOn('XY')
  |> startProfileAt([-100, 200], %)
  |> line(end = [200, 0])
  |> line(end = [0, -200])
  |> line(end = [-200, 0])
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

circleSketch0 = startSketchOn(offsetPlane('XY', offset = 75))
  |> circle({ center = [0, 100], radius = 50 }, %)

circleSketch1 = startSketchOn(offsetPlane('XY', offset = 150))
  |> circle({ center = [0, 100], radius = 20 }, %)

loft(
  [
    squareSketch,
    circleSketch0,
    circleSketch1
  ],
  baseCurveIndex = 0,
  bezApproximateRational = false,
  tolerance = 0.000001,
  vDegree = 2,
)

Rendered example of loft 2