Files
modeling-app/docs/kcl/std-revolve.md
2025-04-02 17:05:28 +13:00

1.4 MiB

title, excerpt, layout
title excerpt layout
std::revolve Rotate a sketch around some provided axis, creating a solid from its extent. manual

Rotate a sketch around some provided axis, creating a solid from its extent.

This, like extrude, is able to create a 3-dimensional solid from a 2-dimensional sketch. However, unlike extrude, this creates a solid by using the extent of the sketch as its revolved around an axis rather than using the extent of the sketch linearly translated through a third dimension.

Revolve occurs around a local sketch axis rather than a global axis.

You can provide more than one sketch to revolve, and they will all be revolved around the same axis.

revolve(@sketches: [Sketch; 1+], axis: Axis2d | Edge, angle?: number(deg), tolerance?: number(mm), tagStart?: tag, tagEnd?: tag): Solid

Arguments

Name Type Description Required
sketches [Sketch; 1+] The sketch or set of sketches that should be revolved Yes
axis `Axis2d Edge` Axis of revolution.
angle number(deg) Angle to revolve (in degrees). Default is 360. No
tolerance number(mm) Tolerance for the revolve operation. No
tagStart tag A named tag for the face at the start of the revolve, i.e. the original sketch. No
tagEnd tag A named tag for the face at the end of the revolve. No

Returns

Solid

Examples

part001 = startSketchOn(XY)
    |> startProfileAt([4, 12], %)
    |> line(end = [2, 0])
    |> line(end = [0, -6])
    |> line(end = [4, -6])
    |> line(end = [0, -6])
    |> line(end = [-3.75, -4.5])
    |> line(end = [0, -5.5])
    |> line(end = [-2, 0])
    |> close()
    |> revolve(axis = Y) // default angle is 360

Rendered example of std::revolve 0

// A donut shape.
sketch001 = startSketchOn(XY)
    |> circle( center = [15, 0], radius = 5 )
    |> revolve(
        angle = 360,
        axis = Y,
    )

Rendered example of std::revolve 1

part001 = startSketchOn(XY)
    |> startProfileAt([4, 12], %)
    |> line(end = [2, 0])
    |> line(end = [0, -6])
    |> line(end = [4, -6])
    |> line(end = [0, -6])
    |> line(end = [-3.75, -4.5])
    |> line(end = [0, -5.5])
    |> line(end = [-2, 0])
    |> close()
    |> revolve(axis = Y, angle = 180)

Rendered example of std::revolve 2

part001 = startSketchOn(XY)
    |> startProfileAt([4, 12], %)
    |> line(end = [2, 0])
    |> line(end = [0, -6])
    |> line(end = [4, -6])
    |> line(end = [0, -6])
    |> line(end = [-3.75, -4.5])
    |> line(end = [0, -5.5])
    |> line(end = [-2, 0])
    |> close()
    |> revolve(axis = Y, angle = 180)

part002 = startSketchOn(part001, 'end')
    |> startProfileAt([4.5, -5], %)
    |> line(end = [0, 5])
    |> line(end = [5, 0])
    |> line(end = [0, -5])
    |> close()
    |> extrude(length = 5)

Rendered example of std::revolve 3

box = startSketchOn(XY)
    |> startProfileAt([0, 0], %)
    |> line(end = [0, 20])
    |> line(end = [20, 0])
    |> line(end = [0, -20])
    |> close()
    |> extrude(length = 20)

sketch001 = startSketchOn(box, "END")
    |> circle( center = [10,10], radius = 4 )
    |> revolve(
        angle = -90,
        axis = Y
    )

Rendered example of std::revolve 4

box = startSketchOn(XY)
    |> startProfileAt([0, 0], %)
    |> line(end = [0, 20])
    |> line(end = [20, 0])
    |> line(end = [0, -20], tag = $revolveAxis)
    |> close()
    |> extrude(length = 20)

sketch001 = startSketchOn(box, "END")
    |> circle( center = [10,10], radius = 4 )
    |> revolve(
        angle = 90,
        axis = getOppositeEdge(revolveAxis)
    )

Rendered example of std::revolve 5

box = startSketchOn(XY)
    |> startProfileAt([0, 0], %)
    |> line(end = [0, 20])
    |> line(end = [20, 0])
    |> line(end = [0, -20], tag = $revolveAxis)
    |> close()
    |> extrude(length = 20)

sketch001 = startSketchOn(box, "END")
    |> circle( center = [10,10], radius = 4 )
    |> revolve(
        angle = 90,
        axis = getOppositeEdge(revolveAxis),
        tolerance = 0.0001
    )

Rendered example of std::revolve 6

sketch001 = startSketchOn(XY)
  |> startProfileAt([10, 0], %)
  |> line(end = [5, -5])
  |> line(end = [5, 5])
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

part001 = revolve(
   sketch001,
   axis = {
     direction = [0.0, 1.0],
     origin: [0.0, 0.0]
  }
)

Rendered example of std::revolve 7

// Revolve two sketches around the same axis.

sketch001 = startSketchOn(XY)
profile001 = startProfileAt([4, 8], sketch001)
    |> xLine(length = 3)
    |> yLine(length = -3)
    |> xLine(length = -3)
    |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
    |> close()

profile002 = startProfileAt([-5, 8], sketch001)
    |> xLine(length = 3)
    |> yLine(length = -3)
    |> xLine(length = -3)
    |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
    |> close()

revolve(
    [profile001, profile002],
    axis = X,
)

Rendered example of std::revolve 8

// Revolve around a path that has not been extruded.

profile001 = startSketchOn(XY)
    |> startProfileAt([0, 0], %)
    |> line(end = [0, 20], tag = $revolveAxis)
    |> line(end = [20, 0])
    |> line(end = [0, -20])
    |> close(%)

sketch001 = startSketchOn(XY)
    |> circle(center = [-10, 10], radius = 4)
    |> revolve(angle = 90, axis = revolveAxis)

Rendered example of std::revolve 9

// Revolve around a path that has not been extruded or closed.

profile001 = startSketchOn(XY)
    |> startProfileAt([0, 0], %)
    |> line(end = [0, 20], tag = $revolveAxis)
    |> line(end = [20, 0])

sketch001 = startSketchOn(XY)
    |> circle(center = [-10, 10], radius = 4)
    |> revolve(angle = 90, axis = revolveAxis)

Rendered example of std::revolve 10