* Parse [T] instead of T[] for array types Signed-off-by: Nick Cameron <nrc@ncameron.org> * homogenous arrays, type coercion, remove solid set and sketch set, etc Signed-off-by: Nick Cameron <nrc@ncameron.org> --------- Signed-off-by: Nick Cameron <nrc@ncameron.org>
156 lines
353 KiB
Markdown
156 lines
353 KiB
Markdown
---
|
|
title: "rotate"
|
|
excerpt: "Rotate a solid."
|
|
layout: 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.
|
|
|
|
```js
|
|
rotate(
|
|
solids: SolidOrImportedGeometry,
|
|
roll?: number,
|
|
pitch?: number,
|
|
yaw?: number,
|
|
axis?: [number],
|
|
angle?: number,
|
|
global?: bool,
|
|
): SolidOrImportedGeometry
|
|
```
|
|
|
|
|
|
### Arguments
|
|
|
|
| Name | Type | Description | Required |
|
|
|----------|------|-------------|----------|
|
|
| `solids` | [`SolidOrImportedGeometry`](/docs/kcl/types/SolidOrImportedGeometry) | The solid or set of solids to rotate. | Yes |
|
|
| `roll` | [`number`](/docs/kcl/types/number) | The roll angle in degrees. Must be used with `pitch` and `yaw`. Must be between -360 and 360. | No |
|
|
| `pitch` | [`number`](/docs/kcl/types/number) | The pitch angle in degrees. Must be used with `roll` and `yaw`. Must be between -360 and 360. | No |
|
|
| `yaw` | [`number`](/docs/kcl/types/number) | The yaw angle in degrees. Must be used with `roll` and `pitch`. Must be between -360 and 360. | No |
|
|
| `axis` | [`[number]`](/docs/kcl/types/number) | The axis to rotate around. Must be used with `angle`. | No |
|
|
| `angle` | [`number`](/docs/kcl/types/number) | The angle to rotate in degrees. Must be used with `axis`. Must be between -360 and 360. | No |
|
|
| `global` | [`bool`](/docs/kcl/types/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`](/docs/kcl/types/SolidOrImportedGeometry) - Data for a solid or an imported geometry.
|
|
|
|
|
|
### Examples
|
|
|
|
```js
|
|
// 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)
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// 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)
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// Rotate an imported model.
|
|
|
|
|
|
import "tests/inputs/cube.sldprt" as cube
|
|
|
|
cube
|
|
|> rotate(axis = [0, 0, 1.0], angle = 90)
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// 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)
|
|
```
|
|
|
|

|
|
|
|
|