Files
modeling-app/docs/kcl-std/functions/std-sketch-revolve.md
Nick Cameron 1841e63021 Misc docs polishing (#6712)
* Fake modules for Rust std lib functions

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Include the missing @ in Rust std lib fns

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Move revolve and mirror2d to better modules

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Use docs from KCL mods for type summaries

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Use type docs to describe types from KCL std lib

Signed-off-by: Nick Cameron <nrc@ncameron.org>

---------

Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-05-06 16:09:59 +12:00

1.5 MiB

title, excerpt, layout
title excerpt layout
std::sketch::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(Angle),
  tolerance?: number(Length),
  symmetric?: bool,
  bidirectionalAngle?: number(Angle),
  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 or Edge Axis of revolution. Yes
angle number(Angle) Angle to revolve (in degrees). Default is 360. No
tolerance number(Length) Tolerance for the revolve operation. No
symmetric bool If true, the extrusion will happen symmetrically around the sketch. Otherwise, the extrusion will happen on only one side of the sketch. No
bidirectionalAngle number(Angle) If specified, will also revolve in the opposite direction to 'angle' to the specified angle. If 'symmetric' is true, this value is ignored. 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 - A solid is a collection of extrude surfaces.

Examples

part001 = startSketchOn(XY)
    |> startProfile(at = [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::sketch::revolve 0

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

Rendered example of std::sketch::revolve 1

part001 = startSketchOn(XY)
    |> startProfile(at = [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::sketch::revolve 2

part001 = startSketchOn(XY)
    |> startProfile(at = [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, face = END)
    |> startProfile(at = [4.5, -5])
    |> line(end = [0, 5])
    |> line(end = [5, 0])
    |> line(end = [0, -5])
    |> close()
    |> extrude(length = 5)

Rendered example of std::sketch::revolve 3

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

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

Rendered example of std::sketch::revolve 4

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

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

Rendered example of std::sketch::revolve 5

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

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

Rendered example of std::sketch::revolve 6

sketch001 = startSketchOn(XY)
  |> startProfile(at = [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::sketch::revolve 7

// Revolve two sketches around the same axis.

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

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

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

Rendered example of std::sketch::revolve 8

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

profile001 = startSketchOn(XY)
    |> startProfile(at = [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::sketch::revolve 9

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

profile001 = startSketchOn(XY)
    |> startProfile(at = [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::sketch::revolve 10

// Symmetrically revolve around a path.

profile001 = startSketchOn(XY)
    |> startProfile(at = [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, symmetric = true)

Rendered example of std::sketch::revolve 11

// Bidirectional revolve around a path.

profile001 = startSketchOn(XY)
    |> startProfile(at = [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, bidirectionalAngle = 50)

Rendered example of std::sketch::revolve 12