* Update offset_plane to actually create and show the plane in-engine * Fix broken ability to use offsetPlanes in startSketchOn * Make the newly-visible offset planes usable for sketching via UI * Add a playwright test for sketching on an offset plane via point-and-click * cargo clippy & cargo fmt * Make `PlaneData` the first item of `SketchData` so autocomplete continues to work well for `startSketchOn` * @nadr0 feedback re: `offsetIndex` * From @jtran: "Need to call the ID generator so that IDs are stable." * More feedback from @jtran and fix incomplete use of `id_generator` in last commit * Oops I missed saving `isPathToNodeNumber` earlier 🤦🏻 * Make the distinction between `Plane` and `PlaneOrientationData` more clear per @nadr0 and @lf94's feedback * Make `newPathToNode` less hardcoded, per @lf94's feedback * Don't need to unbox and rebox `plane` * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Rearranging of enums and structs, but the offsetPlanes are still not used by their sketches * A snapshot a day keeps the bugs away! 📷🐛 (OS: ubuntu-latest-8-cores) * A snapshot a day keeps the bugs away! 📷🐛 (OS: windows-latest-8-cores) * Revert all my little newtype fiddling it's a waste of time. * Update docs * cargo fmt * Remove log * Print the unexpected diagnostics * Undo renaming of `PlaneData` * Remove generated PlaneRientationData docs page * Redo doc generation after undoing `PlaneData` rename * Impl FromKclValue for the new plane datatypes * Clippy lint * When starting a sketch, only hide the plane if it's a custom plane * Fix FromKclValue and macro use since merge * Fix to not convert Plane to PlaneData * Make sure offset planes are `Custom` type * SketchData actually doesn't need to be in a certain order This avoids the autocompletion issue I was having. --------- Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev> Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
119 lines
484 KiB
Markdown
119 lines
484 KiB
Markdown
---
|
|
title: "offsetPlane"
|
|
excerpt: "Offset a plane by a distance along its normal."
|
|
layout: manual
|
|
---
|
|
|
|
Offset a plane by a distance along its normal.
|
|
|
|
For example, if you offset the 'XZ' plane by 10, the new plane will be parallel to the 'XZ' plane and 10 units away from it.
|
|
|
|
```js
|
|
offsetPlane(std_plane: StandardPlane, offset: number) -> Plane
|
|
```
|
|
|
|
|
|
### Arguments
|
|
|
|
| Name | Type | Description | Required |
|
|
|----------|------|-------------|----------|
|
|
| `std_plane` | [`StandardPlane`](/docs/kcl/types/StandardPlane) | One of the standard planes. | Yes |
|
|
| `offset` | `number` | | Yes |
|
|
|
|
### Returns
|
|
|
|
[`Plane`](/docs/kcl/types/Plane) - A plane.
|
|
|
|
|
|
### Examples
|
|
|
|
```js
|
|
// Loft a square and a circle on the `XY` plane using offset.
|
|
squareSketch = startSketchOn('XY')
|
|
|> startProfileAt([-100, 200], %)
|
|
|> line([200, 0], %)
|
|
|> line([0, -200], %)
|
|
|> line([-200, 0], %)
|
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
|
|> close(%)
|
|
|
|
circleSketch = startSketchOn(offsetPlane('XY', 150))
|
|
|> circle({ center: [0, 100], radius: 50 }, %)
|
|
|
|
loft([squareSketch, circleSketch])
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// Loft a square and a circle on the `XZ` plane using offset.
|
|
squareSketch = startSketchOn('XZ')
|
|
|> startProfileAt([-100, 200], %)
|
|
|> line([200, 0], %)
|
|
|> line([0, -200], %)
|
|
|> line([-200, 0], %)
|
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
|
|> close(%)
|
|
|
|
circleSketch = startSketchOn(offsetPlane('XZ', 150))
|
|
|> circle({ center: [0, 100], radius: 50 }, %)
|
|
|
|
loft([squareSketch, circleSketch])
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// Loft a square and a circle on the `YZ` plane using offset.
|
|
squareSketch = startSketchOn('YZ')
|
|
|> startProfileAt([-100, 200], %)
|
|
|> line([200, 0], %)
|
|
|> line([0, -200], %)
|
|
|> line([-200, 0], %)
|
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
|
|> close(%)
|
|
|
|
circleSketch = startSketchOn(offsetPlane('YZ', 150))
|
|
|> circle({ center: [0, 100], radius: 50 }, %)
|
|
|
|
loft([squareSketch, circleSketch])
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// Loft a square and a circle on the `-XZ` plane using offset.
|
|
squareSketch = startSketchOn('-XZ')
|
|
|> startProfileAt([-100, 200], %)
|
|
|> line([200, 0], %)
|
|
|> line([0, -200], %)
|
|
|> line([-200, 0], %)
|
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
|
|> close(%)
|
|
|
|
circleSketch = startSketchOn(offsetPlane('-XZ', -150))
|
|
|> circle({ center: [0, 100], radius: 50 }, %)
|
|
|
|
loft([squareSketch, circleSketch])
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
// A circle on the XY plane
|
|
startSketchOn("XY")
|
|
|> startProfileAt([0, 0], %)
|
|
|> circle({ radius: 10, center: [0, 0] }, %)
|
|
|
|
// Triangle on the plane 4 units above
|
|
startSketchOn(offsetPlane("XY", 4))
|
|
|> startProfileAt([0, 0], %)
|
|
|> line([10, 0], %)
|
|
|> line([0, 10], %)
|
|
|> close(%)
|
|
```
|
|
|
|

|
|
|
|
|