Files
modeling-app/docs/kcl/rotate.md
Josh Gomez 58e0c0e916 Improve KCL Samples (#5767)
* improve KCL Samples & .gitignore

* update block and car wheel assembly

* update flange and lego, delete flange xy

* artifacts

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* scale

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* docs

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
Co-authored-by: Jess Frazelle <github@jessfraz.com>
2025-03-13 23:38:51 -07:00

353 KiB

title, excerpt, layout
title excerpt layout
rotate Rotate a solid. manual

Rotate a solid.

Using Roll, Pitch, and Yaw

When rotating a part in 3D space, "roll," "pitch," and "yaw" refer to the three rotational axes used to describe its orientation: roll is rotation around the longitudinal axis (front-to-back), pitch is rotation around the lateral axis (wing-to-wing), and yaw is rotation around the vertical axis (up-down); essentially, it's like tilting the part on its side (roll), tipping the nose up or down (pitch), and turning it left or right (yaw).

So, in the context of a 3D model:

  • Roll: Imagine spinning a pencil on its tip - that's a roll movement.

  • Pitch: Think of a seesaw motion, where the object tilts up or down along its side axis.

  • Yaw: Like turning your head left or right, this is a rotation around the vertical axis

Using an Axis and Angle

When rotating a part around an axis, you specify the axis of rotation and the angle of rotation.

rotate(
  solidSet: SolidOrImportedGeometry,
  roll?: number,
  pitch?: number,
  yaw?: number,
  axis?: [number],
  angle?: number,
  global?: bool,
): SolidOrImportedGeometry

Arguments

Name Type Description Required
solidSet SolidOrImportedGeometry The solid or set of solids to rotate. Yes
roll number The roll angle in degrees. Must be used with pitch and yaw. Must be between -360 and 360. No
pitch number The pitch angle in degrees. Must be used with roll and yaw. Must be between -360 and 360. No
yaw number The yaw angle in degrees. Must be used with roll and pitch. Must be between -360 and 360. No
axis [number] The axis to rotate around. Must be used with angle. No
angle number The angle to rotate in degrees. Must be used with axis. Must be between -360 and 360. No
global bool If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move. No

Returns

SolidOrImportedGeometry - Data for a solid or an imported geometry.

Examples

// Rotate a pipe with roll, pitch, and yaw.


// Create a path for the sweep.
sweepPath = startSketchOn('XZ')
  |> startProfileAt([0.05, 0.05], %)
  |> line(end = [0, 7])
  |> tangentialArc({ offset = 90, radius = 5 }, %)
  |> line(end = [-3, 0])
  |> tangentialArc({ offset = -90, radius = 5 }, %)
  |> line(end = [0, 7])

// Create a hole for the pipe.
pipeHole = startSketchOn('XY')
  |> circle(center = [0, 0], radius = 1.5)

sweepSketch = startSketchOn('XY')
  |> circle(center = [0, 0], radius = 2)
  |> hole(pipeHole, %)
  |> sweep(path = sweepPath)
  |> rotate(roll = 10, pitch = 10, yaw = 90)

Rendered example of rotate 0

// Rotate a pipe about an axis with an angle.


// Create a path for the sweep.
sweepPath = startSketchOn('XZ')
  |> startProfileAt([0.05, 0.05], %)
  |> line(end = [0, 7])
  |> tangentialArc({ offset = 90, radius = 5 }, %)
  |> line(end = [-3, 0])
  |> tangentialArc({ offset = -90, radius = 5 }, %)
  |> line(end = [0, 7])

// Create a hole for the pipe.
pipeHole = startSketchOn('XY')
  |> circle(center = [0, 0], radius = 1.5)

sweepSketch = startSketchOn('XY')
  |> circle(center = [0, 0], radius = 2)
  |> hole(pipeHole, %)
  |> sweep(path = sweepPath)
  |> rotate(axis = [0, 0, 1.0], angle = 90)

Rendered example of rotate 1

// Rotate an imported model.


import "tests/inputs/cube.sldprt" as cube

cube
  |> rotate(axis = [0, 0, 1.0], angle = 90)

Rendered example of rotate 2

// Sweep two sketches along the same path.


sketch001 = startSketchOn('XY')
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
  |> angledLine([0, 73.47], %, $rectangleSegmentA001)
  |> angledLine([
       segAng(rectangleSegmentA001) - 90,
       50.61
     ], %)
  |> angledLine([
       segAng(rectangleSegmentA001),
       -segLen(rectangleSegmentA001)
     ], %)
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()

circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)

sketch002 = startSketchOn('YZ')
sweepPath = startProfileAt([0, 0], sketch002)
  |> yLine(length = 231.81)
  |> tangentialArc({ radius = 80, offset = -90 }, %)
  |> xLine(length = 384.93)

parts = sweep([rectangleSketch, circleSketch], path = sweepPath)

// Rotate the sweeps.
rotate(parts, axis = [0, 0, 1.0], angle = 90)

Rendered example of rotate 3