Compare commits
32 Commits
try-16-cor
...
v0.22.4
Author | SHA1 | Date | |
---|---|---|---|
03e4f457d4 | |||
226ed37c5f | |||
0f3f923019 | |||
bf8fb0d127 | |||
4a275c2ff7 | |||
baf5509f1d | |||
47a5e1f6d3 | |||
d85211c5a4 | |||
1beb6b5186 | |||
17978ab1d7 | |||
a1bcad9dfb | |||
2e7bdf02cf | |||
6f76196b72 | |||
e7af064518 | |||
674d49e2ae | |||
4cb48674c6 | |||
82daec2aff | |||
f1ef9d5200 | |||
dc226d3270 | |||
7bf50d8fe0 | |||
b26764bc9a | |||
1b0c6298d7 | |||
fe9a483726 | |||
bd42ea037b | |||
fdb1b21af3 | |||
630ef316b8 | |||
e322926be9 | |||
a9e61da8b5 | |||
e2a835a437 | |||
c61273085f | |||
a79e365c0f | |||
2386ba24e5 |
40
.github/workflows/cargo-check.yml
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths:
|
||||||
|
- '**/Cargo.toml'
|
||||||
|
- '**/Cargo.lock'
|
||||||
|
- '**/rust-toolchain.toml'
|
||||||
|
- '**.rs'
|
||||||
|
- .github/workflows/cargo-check.yml
|
||||||
|
pull_request:
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
name: cargo check
|
||||||
|
jobs:
|
||||||
|
cargocheck:
|
||||||
|
name: cargo check
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
dir: ['src/wasm-lib']
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- name: Install latest rust
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: stable
|
||||||
|
override: true
|
||||||
|
|
||||||
|
- name: Rust Cache
|
||||||
|
uses: Swatinem/rust-cache@v2.6.1
|
||||||
|
|
||||||
|
- name: Run check
|
||||||
|
run: |
|
||||||
|
cd "${{ matrix.dir }}"
|
||||||
|
# We specifically want to test the disable-println feature
|
||||||
|
# Since it is not enabled by default, we need to specify it
|
||||||
|
# This is used in kcl-lsp
|
||||||
|
cargo check --all --features disable-println --features pyo3
|
6
.github/workflows/cargo-clippy.yml
vendored
@ -9,6 +9,12 @@ on:
|
|||||||
- '**.rs'
|
- '**.rs'
|
||||||
- .github/workflows/cargo-clippy.yml
|
- .github/workflows/cargo-clippy.yml
|
||||||
pull_request:
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '**/Cargo.toml'
|
||||||
|
- '**/Cargo.lock'
|
||||||
|
- '**/rust-toolchain.toml'
|
||||||
|
- '**.rs'
|
||||||
|
- .github/workflows/cargo-clippy.yml
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
8
.github/workflows/playwright.yml
vendored
@ -57,7 +57,7 @@ jobs:
|
|||||||
- name: Download Wasm Cache
|
- name: Download Wasm Cache
|
||||||
id: download-wasm
|
id: download-wasm
|
||||||
if: needs.check-rust-changes.outputs.rust-changed == 'false'
|
if: needs.check-rust-changes.outputs.rust-changed == 'false'
|
||||||
uses: dawidd6/action-download-artifact@v5
|
uses: dawidd6/action-download-artifact@v6
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
github_token: ${{secrets.GITHUB_TOKEN}}
|
github_token: ${{secrets.GITHUB_TOKEN}}
|
||||||
@ -133,7 +133,7 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: playwright-report
|
name: playwright-report-ubuntu
|
||||||
path: playwright-report/
|
path: playwright-report/
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ jobs:
|
|||||||
- name: Download Wasm Cache
|
- name: Download Wasm Cache
|
||||||
id: download-wasm
|
id: download-wasm
|
||||||
if: needs.check-rust-changes.outputs.rust-changed == 'false'
|
if: needs.check-rust-changes.outputs.rust-changed == 'false'
|
||||||
uses: dawidd6/action-download-artifact@v5
|
uses: dawidd6/action-download-artifact@v6
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
with:
|
with:
|
||||||
github_token: ${{secrets.GITHUB_TOKEN}}
|
github_token: ${{secrets.GITHUB_TOKEN}}
|
||||||
@ -204,6 +204,6 @@ jobs:
|
|||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v3
|
||||||
if: always()
|
if: always()
|
||||||
with:
|
with:
|
||||||
name: playwright-report
|
name: playwright-report-macos
|
||||||
path: playwright-report/
|
path: playwright-report/
|
||||||
retention-days: 30
|
retention-days: 30
|
||||||
|
@ -319,7 +319,7 @@ PS: for the debug panel, the following JSON is useful for snapping the camera
|
|||||||
|
|
||||||
```
|
```
|
||||||
yarn install
|
yarn install
|
||||||
yarn build:wasm
|
yarn build:wasm-dev
|
||||||
cp src/wasm-lib/pkg/wasm_lib_bg.wasm public
|
cp src/wasm-lib/pkg/wasm_lib_bg.wasm public
|
||||||
yarn vite build --mode development
|
yarn vite build --mode development
|
||||||
yarn tauri build --debug -b
|
yarn tauri build --debug -b
|
||||||
|
@ -36,8 +36,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -73,8 +71,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -101,10 +97,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -179,24 +171,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -37,8 +37,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -74,8 +72,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -102,10 +98,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -180,24 +172,6 @@ const extrusion = extrude(5, sketch001)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -43,8 +43,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -80,8 +78,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -108,10 +104,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -186,24 +178,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -213,8 +187,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -250,8 +222,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -278,10 +248,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -356,24 +322,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -42,8 +42,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -79,8 +77,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -107,10 +103,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -185,24 +177,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -212,8 +186,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -249,8 +221,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -277,10 +247,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -355,24 +321,6 @@ const extrusion = extrude(10, sketch001)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -44,8 +44,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -81,8 +79,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -109,10 +105,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -187,24 +179,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -214,8 +188,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -251,8 +223,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -279,10 +249,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -357,24 +323,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -48,8 +48,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -85,8 +83,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -113,10 +109,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -191,24 +183,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -218,8 +192,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -255,8 +227,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -283,10 +253,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -361,24 +327,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -41,8 +41,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -78,8 +76,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -106,10 +102,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -184,24 +176,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -211,8 +185,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -248,8 +220,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -276,10 +246,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -354,24 +320,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -41,8 +41,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -78,8 +76,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -106,10 +102,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -184,24 +176,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -211,8 +185,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -248,8 +220,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -276,10 +246,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -354,24 +320,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -52,8 +52,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -89,8 +87,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -117,10 +113,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -195,24 +187,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -222,8 +196,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -259,8 +231,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -287,10 +257,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -365,24 +331,6 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -47,8 +47,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -84,8 +82,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -112,10 +108,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -190,24 +182,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -217,8 +191,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -254,8 +226,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -282,10 +252,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -360,24 +326,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ chamfer(data: ChamferData, extrude_group: ExtrudeGroup) -> ExtrudeGroup
|
|||||||
const width = 20
|
const width = 20
|
||||||
const length = 10
|
const length = 10
|
||||||
const thickness = 1
|
const thickness = 1
|
||||||
const chamferRadius = 2
|
const chamferLength = 2
|
||||||
|
|
||||||
const mountingPlateSketch = startSketchOn("XY")
|
const mountingPlateSketch = startSketchOn("XY")
|
||||||
|> startProfileAt([-width / 2, -length / 2], %)
|
|> startProfileAt([-width / 2, -length / 2], %)
|
||||||
@ -29,7 +29,7 @@ const mountingPlateSketch = startSketchOn("XY")
|
|||||||
|
|
||||||
const mountingPlate = extrude(thickness, mountingPlateSketch)
|
const mountingPlate = extrude(thickness, mountingPlateSketch)
|
||||||
|> chamfer({
|
|> chamfer({
|
||||||
radius: chamferRadius,
|
length: chamferLength,
|
||||||
tags: [
|
tags: [
|
||||||
getNextAdjacentEdge('edge1', %),
|
getNextAdjacentEdge('edge1', %),
|
||||||
getNextAdjacentEdge('edge2', %),
|
getNextAdjacentEdge('edge2', %),
|
||||||
@ -46,8 +46,8 @@ const mountingPlate = extrude(thickness, mountingPlateSketch)
|
|||||||
* `data`: `ChamferData` - Data for chamfers. (REQUIRED)
|
* `data`: `ChamferData` - Data for chamfers. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The radius of the chamfer.
|
// The length of the chamfer.
|
||||||
radius: number,
|
length: number,
|
||||||
// The tags of the paths you want to chamfer.
|
// The tags of the paths you want to chamfer.
|
||||||
tags: [uuid |
|
tags: [uuid |
|
||||||
string],
|
string],
|
||||||
@ -62,10 +62,6 @@ string],
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -141,10 +137,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -156,10 +148,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
@ -196,10 +184,6 @@ string],
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -275,10 +259,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -290,10 +270,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -76,8 +76,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -105,8 +103,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -142,8 +138,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -170,10 +164,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -248,24 +238,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -274,8 +246,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -311,8 +281,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -339,10 +307,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -417,24 +381,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -42,8 +42,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -79,8 +77,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -107,10 +103,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -185,24 +177,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -212,8 +186,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -249,8 +221,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -277,10 +247,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -355,24 +321,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -67,8 +67,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
* `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -104,8 +102,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -132,10 +128,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -211,24 +203,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
type: "sketchGroups",
|
type: "sketchGroups",
|
||||||
@ -246,10 +220,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -326,10 +296,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -341,10 +307,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -62,10 +62,6 @@ string],
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -141,10 +137,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -156,10 +148,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
@ -196,10 +184,6 @@ string],
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -275,10 +259,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -290,10 +270,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -49,10 +49,6 @@ const revolution = startSketchOn(box, "revolveAxis")
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -128,10 +124,6 @@ const revolution = startSketchOn(box, "revolveAxis")
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -143,10 +135,6 @@ const revolution = startSketchOn(box, "revolveAxis")
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -47,10 +47,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -126,10 +122,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -141,10 +133,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -45,10 +45,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -124,10 +120,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -139,10 +131,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -47,10 +47,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -126,10 +122,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -141,10 +133,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -52,10 +52,6 @@ const part001 = startSketchOn('XY')
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -131,10 +127,6 @@ const part001 = startSketchOn('XY')
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -146,10 +138,6 @@ const part001 = startSketchOn('XY')
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
@ -186,10 +174,6 @@ const part001 = startSketchOn('XY')
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -265,10 +249,6 @@ const part001 = startSketchOn('XY')
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -280,10 +260,6 @@ const part001 = startSketchOn('XY')
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -53,8 +53,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
* `hole_sketch_group`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
* `hole_sketch_group`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -90,8 +88,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -118,10 +114,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -197,24 +189,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
type: "sketchGroups",
|
type: "sketchGroups",
|
||||||
@ -223,8 +197,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -260,8 +232,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -288,10 +258,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -366,24 +332,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -392,8 +340,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -429,8 +375,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -457,10 +401,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -535,24 +475,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -33,8 +33,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -70,8 +68,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -98,10 +94,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -176,24 +168,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -33,8 +33,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -70,8 +68,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -98,10 +94,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -176,24 +168,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -46,8 +46,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -83,8 +81,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -111,10 +107,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -189,24 +181,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -216,8 +190,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -253,8 +225,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -281,10 +251,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -359,24 +325,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -33,8 +33,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -70,8 +68,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -98,10 +94,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -176,24 +168,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -203,8 +177,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -240,8 +212,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -268,10 +238,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -346,24 +312,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -51,8 +51,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
* `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
* `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -88,8 +86,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -116,10 +112,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -195,24 +187,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
type: "sketchGroups",
|
type: "sketchGroups",
|
||||||
|
@ -56,10 +56,6 @@ const example = extrude(-5, exampleSketch)
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -136,10 +132,6 @@ const example = extrude(-5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -151,10 +143,6 @@ const example = extrude(-5, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -44,8 +44,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
* `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
* `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -81,8 +79,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -109,10 +105,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -188,24 +180,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
type: "sketchGroups",
|
type: "sketchGroups",
|
||||||
|
@ -54,10 +54,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -134,10 +130,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -149,10 +141,6 @@ const example = extrude(1, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -34,8 +34,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -71,8 +69,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -99,10 +95,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -177,24 +169,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -29,8 +29,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -66,8 +64,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -94,10 +90,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -172,24 +164,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -28,8 +28,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -65,8 +63,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -93,10 +89,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -171,24 +163,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -162,8 +162,6 @@ string,
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -199,8 +197,6 @@ string,
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -227,10 +223,6 @@ string,
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -305,24 +297,6 @@ string,
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -337,10 +311,6 @@ string,
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -416,10 +386,6 @@ string,
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -431,10 +397,6 @@ string,
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -36,8 +36,6 @@ const example = extrude(4, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -73,8 +71,6 @@ const example = extrude(4, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -101,10 +97,6 @@ const example = extrude(4, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -179,24 +171,6 @@ const example = extrude(4, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -34,8 +34,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -71,8 +69,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -99,10 +95,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -177,24 +169,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -35,8 +35,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -72,8 +70,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -100,10 +96,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -178,24 +170,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -36,8 +36,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -73,8 +71,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -101,10 +97,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -179,24 +171,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -50,10 +50,6 @@ string],
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -129,10 +125,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -144,10 +136,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
@ -184,10 +172,6 @@ string],
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -263,10 +247,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -278,10 +258,6 @@ string],
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
|
@ -90,8 +90,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -126,8 +124,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -163,8 +159,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -191,10 +185,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -269,24 +259,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -59,8 +59,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -96,8 +94,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -124,10 +120,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -202,24 +194,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -167,10 +167,6 @@ const a1 = startSketchOn({
|
|||||||
height: number,
|
height: number,
|
||||||
// The id of the extrude group.
|
// The id of the extrude group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The position of the extrude group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the extrude group.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The sketch group paths.
|
// The sketch group paths.
|
||||||
sketchGroupValues: [{
|
sketchGroupValues: [{
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -246,10 +242,6 @@ const a1 = startSketchOn({
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudePlane",
|
type: "extrudePlane",
|
||||||
@ -261,10 +253,6 @@ const a1 = startSketchOn({
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The name.
|
// The name.
|
||||||
name: string,
|
name: string,
|
||||||
// The position.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The source range.
|
// The source range.
|
||||||
sourceRange: [number, number],
|
sourceRange: [number, number],
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
@ -331,8 +319,6 @@ string
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
|
8174
docs/kcl/std.json
@ -42,8 +42,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -79,8 +77,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -107,10 +103,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -185,24 +177,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -212,8 +186,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -249,8 +221,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -277,10 +247,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -355,24 +321,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -33,8 +33,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -70,8 +68,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -98,10 +94,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -176,24 +168,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -203,8 +177,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -240,8 +212,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -268,10 +238,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -346,24 +312,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -36,8 +36,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -73,8 +71,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -101,10 +97,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -179,24 +171,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -206,8 +180,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -243,8 +215,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -271,10 +241,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -349,24 +315,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -36,8 +36,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -73,8 +71,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -101,10 +97,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -179,24 +171,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -206,8 +180,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -243,8 +215,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -271,10 +241,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -349,24 +315,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -34,8 +34,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -71,8 +69,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -99,10 +95,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -177,24 +169,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -204,8 +178,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -241,8 +213,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -269,10 +239,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -347,24 +313,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -32,8 +32,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -69,8 +67,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -97,10 +93,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -175,24 +167,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
* `tag`: `String` (OPTIONAL)
|
* `tag`: `String` (OPTIONAL)
|
||||||
@ -202,8 +176,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
`SketchGroup` - A sketch group is a collection of paths.
|
`SketchGroup` - A sketch group is a collection of paths.
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// The plane id or face id of the sketch group.
|
|
||||||
entityId: uuid,
|
|
||||||
// The id of the sketch group.
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// What the sketch is on (can be a plane or a face).
|
// What the sketch is on (can be a plane or a face).
|
||||||
@ -239,8 +211,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
},
|
},
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// the face id the sketch is on
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The original sketch group id of the object we are sketching on.
|
// The original sketch group id of the object we are sketching on.
|
||||||
@ -267,10 +237,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
z: number,
|
z: number,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
// The position of the sketch group.
|
|
||||||
position: [number, number, number],
|
|
||||||
// The rotation of the sketch group base plane.
|
|
||||||
rotation: [number, number, number, number],
|
|
||||||
// The starting path.
|
// The starting path.
|
||||||
start: {
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
@ -345,24 +311,6 @@ const example = extrude(5, exampleSketch)
|
|||||||
to: [number, number],
|
to: [number, number],
|
||||||
type: "Base",
|
type: "Base",
|
||||||
}],
|
}],
|
||||||
// The x-axis of the sketch group base plane in the 3D space
|
|
||||||
xAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The y-axis of the sketch group base plane in the 3D space
|
|
||||||
yAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
// The z-axis of the sketch group base plane in the 3D space
|
|
||||||
zAxis: {
|
|
||||||
x: number,
|
|
||||||
y: number,
|
|
||||||
z: number,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -18,12 +18,16 @@ import {
|
|||||||
TEST_SETTINGS_ONBOARDING_EXPORT,
|
TEST_SETTINGS_ONBOARDING_EXPORT,
|
||||||
TEST_SETTINGS_ONBOARDING_START,
|
TEST_SETTINGS_ONBOARDING_START,
|
||||||
TEST_CODE_GIZMO,
|
TEST_CODE_GIZMO,
|
||||||
|
TEST_SETTINGS_ONBOARDING_USER_MENU,
|
||||||
|
TEST_SETTINGS_ONBOARDING_PARAMETRIC_MODELING,
|
||||||
} from './storageStates'
|
} from './storageStates'
|
||||||
import * as TOML from '@iarna/toml'
|
import * as TOML from '@iarna/toml'
|
||||||
import { LineInputsType } from 'lang/std/sketchcombos'
|
import { LineInputsType } from 'lang/std/sketchcombos'
|
||||||
import { Coords2d } from 'lang/std/sketch'
|
import { Coords2d } from 'lang/std/sketch'
|
||||||
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
import { KCL_DEFAULT_LENGTH } from 'lib/constants'
|
||||||
import { EngineCommand } from 'lang/std/engineConnection'
|
import { EngineCommand } from 'lang/std/engineConnection'
|
||||||
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
|
import { bracket } from 'lib/exampleKcl'
|
||||||
|
|
||||||
/*
|
/*
|
||||||
debug helper: unfortunately we do rely on exact coord mouse clicks in a few places
|
debug helper: unfortunately we do rely on exact coord mouse clicks in a few places
|
||||||
@ -594,6 +598,41 @@ test('if you write kcl with lint errors you get lints', async ({ page }) => {
|
|||||||
await expect(page.locator('.cm-lint-marker-info')).not.toBeVisible()
|
await expect(page.locator('.cm-lint-marker-info')).not.toBeVisible()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('if you fixup kcl errors you clear lints', async ({ page }) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
await page.addInitScript(async () => {
|
||||||
|
localStorage.setItem(
|
||||||
|
'persistCode',
|
||||||
|
`const sketch001 = startSketchOn('XZ')
|
||||||
|
|> startProfileAt([3.29, 7.86], %)
|
||||||
|
|> line([2.48, 2.44], %)
|
||||||
|
|> line([2.66, 1.17], %)
|
||||||
|
|> close(%)
|
||||||
|
`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await page.setViewportSize({ width: 1000, height: 500 })
|
||||||
|
await page.goto('/')
|
||||||
|
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
|
||||||
|
// check no error to begin with
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||||
|
|
||||||
|
await u.codeLocator.click()
|
||||||
|
|
||||||
|
await page.getByText(' |> line([2.48, 2.44], %)').click()
|
||||||
|
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||||
|
await page.keyboard.press('End')
|
||||||
|
await page.keyboard.press('Backspace')
|
||||||
|
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).toBeVisible()
|
||||||
|
await page.keyboard.type(')')
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||||
|
})
|
||||||
|
|
||||||
test('if you write invalid kcl you get inlined errors', async ({ page }) => {
|
test('if you write invalid kcl you get inlined errors', async ({ page }) => {
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
await page.setViewportSize({ width: 1000, height: 500 })
|
await page.setViewportSize({ width: 1000, height: 500 })
|
||||||
@ -951,6 +990,59 @@ test.describe('Can create sketches on all planes and their back sides', () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('Position _ Is Out Of Range... regression test', async ({ page }) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
// const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||||
|
await page.setViewportSize({ width: 1200, height: 500 })
|
||||||
|
await page.addInitScript(async () => {
|
||||||
|
localStorage.setItem(
|
||||||
|
'persistCode',
|
||||||
|
`const exampleSketch = startSketchOn("XZ")
|
||||||
|
|> startProfileAt([0, 0], %)
|
||||||
|
|> angledLine({ angle: 50, length: 45 }, %)
|
||||||
|
|> yLineTo(0, %)
|
||||||
|
|> close(%)
|
||||||
|
|>
|
||||||
|
|
||||||
|
const example = extrude(5, exampleSketch)
|
||||||
|
shell({ faces: ['end'], thickness: 0.25 }, exampleSketch)`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
const lspStartPromise = page.waitForEvent('console', async (message) => {
|
||||||
|
// it would be better to wait for a message that the kcl lsp has started by looking for the message message.text().includes('[lsp] [window/logMessage]')
|
||||||
|
// but that doesn't seem to make it to the console for macos/safari :(
|
||||||
|
if (message.text().includes('start kcl lsp')) {
|
||||||
|
await new Promise((resolve) => setTimeout(resolve, 200))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
await page.goto('/')
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
await lspStartPromise
|
||||||
|
|
||||||
|
// error in guter
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).toBeVisible()
|
||||||
|
|
||||||
|
// error text on hover
|
||||||
|
await page.hover('.cm-lint-marker-error')
|
||||||
|
await expect(page.getByText('Unexpected token').first()).toBeVisible()
|
||||||
|
|
||||||
|
// Okay execution finished, let's start editing text below the error.
|
||||||
|
await u.codeLocator.click()
|
||||||
|
// Go to the end of the editor
|
||||||
|
await page.keyboard.press('End')
|
||||||
|
|
||||||
|
// Get to the area where we want to type.
|
||||||
|
for (let i = 0; i < 20; i++) {
|
||||||
|
await page.keyboard.press('ArrowLeft')
|
||||||
|
}
|
||||||
|
|
||||||
|
await page.keyboard.press('Enter')
|
||||||
|
await page.keyboard.type('thing: "blah"', { delay: 100 })
|
||||||
|
await page.keyboard.press('Enter')
|
||||||
|
})
|
||||||
|
|
||||||
test('Auto complete works', async ({ page }) => {
|
test('Auto complete works', async ({ page }) => {
|
||||||
const u = await getUtils(page)
|
const u = await getUtils(page)
|
||||||
// const PUR = 400 / 37.5 //pixeltoUnitRatio
|
// const PUR = 400 / 37.5 //pixeltoUnitRatio
|
||||||
@ -1252,87 +1344,214 @@ test('Keyboard shortcuts can be viewed through the help menu', async ({
|
|||||||
).toBeAttached()
|
).toBeAttached()
|
||||||
})
|
})
|
||||||
|
|
||||||
test('Click through each onboarding step', async ({ page }) => {
|
test.describe('Onboarding tests', () => {
|
||||||
const u = await getUtils(page)
|
test('Onboarding code is shown in the editor', async ({ page }) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
|
||||||
// Override beforeEach test setup
|
// Override beforeEach test setup
|
||||||
await page.addInitScript(
|
await page.addInitScript(
|
||||||
async ({ settingsKey, settings }) => {
|
async ({ settingsKey }) => {
|
||||||
// Give no initial code, so that the onboarding start is shown immediately
|
// Give no initial code, so that the onboarding start is shown immediately
|
||||||
localStorage.setItem('persistCode', '')
|
localStorage.removeItem('persistCode')
|
||||||
localStorage.setItem(settingsKey, settings)
|
localStorage.removeItem(settingsKey)
|
||||||
},
|
},
|
||||||
{
|
{ settingsKey: TEST_SETTINGS_KEY }
|
||||||
settingsKey: TEST_SETTINGS_KEY,
|
)
|
||||||
settings: TOML.stringify({ settings: TEST_SETTINGS_ONBOARDING_START }),
|
|
||||||
|
await page.setViewportSize({ width: 1200, height: 500 })
|
||||||
|
await page.goto('/')
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
|
||||||
|
// Test that the onboarding pane loaded
|
||||||
|
await expect(page.getByText('Welcome to Modeling App! This')).toBeVisible()
|
||||||
|
|
||||||
|
// *and* that the code is shown in the editor
|
||||||
|
await expect(page.locator('.cm-content')).toContainText('// Shelf Bracket')
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Click through each onboarding step', async ({ page }) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
|
||||||
|
// Override beforeEach test setup
|
||||||
|
await page.addInitScript(
|
||||||
|
async ({ settingsKey, settings }) => {
|
||||||
|
// Give no initial code, so that the onboarding start is shown immediately
|
||||||
|
localStorage.setItem('persistCode', '')
|
||||||
|
localStorage.setItem(settingsKey, settings)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
settingsKey: TEST_SETTINGS_KEY,
|
||||||
|
settings: TOML.stringify({ settings: TEST_SETTINGS_ONBOARDING_START }),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
await page.setViewportSize({ width: 1200, height: 1080 })
|
||||||
|
await page.goto('/')
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
|
||||||
|
// Test that the onboarding pane loaded
|
||||||
|
await expect(page.getByText('Welcome to Modeling App! This')).toBeVisible()
|
||||||
|
|
||||||
|
const nextButton = page.getByTestId('onboarding-next')
|
||||||
|
|
||||||
|
while ((await nextButton.innerText()) !== 'Finish') {
|
||||||
|
await expect(nextButton).toBeVisible()
|
||||||
|
await nextButton.click()
|
||||||
}
|
}
|
||||||
)
|
|
||||||
|
|
||||||
await page.setViewportSize({ width: 1200, height: 1080 })
|
// Finish the onboarding
|
||||||
await page.goto('/')
|
|
||||||
await u.waitForAuthSkipAppStart()
|
|
||||||
|
|
||||||
// Test that the onboarding pane loaded
|
|
||||||
await expect(page.getByText('Welcome to Modeling App! This')).toBeVisible()
|
|
||||||
|
|
||||||
const nextButton = page.getByTestId('onboarding-next')
|
|
||||||
|
|
||||||
while ((await nextButton.innerText()) !== 'Finish') {
|
|
||||||
await expect(nextButton).toBeVisible()
|
await expect(nextButton).toBeVisible()
|
||||||
await nextButton.click()
|
await nextButton.click()
|
||||||
}
|
|
||||||
|
|
||||||
// Finish the onboarding
|
// Test that the onboarding pane is gone
|
||||||
await expect(nextButton).toBeVisible()
|
await expect(page.getByTestId('onboarding-content')).not.toBeVisible()
|
||||||
await nextButton.click()
|
await expect(page.url()).not.toContain('onboarding')
|
||||||
|
})
|
||||||
|
|
||||||
// Test that the onboarding pane is gone
|
test('Onboarding redirects and code updating', async ({ page }) => {
|
||||||
await expect(page.getByTestId('onboarding-content')).not.toBeVisible()
|
const u = await getUtils(page)
|
||||||
await expect(page.url()).not.toContain('onboarding')
|
|
||||||
})
|
|
||||||
|
|
||||||
test('Onboarding redirects and code updating', async ({ page }) => {
|
// Override beforeEach test setup
|
||||||
const u = await getUtils(page)
|
await page.addInitScript(
|
||||||
|
async ({ settingsKey, settings }) => {
|
||||||
|
// Give some initial code, so we can test that it's cleared
|
||||||
|
localStorage.setItem('persistCode', 'const sigmaAllow = 15000')
|
||||||
|
localStorage.setItem(settingsKey, settings)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
settingsKey: TEST_SETTINGS_KEY,
|
||||||
|
settings: TOML.stringify({ settings: TEST_SETTINGS_ONBOARDING_EXPORT }),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// Override beforeEach test setup
|
await page.setViewportSize({ width: 1200, height: 500 })
|
||||||
await page.addInitScript(
|
await page.goto('/')
|
||||||
async ({ settingsKey, settings }) => {
|
await u.waitForAuthSkipAppStart()
|
||||||
// Give some initial code, so we can test that it's cleared
|
|
||||||
localStorage.setItem('persistCode', 'const sigmaAllow = 15000')
|
|
||||||
localStorage.setItem(settingsKey, settings)
|
|
||||||
},
|
|
||||||
{
|
|
||||||
settingsKey: TEST_SETTINGS_KEY,
|
|
||||||
settings: TOML.stringify({ settings: TEST_SETTINGS_ONBOARDING_EXPORT }),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
await page.setViewportSize({ width: 1200, height: 500 })
|
// Test that the redirect happened
|
||||||
await page.goto('/')
|
await expect(page.url().split(':3000').slice(-1)[0]).toBe(
|
||||||
await u.waitForAuthSkipAppStart()
|
`/file/%2Fbrowser%2Fmain.kcl/onboarding/export`
|
||||||
|
)
|
||||||
|
|
||||||
// Test that the redirect happened
|
// Test that you come back to this page when you refresh
|
||||||
await expect(page.url().split(':3000').slice(-1)[0]).toBe(
|
await page.reload()
|
||||||
`/file/%2Fbrowser%2Fmain.kcl/onboarding/export`
|
await expect(page.url().split(':3000').slice(-1)[0]).toBe(
|
||||||
)
|
`/file/%2Fbrowser%2Fmain.kcl/onboarding/export`
|
||||||
|
)
|
||||||
|
|
||||||
// Test that you come back to this page when you refresh
|
// Test that the onboarding pane loaded
|
||||||
await page.reload()
|
const title = page.locator('[data-testid="onboarding-content"]')
|
||||||
await expect(page.url().split(':3000').slice(-1)[0]).toBe(
|
await expect(title).toBeAttached()
|
||||||
`/file/%2Fbrowser%2Fmain.kcl/onboarding/export`
|
|
||||||
)
|
|
||||||
|
|
||||||
// Test that the onboarding pane loaded
|
// Test that the code changes when you advance to the next step
|
||||||
const title = page.locator('[data-testid="onboarding-content"]')
|
await page.locator('[data-testid="onboarding-next"]').click()
|
||||||
await expect(title).toBeAttached()
|
await expect(page.locator('.cm-content')).toHaveText('')
|
||||||
|
|
||||||
// Test that the code changes when you advance to the next step
|
// Test that the code is not empty when you click on the next step
|
||||||
await page.locator('[data-testid="onboarding-next"]').click()
|
await page.locator('[data-testid="onboarding-next"]').click()
|
||||||
await expect(page.locator('.cm-content')).toHaveText('')
|
await expect(page.locator('.cm-content')).toHaveText(/.+/)
|
||||||
|
})
|
||||||
|
|
||||||
// Test that the code is not empty when you click on the next step
|
test('Onboarding code gets reset to demo on Interactive Numbers step', async ({
|
||||||
await page.locator('[data-testid="onboarding-next"]').click()
|
page,
|
||||||
await expect(page.locator('.cm-content')).toHaveText(/.+/)
|
}) => {
|
||||||
|
test.skip(
|
||||||
|
process.platform === 'darwin',
|
||||||
|
"Skip on macOS, because Playwright isn't behaving the same as the actual browser"
|
||||||
|
)
|
||||||
|
const u = await getUtils(page)
|
||||||
|
const badCode = `// This is bad code we shouldn't see`
|
||||||
|
// Override beforeEach test setup
|
||||||
|
await page.addInitScript(
|
||||||
|
async ({ settingsKey, settings, badCode }) => {
|
||||||
|
localStorage.setItem('persistCode', badCode)
|
||||||
|
localStorage.setItem(settingsKey, settings)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
settingsKey: TEST_SETTINGS_KEY,
|
||||||
|
settings: TOML.stringify({
|
||||||
|
settings: TEST_SETTINGS_ONBOARDING_PARAMETRIC_MODELING,
|
||||||
|
}),
|
||||||
|
badCode,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
await page.setViewportSize({ width: 1200, height: 1080 })
|
||||||
|
await page.goto('/')
|
||||||
|
await page.waitForURL('**' + onboardingPaths.PARAMETRIC_MODELING, {
|
||||||
|
waitUntil: 'domcontentloaded',
|
||||||
|
})
|
||||||
|
|
||||||
|
const bracketNoNewLines = bracket.replace(/\n/g, '')
|
||||||
|
|
||||||
|
// Check the code got reset on load
|
||||||
|
await expect(page.locator('#code-pane')).toBeVisible()
|
||||||
|
await expect(u.codeLocator).toHaveText(bracketNoNewLines, {
|
||||||
|
timeout: 10_000,
|
||||||
|
})
|
||||||
|
|
||||||
|
// Mess with the code again
|
||||||
|
await u.codeLocator.selectText()
|
||||||
|
await u.codeLocator.fill(badCode)
|
||||||
|
await expect(u.codeLocator).toHaveText(badCode)
|
||||||
|
|
||||||
|
// Click to the next step
|
||||||
|
await page.locator('[data-testid="onboarding-next"]').click()
|
||||||
|
await page.waitForURL('**' + onboardingPaths.INTERACTIVE_NUMBERS, {
|
||||||
|
waitUntil: 'domcontentloaded',
|
||||||
|
})
|
||||||
|
|
||||||
|
// Check that the code has been reset
|
||||||
|
await expect(u.codeLocator).toHaveText(bracketNoNewLines)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('Avatar text updates depending on image load success', async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
// Override beforeEach test setup
|
||||||
|
await page.addInitScript(
|
||||||
|
async ({ settingsKey, settings }) => {
|
||||||
|
localStorage.setItem(settingsKey, settings)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
settingsKey: TEST_SETTINGS_KEY,
|
||||||
|
settings: TOML.stringify({
|
||||||
|
settings: TEST_SETTINGS_ONBOARDING_USER_MENU,
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
await page.setViewportSize({ width: 1200, height: 1080 })
|
||||||
|
await page.goto('/')
|
||||||
|
await page.waitForURL('**/file/**', { waitUntil: 'domcontentloaded' })
|
||||||
|
|
||||||
|
// Test that the text in this step is correct
|
||||||
|
const avatarLocator = page.getByTestId('user-sidebar-toggle').locator('img')
|
||||||
|
const onboardingOverlayLocator = page
|
||||||
|
.getByTestId('onboarding-content')
|
||||||
|
.locator('div')
|
||||||
|
.nth(1)
|
||||||
|
|
||||||
|
// Expect the avatar to be visible and for the text to reference it
|
||||||
|
await expect(avatarLocator).toBeVisible()
|
||||||
|
await expect(onboardingOverlayLocator).toBeVisible()
|
||||||
|
await expect(onboardingOverlayLocator).toContainText('your avatar')
|
||||||
|
|
||||||
|
await page.route('https://lh3.googleusercontent.com/**', async (route) => {
|
||||||
|
await route.fulfill({
|
||||||
|
status: 404,
|
||||||
|
contentType: 'text/plain',
|
||||||
|
body: 'Not Found!',
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
await page.reload({ waitUntil: 'domcontentloaded' })
|
||||||
|
|
||||||
|
// Now expect the text to be different
|
||||||
|
await expect(avatarLocator).not.toBeVisible()
|
||||||
|
await expect(onboardingOverlayLocator).toBeVisible()
|
||||||
|
await expect(onboardingOverlayLocator).toContainText('the menu button')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
test.describe('Testing selections', () => {
|
test.describe('Testing selections', () => {
|
||||||
@ -1632,6 +1851,74 @@ test.describe('Testing selections', () => {
|
|||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
await expect(page.getByTestId('hover-highlight')).not.toBeVisible()
|
||||||
})
|
})
|
||||||
|
test("Extrude button should be disabled if there's no extrudable geometry when nothing is selected", async ({
|
||||||
|
page,
|
||||||
|
}) => {
|
||||||
|
const u = await getUtils(page)
|
||||||
|
await page.addInitScript(async () => {
|
||||||
|
localStorage.setItem(
|
||||||
|
'persistCode',
|
||||||
|
`const sketch001 = startSketchOn('XZ')
|
||||||
|
|> startProfileAt([3.29, 7.86], %)
|
||||||
|
|> line([2.48, 2.44], %)
|
||||||
|
|> line([2.66, 1.17], %)
|
||||||
|
|> line([3.75, 0.46], %)
|
||||||
|
|> line([4.99, -0.46], %, 'seg01')
|
||||||
|
|> line([3.3, -2.12], %)
|
||||||
|
|> line([2.16, -3.33], %)
|
||||||
|
|> line([0.85, -3.08], %)
|
||||||
|
|> line([-0.18, -3.36], %)
|
||||||
|
|> line([-3.86, -2.73], %)
|
||||||
|
|> line([-17.67, 0.85], %)
|
||||||
|
|> close(%)
|
||||||
|
const extrude001 = extrude(10, sketch001)
|
||||||
|
`
|
||||||
|
)
|
||||||
|
})
|
||||||
|
await page.setViewportSize({ width: 1000, height: 500 })
|
||||||
|
await page.goto('/')
|
||||||
|
await u.waitForAuthSkipAppStart()
|
||||||
|
|
||||||
|
// wait for execution done
|
||||||
|
await u.openDebugPanel()
|
||||||
|
await u.expectCmdLog('[data-message-type="execution-done"]')
|
||||||
|
await u.closeDebugPanel()
|
||||||
|
|
||||||
|
const selectUnExtrudable = () =>
|
||||||
|
page.getByText(`line([4.99, -0.46], %, 'seg01')`).click()
|
||||||
|
const clickEmpty = () => page.mouse.click(700, 460)
|
||||||
|
await selectUnExtrudable()
|
||||||
|
// expect extrude button to be disabled
|
||||||
|
await expect(page.getByRole('button', { name: 'Extrude' })).toBeDisabled()
|
||||||
|
|
||||||
|
await clickEmpty()
|
||||||
|
|
||||||
|
// expect active line to contain nothing
|
||||||
|
await expect(page.locator('.cm-activeLine')).toHaveText('')
|
||||||
|
// and extrude to still be disabled
|
||||||
|
await expect(page.getByRole('button', { name: 'Extrude' })).toBeDisabled()
|
||||||
|
|
||||||
|
const codeToAdd = `${await u.codeLocator.allInnerTexts()}
|
||||||
|
const sketch002 = startSketchOn(extrude001, 'seg01')
|
||||||
|
|> startProfileAt([-12.94, 6.6], %)
|
||||||
|
|> line([2.45, -0.2], %)
|
||||||
|
|> line([-2, -1.25], %)
|
||||||
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||||
|
|> close(%)
|
||||||
|
`
|
||||||
|
await u.codeLocator.fill(codeToAdd)
|
||||||
|
|
||||||
|
await selectUnExtrudable()
|
||||||
|
// expect extrude button to be disabled
|
||||||
|
await expect(page.getByRole('button', { name: 'Extrude' })).toBeDisabled()
|
||||||
|
|
||||||
|
await clickEmpty()
|
||||||
|
await expect(page.locator('.cm-activeLine')).toHaveText('')
|
||||||
|
// there's not extrudable geometry, so button should be enabled
|
||||||
|
await expect(
|
||||||
|
page.getByRole('button', { name: 'Extrude' })
|
||||||
|
).not.toBeDisabled()
|
||||||
|
})
|
||||||
|
|
||||||
test('Testing selections (and hovers) work on sketches when NOT in sketch mode', async ({
|
test('Testing selections (and hovers) work on sketches when NOT in sketch mode', async ({
|
||||||
page,
|
page,
|
||||||
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
@ -1,5 +1,6 @@
|
|||||||
import { SaveSettingsPayload } from 'lib/settings/settingsTypes'
|
import { SaveSettingsPayload } from 'lib/settings/settingsTypes'
|
||||||
import { Themes } from 'lib/theme'
|
import { Themes } from 'lib/theme'
|
||||||
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
|
|
||||||
export const TEST_SETTINGS_KEY = '/settings.toml'
|
export const TEST_SETTINGS_KEY = '/settings.toml'
|
||||||
export const TEST_SETTINGS = {
|
export const TEST_SETTINGS = {
|
||||||
@ -22,9 +23,22 @@ export const TEST_SETTINGS = {
|
|||||||
},
|
},
|
||||||
} satisfies Partial<SaveSettingsPayload>
|
} satisfies Partial<SaveSettingsPayload>
|
||||||
|
|
||||||
|
export const TEST_SETTINGS_ONBOARDING_USER_MENU = {
|
||||||
|
...TEST_SETTINGS,
|
||||||
|
app: { ...TEST_SETTINGS.app, onboardingStatus: onboardingPaths.USER_MENU },
|
||||||
|
} satisfies Partial<SaveSettingsPayload>
|
||||||
|
|
||||||
export const TEST_SETTINGS_ONBOARDING_EXPORT = {
|
export const TEST_SETTINGS_ONBOARDING_EXPORT = {
|
||||||
...TEST_SETTINGS,
|
...TEST_SETTINGS,
|
||||||
app: { ...TEST_SETTINGS.app, onboardingStatus: '/export' },
|
app: { ...TEST_SETTINGS.app, onboardingStatus: onboardingPaths.EXPORT },
|
||||||
|
} satisfies Partial<SaveSettingsPayload>
|
||||||
|
|
||||||
|
export const TEST_SETTINGS_ONBOARDING_PARAMETRIC_MODELING = {
|
||||||
|
...TEST_SETTINGS,
|
||||||
|
app: {
|
||||||
|
...TEST_SETTINGS.app,
|
||||||
|
onboardingStatus: onboardingPaths.PARAMETRIC_MODELING,
|
||||||
|
},
|
||||||
} satisfies Partial<SaveSettingsPayload>
|
} satisfies Partial<SaveSettingsPayload>
|
||||||
|
|
||||||
export const TEST_SETTINGS_ONBOARDING_START = {
|
export const TEST_SETTINGS_ONBOARDING_START = {
|
||||||
|
@ -2,6 +2,7 @@ import { browser, $, expect } from '@wdio/globals'
|
|||||||
import fs from 'fs/promises'
|
import fs from 'fs/promises'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import os from 'os'
|
import os from 'os'
|
||||||
|
import { click, setDatasetValue } from '../utils'
|
||||||
|
|
||||||
const isWin32 = os.platform() === 'win32'
|
const isWin32 = os.platform() === 'win32'
|
||||||
const documentsDir = path.join(os.homedir(), 'Documents')
|
const documentsDir = path.join(os.homedir(), 'Documents')
|
||||||
@ -15,25 +16,8 @@ const newProjectDir = path.join(documentsDir, 'a-different-directory')
|
|||||||
const tmp = process.env.TEMP || '/tmp'
|
const tmp = process.env.TEMP || '/tmp'
|
||||||
const userCodeDir = path.join(tmp, 'kittycad_user_code')
|
const userCodeDir = path.join(tmp, 'kittycad_user_code')
|
||||||
|
|
||||||
async function click(element: WebdriverIO.Element): Promise<void> {
|
describe('ZMA sign in flow', () => {
|
||||||
// Workaround for .click(), see https://github.com/tauri-apps/tauri/issues/6541
|
before(async () => {
|
||||||
await element.waitForClickable()
|
|
||||||
await browser.execute('arguments[0].click();', element)
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Shoutout to @Sheap on Github for a great workaround utility:
|
|
||||||
* https://github.com/tauri-apps/tauri/issues/6541#issue-1638944060
|
|
||||||
*/
|
|
||||||
async function setDatasetValue(
|
|
||||||
field: WebdriverIO.Element,
|
|
||||||
property: string,
|
|
||||||
value: string
|
|
||||||
) {
|
|
||||||
await browser.execute(`arguments[0].dataset.${property} = "${value}"`, field)
|
|
||||||
}
|
|
||||||
|
|
||||||
describe('ZMA (Tauri)', () => {
|
|
||||||
it('opens the auth page and signs in', async () => {
|
|
||||||
// Clean up filesystem from previous tests
|
// Clean up filesystem from previous tests
|
||||||
await new Promise((resolve) => setTimeout(resolve, 100))
|
await new Promise((resolve) => setTimeout(resolve, 100))
|
||||||
await fs.rm(defaultProjectDir, { force: true, recursive: true })
|
await fs.rm(defaultProjectDir, { force: true, recursive: true })
|
||||||
@ -42,7 +26,9 @@ describe('ZMA (Tauri)', () => {
|
|||||||
await fs.rm(userSettingsDir, { force: true, recursive: true })
|
await fs.rm(userSettingsDir, { force: true, recursive: true })
|
||||||
await fs.mkdir(defaultProjectDir, { recursive: true })
|
await fs.mkdir(defaultProjectDir, { recursive: true })
|
||||||
await fs.mkdir(newProjectDir, { recursive: true })
|
await fs.mkdir(newProjectDir, { recursive: true })
|
||||||
|
})
|
||||||
|
|
||||||
|
it('opens the auth page and signs in', async () => {
|
||||||
const signInButton = await $('[data-testid="sign-in-button"]')
|
const signInButton = await $('[data-testid="sign-in-button"]')
|
||||||
expect(await signInButton.getText()).toEqual('Sign in')
|
expect(await signInButton.getText()).toEqual('Sign in')
|
||||||
|
|
||||||
@ -82,6 +68,10 @@ describe('ZMA (Tauri)', () => {
|
|||||||
const newFileButton = await $('[data-testid="home-new-file"]')
|
const newFileButton = await $('[data-testid="home-new-file"]')
|
||||||
expect(await newFileButton.getText()).toEqual('New project')
|
expect(await newFileButton.getText()).toEqual('New project')
|
||||||
})
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('ZMA authorized user flows', () => {
|
||||||
|
// Note: each flow below is intended to start *and* end from the home page
|
||||||
|
|
||||||
it('opens the settings page, checks filesystem settings, and closes the settings page', async () => {
|
it('opens the settings page, checks filesystem settings, and closes the settings page', async () => {
|
||||||
const menuButton = await $('[data-testid="user-sidebar-toggle"]')
|
const menuButton = await $('[data-testid="user-sidebar-toggle"]')
|
||||||
@ -150,7 +140,9 @@ describe('ZMA (Tauri)', () => {
|
|||||||
const base = isWin32 ? 'http://tauri.localhost' : 'tauri://localhost'
|
const base = isWin32 ? 'http://tauri.localhost' : 'tauri://localhost'
|
||||||
await browser.execute(`window.location.href = "${base}/home"`)
|
await browser.execute(`window.location.href = "${base}/home"`)
|
||||||
})
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('ZMA sign out flow', () => {
|
||||||
it('signs out', async () => {
|
it('signs out', async () => {
|
||||||
await new Promise((resolve) => setTimeout(resolve, 1000))
|
await new Promise((resolve) => setTimeout(resolve, 1000))
|
||||||
const menuButton = await $('[data-testid="user-sidebar-toggle"]')
|
const menuButton = await $('[data-testid="user-sidebar-toggle"]')
|
18
e2e/tauri/utils.ts
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { browser } from '@wdio/globals'
|
||||||
|
|
||||||
|
export async function click(element: WebdriverIO.Element): Promise<void> {
|
||||||
|
// Workaround for .click(), see https://github.com/tauri-apps/tauri/issues/6541
|
||||||
|
await element.waitForClickable()
|
||||||
|
await browser.execute('arguments[0].click();', element)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Shoutout to @Sheap on Github for a great workaround utility:
|
||||||
|
* https://github.com/tauri-apps/tauri/issues/6541#issue-1638944060
|
||||||
|
*/
|
||||||
|
export async function setDatasetValue(
|
||||||
|
field: WebdriverIO.Element,
|
||||||
|
property: string,
|
||||||
|
value: string
|
||||||
|
) {
|
||||||
|
await browser.execute(`arguments[0].dataset.${property} = "${value}"`, field)
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "untitled-app",
|
"name": "untitled-app",
|
||||||
"version": "0.22.2",
|
"version": "0.22.4",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@codemirror/autocomplete": "^6.16.0",
|
"@codemirror/autocomplete": "^6.16.0",
|
||||||
|
254
src-tauri/Cargo.lock
generated
@ -2358,124 +2358,6 @@ dependencies = [
|
|||||||
"png",
|
"png",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_collections"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_locid"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"litemap",
|
|
||||||
"tinystr",
|
|
||||||
"writeable",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_locid_transform"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_locid",
|
|
||||||
"icu_locid_transform_data",
|
|
||||||
"icu_provider",
|
|
||||||
"tinystr",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_locid_transform_data"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_normalizer"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_collections",
|
|
||||||
"icu_normalizer_data",
|
|
||||||
"icu_properties",
|
|
||||||
"icu_provider",
|
|
||||||
"smallvec",
|
|
||||||
"utf16_iter",
|
|
||||||
"utf8_iter",
|
|
||||||
"write16",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_normalizer_data"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_properties"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1f8ac670d7422d7f76b32e17a5db556510825b29ec9154f235977c9caba61036"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_collections",
|
|
||||||
"icu_locid_transform",
|
|
||||||
"icu_properties_data",
|
|
||||||
"icu_provider",
|
|
||||||
"tinystr",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_properties_data"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_provider"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"icu_locid",
|
|
||||||
"icu_provider_macros",
|
|
||||||
"stable_deref_trait",
|
|
||||||
"tinystr",
|
|
||||||
"writeable",
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "icu_provider_macros"
|
|
||||||
version = "1.5.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.66",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ident_case"
|
name = "ident_case"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -2502,18 +2384,6 @@ dependencies = [
|
|||||||
"unicode-normalization",
|
"unicode-normalization",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "idna"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "4716a3a0933a1d01c2f72450e89596eb51dd34ef3c211ccd875acdf1f8fe47ed"
|
|
||||||
dependencies = [
|
|
||||||
"icu_normalizer",
|
|
||||||
"icu_properties",
|
|
||||||
"smallvec",
|
|
||||||
"utf8_iter",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "indexmap"
|
name = "indexmap"
|
||||||
version = "1.9.3"
|
version = "1.9.3"
|
||||||
@ -2888,12 +2758,6 @@ version = "0.4.14"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
|
checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "litemap"
|
|
||||||
version = "0.7.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.12"
|
version = "0.4.12"
|
||||||
@ -5953,16 +5817,6 @@ dependencies = [
|
|||||||
"crunchy",
|
"crunchy",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "tinystr"
|
|
||||||
version = "0.7.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
|
|
||||||
dependencies = [
|
|
||||||
"displaydoc",
|
|
||||||
"zerovec",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tinyvec"
|
name = "tinyvec"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
@ -6322,10 +6176,12 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ts-rs"
|
name = "ts-rs"
|
||||||
version = "8.1.0"
|
version = "9.0.0"
|
||||||
source = "git+https://github.com/Aleph-Alpha/ts-rs#be0349d5fb07a8ccab713887a61e90e3bc773c7a"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5e2dcf58e612adda9a83800731e8e4aba04d8a302b9029617b0b6e4b021d5357"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"serde_json",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"ts-rs-macros",
|
"ts-rs-macros",
|
||||||
"url",
|
"url",
|
||||||
@ -6334,8 +6190,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ts-rs-macros"
|
name = "ts-rs-macros"
|
||||||
version = "8.1.0"
|
version = "9.0.0"
|
||||||
source = "git+https://github.com/Aleph-Alpha/ts-rs#be0349d5fb07a8ccab713887a61e90e3bc773c7a"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbdee324e50a7402416d9c25270d3df4241ed528af5d36dda18b6f219551c577"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -6471,12 +6328,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.5.1"
|
version = "2.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f7c25da092f0a868cdf09e8674cd3b7ef3a7d92a24253e663a2fb85e2496de56"
|
checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"form_urlencoded",
|
"form_urlencoded",
|
||||||
"idna 1.0.0",
|
"idna 0.5.0",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
@ -6500,24 +6357,12 @@ version = "0.7.6"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
|
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "utf16_iter"
|
|
||||||
version = "1.0.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "utf8-width"
|
name = "utf8-width"
|
||||||
version = "0.1.7"
|
version = "0.1.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
|
checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "utf8_iter"
|
|
||||||
version = "1.0.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "utf8parse"
|
name = "utf8parse"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
@ -7272,18 +7117,6 @@ dependencies = [
|
|||||||
"windows-sys 0.48.0",
|
"windows-sys 0.48.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "write16"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "writeable"
|
|
||||||
version = "0.5.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wry"
|
name = "wry"
|
||||||
version = "0.40.1"
|
version = "0.40.1"
|
||||||
@ -7386,30 +7219,6 @@ dependencies = [
|
|||||||
"linked-hash-map",
|
"linked-hash-map",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "yoke"
|
|
||||||
version = "0.7.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
"stable_deref_trait",
|
|
||||||
"yoke-derive",
|
|
||||||
"zerofrom",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "yoke-derive"
|
|
||||||
version = "0.7.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.66",
|
|
||||||
"synstructure",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zbus"
|
name = "zbus"
|
||||||
version = "4.3.0"
|
version = "4.3.0"
|
||||||
@ -7487,55 +7296,12 @@ dependencies = [
|
|||||||
"syn 2.0.66",
|
"syn 2.0.66",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerofrom"
|
|
||||||
version = "0.1.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
|
|
||||||
dependencies = [
|
|
||||||
"zerofrom-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerofrom-derive"
|
|
||||||
version = "0.1.4"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.66",
|
|
||||||
"synstructure",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zeroize"
|
name = "zeroize"
|
||||||
version = "1.8.1"
|
version = "1.8.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
|
checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerovec"
|
|
||||||
version = "0.10.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "bb2cc8827d6c0994478a15c53f374f46fbd41bea663d809b14744bc42e6b109c"
|
|
||||||
dependencies = [
|
|
||||||
"yoke",
|
|
||||||
"zerofrom",
|
|
||||||
"zerovec-derive",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "zerovec-derive"
|
|
||||||
version = "0.10.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "97cf56601ee5052b4417d90c8755c6683473c926039908196cf35d99f893ebe7"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.66",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "zip"
|
name = "zip"
|
||||||
version = "2.1.3"
|
version = "2.1.3"
|
||||||
|
@ -75,5 +75,5 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"productName": "Zoo Modeling App",
|
"productName": "Zoo Modeling App",
|
||||||
"version": "0.22.2"
|
"version": "0.22.4"
|
||||||
}
|
}
|
||||||
|
@ -32,9 +32,7 @@ import {
|
|||||||
SKETCH_GROUP_SEGMENTS,
|
SKETCH_GROUP_SEGMENTS,
|
||||||
SKETCH_LAYER,
|
SKETCH_LAYER,
|
||||||
X_AXIS,
|
X_AXIS,
|
||||||
XZ_PLANE,
|
|
||||||
Y_AXIS,
|
Y_AXIS,
|
||||||
YZ_PLANE,
|
|
||||||
} from './sceneInfra'
|
} from './sceneInfra'
|
||||||
import { isQuaternionVertical, quaternionFromUpNForward } from './helpers'
|
import { isQuaternionVertical, quaternionFromUpNForward } from './helpers'
|
||||||
import {
|
import {
|
||||||
@ -345,11 +343,8 @@ export class SceneEntities {
|
|||||||
pathToNode: sketchPathToNode,
|
pathToNode: sketchPathToNode,
|
||||||
}
|
}
|
||||||
const dummy = new Mesh()
|
const dummy = new Mesh()
|
||||||
dummy.position.set(
|
// TODO: When we actually have sketch positions and rotations we can use them here.
|
||||||
sketchGroup.position[0],
|
dummy.position.set(0, 0, 0)
|
||||||
sketchGroup.position[1],
|
|
||||||
sketchGroup.position[2]
|
|
||||||
)
|
|
||||||
const orthoFactor = orthoScale(sceneInfra.camControls.camera)
|
const orthoFactor = orthoScale(sceneInfra.camControls.camera)
|
||||||
const factor =
|
const factor =
|
||||||
(sceneInfra.camControls.camera instanceof OrthographicCamera
|
(sceneInfra.camControls.camera instanceof OrthographicCamera
|
||||||
@ -1399,7 +1394,6 @@ export class SceneEntities {
|
|||||||
streamDimensions
|
streamDimensions
|
||||||
)
|
)
|
||||||
let _entity_id = entity_id
|
let _entity_id = entity_id
|
||||||
console.log('things', _entity_id, rest)
|
|
||||||
if (!_entity_id) return
|
if (!_entity_id) return
|
||||||
if (
|
if (
|
||||||
engineCommandManager.defaultPlanes?.xy === _entity_id ||
|
engineCommandManager.defaultPlanes?.xy === _entity_id ||
|
||||||
@ -1428,7 +1422,6 @@ export class SceneEntities {
|
|||||||
.sub(sceneInfra.camControls.target)
|
.sub(sceneInfra.camControls.target)
|
||||||
|
|
||||||
if (engineCommandManager.defaultPlanes?.xy === _entity_id) {
|
if (engineCommandManager.defaultPlanes?.xy === _entity_id) {
|
||||||
console.log('XY')
|
|
||||||
zAxis = [0, 0, 1]
|
zAxis = [0, 0, 1]
|
||||||
yAxis = [0, 1, 0]
|
yAxis = [0, 1, 0]
|
||||||
if (camVector.z < 0) {
|
if (camVector.z < 0) {
|
||||||
@ -1436,7 +1429,6 @@ export class SceneEntities {
|
|||||||
_entity_id = engineCommandManager.defaultPlanes?.negXy || ''
|
_entity_id = engineCommandManager.defaultPlanes?.negXy || ''
|
||||||
}
|
}
|
||||||
} else if (engineCommandManager.defaultPlanes?.yz === _entity_id) {
|
} else if (engineCommandManager.defaultPlanes?.yz === _entity_id) {
|
||||||
console.log('YZ')
|
|
||||||
zAxis = [1, 0, 0]
|
zAxis = [1, 0, 0]
|
||||||
yAxis = [0, 0, 1]
|
yAxis = [0, 0, 1]
|
||||||
if (camVector.x < 0) {
|
if (camVector.x < 0) {
|
||||||
@ -1444,7 +1436,6 @@ export class SceneEntities {
|
|||||||
_entity_id = engineCommandManager.defaultPlanes?.negYz || ''
|
_entity_id = engineCommandManager.defaultPlanes?.negYz || ''
|
||||||
}
|
}
|
||||||
} else if (engineCommandManager.defaultPlanes?.xz === _entity_id) {
|
} else if (engineCommandManager.defaultPlanes?.xz === _entity_id) {
|
||||||
console.log('XZ')
|
|
||||||
zAxis = [0, 1, 0]
|
zAxis = [0, 1, 0]
|
||||||
yAxis = [0, 0, 1]
|
yAxis = [0, 0, 1]
|
||||||
_entity_id = engineCommandManager.defaultPlanes?.negXz || ''
|
_entity_id = engineCommandManager.defaultPlanes?.negXz || ''
|
||||||
@ -1498,6 +1489,7 @@ export class SceneEntities {
|
|||||||
kclManager.ast,
|
kclManager.ast,
|
||||||
artifact.range
|
artifact.range
|
||||||
)
|
)
|
||||||
|
|
||||||
const extrudePathToNode = extrusions?.range
|
const extrudePathToNode = extrusions?.range
|
||||||
? getNodePathFromSourceRange(kclManager.ast, extrusions.range)
|
? getNodePathFromSourceRange(kclManager.ast, extrusions.range)
|
||||||
: []
|
: []
|
||||||
@ -1806,7 +1798,7 @@ export function getSketchQuaternion(
|
|||||||
ast: kclManager.ast,
|
ast: kclManager.ast,
|
||||||
programMemory: kclManager.programMemory,
|
programMemory: kclManager.programMemory,
|
||||||
})
|
})
|
||||||
const zAxis = sketchGroup?.zAxis || sketchNormalBackUp
|
const zAxis = sketchGroup?.on.zAxis || sketchNormalBackUp
|
||||||
return getQuaternionFromZAxis(massageFormats(zAxis))
|
return getQuaternionFromZAxis(massageFormats(zAxis))
|
||||||
}
|
}
|
||||||
export async function getSketchOrientationDetails(
|
export async function getSketchOrientationDetails(
|
||||||
@ -1821,20 +1813,24 @@ export async function getSketchOrientationDetails(
|
|||||||
programMemory: kclManager.programMemory,
|
programMemory: kclManager.programMemory,
|
||||||
})
|
})
|
||||||
if (sketchGroup.on.type === 'plane') {
|
if (sketchGroup.on.type === 'plane') {
|
||||||
const zAxis = sketchGroup?.zAxis
|
const zAxis = sketchGroup?.on.zAxis
|
||||||
return {
|
return {
|
||||||
quat: getQuaternionFromZAxis(massageFormats(zAxis)),
|
quat: getQuaternionFromZAxis(massageFormats(zAxis)),
|
||||||
sketchDetails: {
|
sketchDetails: {
|
||||||
sketchPathToNode,
|
sketchPathToNode,
|
||||||
zAxis: [zAxis.x, zAxis.y, zAxis.z],
|
zAxis: [zAxis.x, zAxis.y, zAxis.z],
|
||||||
yAxis: [sketchGroup.yAxis.x, sketchGroup.yAxis.y, sketchGroup.yAxis.z],
|
yAxis: [
|
||||||
|
sketchGroup.on.yAxis.x,
|
||||||
|
sketchGroup.on.yAxis.y,
|
||||||
|
sketchGroup.on.yAxis.z,
|
||||||
|
],
|
||||||
origin: [0, 0, 0],
|
origin: [0, 0, 0],
|
||||||
faceId: sketchGroup.on.id,
|
faceId: sketchGroup.on.id,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sketchGroup.on.type === 'face') {
|
if (sketchGroup.on.type === 'face') {
|
||||||
const faceInfo = await getFaceDetails(sketchGroup.on.faceId)
|
const faceInfo = await getFaceDetails(sketchGroup.on.id)
|
||||||
|
|
||||||
if (!faceInfo?.origin || !faceInfo?.z_axis || !faceInfo?.y_axis)
|
if (!faceInfo?.origin || !faceInfo?.z_axis || !faceInfo?.y_axis)
|
||||||
throw new Error('faceInfo')
|
throw new Error('faceInfo')
|
||||||
@ -1850,7 +1846,7 @@ export async function getSketchOrientationDetails(
|
|||||||
zAxis: [z_axis.x, z_axis.y, z_axis.z],
|
zAxis: [z_axis.x, z_axis.y, z_axis.z],
|
||||||
yAxis: [y_axis.x, y_axis.y, y_axis.z],
|
yAxis: [y_axis.x, y_axis.y, y_axis.z],
|
||||||
origin: [origin.x, origin.y, origin.z],
|
origin: [origin.x, origin.y, origin.z],
|
||||||
faceId: sketchGroup.on.faceId,
|
faceId: sketchGroup.on.id,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,6 @@ import {
|
|||||||
TANGENTIAL_ARC_TO_SEGMENT,
|
TANGENTIAL_ARC_TO_SEGMENT,
|
||||||
getParentGroup,
|
getParentGroup,
|
||||||
getSketchOrientationDetails,
|
getSketchOrientationDetails,
|
||||||
getSketchQuaternion,
|
|
||||||
} from 'clientSideScene/sceneEntities'
|
} from 'clientSideScene/sceneEntities'
|
||||||
import {
|
import {
|
||||||
moveValueIntoNewVariablePath,
|
moveValueIntoNewVariablePath,
|
||||||
@ -64,6 +63,7 @@ import {
|
|||||||
import {
|
import {
|
||||||
getNodeFromPath,
|
getNodeFromPath,
|
||||||
getNodePathFromSourceRange,
|
getNodePathFromSourceRange,
|
||||||
|
hasExtrudableGeometry,
|
||||||
isSingleCursorInPipe,
|
isSingleCursorInPipe,
|
||||||
} from 'lang/queryAst'
|
} from 'lang/queryAst'
|
||||||
import { TEST } from 'env'
|
import { TEST } from 'env'
|
||||||
@ -122,7 +122,24 @@ export const ModelingMachineProvider = ({
|
|||||||
htmlRef,
|
htmlRef,
|
||||||
token
|
token
|
||||||
)
|
)
|
||||||
useHotkeyWrapper(['meta + shift + .'], () => coreDump(coreDumpManager, true))
|
useHotkeyWrapper(['meta + shift + .'], () => {
|
||||||
|
console.warn('CoreDump: Initializing core dump')
|
||||||
|
toast.promise(
|
||||||
|
coreDump(coreDumpManager, true),
|
||||||
|
{
|
||||||
|
loading: 'Starting core dump...',
|
||||||
|
success: 'Core dump completed successfully',
|
||||||
|
error: 'Error while exporting core dump',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
success: {
|
||||||
|
// Note: this extended duration is especially important for Playwright e2e testing
|
||||||
|
// default duration is 2000 - https://react-hot-toast.com/docs/toast#default-durations
|
||||||
|
duration: 6000,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
// Settings machine setup
|
// Settings machine setup
|
||||||
// const retrievedSettings = useRef(
|
// const retrievedSettings = useRef(
|
||||||
@ -431,8 +448,13 @@ export const ModelingMachineProvider = ({
|
|||||||
if (
|
if (
|
||||||
selectionRanges.codeBasedSelections.length === 0 ||
|
selectionRanges.codeBasedSelections.length === 0 ||
|
||||||
isSelectionLastLine(selectionRanges, codeManager.code)
|
isSelectionLastLine(selectionRanges, codeManager.code)
|
||||||
)
|
) {
|
||||||
return true
|
// they have no selection, we should enable the button
|
||||||
|
// so they can select the face through the cmdbar
|
||||||
|
// BUT only if there's extrudable geometry
|
||||||
|
if (hasExtrudableGeometry(kclManager.ast)) return true
|
||||||
|
return false
|
||||||
|
}
|
||||||
if (!isPipe) return false
|
if (!isPipe) return false
|
||||||
|
|
||||||
return canExtrudeSelection(selectionRanges)
|
return canExtrudeSelection(selectionRanges)
|
||||||
@ -485,6 +507,7 @@ export const ModelingMachineProvider = ({
|
|||||||
},
|
},
|
||||||
'animate-to-face': async (_, { data }) => {
|
'animate-to-face': async (_, { data }) => {
|
||||||
if (data.type === 'extrudeFace') {
|
if (data.type === 'extrudeFace') {
|
||||||
|
console.log('data', data)
|
||||||
const { modifiedAst, pathToNode: pathToNewSketchNode } =
|
const { modifiedAst, pathToNode: pathToNewSketchNode } =
|
||||||
sketchOnExtrudedFace(
|
sketchOnExtrudedFace(
|
||||||
kclManager.ast,
|
kclManager.ast,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
@apply relative z-0 rounded-r max-w-full h-full flex-1;
|
@apply relative z-0 rounded-r max-w-full h-full flex-1;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-rows: auto 1fr;
|
grid-template-rows: auto 1fr;
|
||||||
@apply bg-chalkboard-10/50 backdrop-blur-sm border border-chalkboard-20;
|
@apply bg-chalkboard-10/50 focus-within:bg-chalkboard-10/90 backdrop-blur-sm border border-chalkboard-20;
|
||||||
scroll-margin-block-start: 41px;
|
scroll-margin-block-start: 41px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12,7 +12,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
:global(.dark) .panel {
|
:global(.dark) .panel {
|
||||||
@apply bg-chalkboard-100/50 backdrop-blur-[3px] border-chalkboard-80;
|
@apply bg-chalkboard-100/50 focus-within:bg-chalkboard-100/90 backdrop-blur-[3px] border-chalkboard-80;
|
||||||
}
|
}
|
||||||
|
|
||||||
.header {
|
.header {
|
||||||
|
@ -46,7 +46,11 @@ export const ModelingPane = ({
|
|||||||
data-testid={detailsTestId}
|
data-testid={detailsTestId}
|
||||||
id={id}
|
id={id}
|
||||||
className={
|
className={
|
||||||
pointerEventsCssClass + styles.panel + ' group ' + (className || '')
|
'group-focus-within:border-primary dark:group-focus-within:border-chalkboard-50 ' +
|
||||||
|
pointerEventsCssClass +
|
||||||
|
styles.panel +
|
||||||
|
' group ' +
|
||||||
|
(className || '')
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<ModelingPaneHeader title={title} Menu={Menu} />
|
<ModelingPaneHeader title={title} Menu={Menu} />
|
||||||
|
@ -43,20 +43,16 @@ describe('processMemory', () => {
|
|||||||
theExtrude: [
|
theExtrude: [
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
|
faceId: expect.any(String),
|
||||||
sourceRange: [170, 194],
|
sourceRange: [170, 194],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
|
faceId: expect.any(String),
|
||||||
sourceRange: [202, 230],
|
sourceRange: [202, 230],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -123,70 +123,73 @@ function ModelingSidebarSection({
|
|||||||
}, [showDebugPanel.current, togglePane, openPanes])
|
}, [showDebugPanel.current, togglePane, openPanes])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Tab.Group
|
<div className="group contents">
|
||||||
vertical
|
<Tab.Group
|
||||||
selectedIndex={
|
vertical
|
||||||
currentPane === 'none' ? 0 : paneIds.indexOf(currentPane) + 1
|
selectedIndex={
|
||||||
}
|
currentPane === 'none' ? 0 : paneIds.indexOf(currentPane) + 1
|
||||||
onChange={(index) => {
|
|
||||||
const newPane = index === 0 ? 'none' : paneIds[index - 1]
|
|
||||||
togglePane(newPane)
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Tab.List
|
|
||||||
className={
|
|
||||||
'pointer-events-auto ' +
|
|
||||||
(alignButtons === 'start'
|
|
||||||
? 'justify-start self-start'
|
|
||||||
: 'justify-end self-end') +
|
|
||||||
(currentPane === 'none'
|
|
||||||
? ' rounded-r focus-within:!border-primary/50'
|
|
||||||
: ' border-r-0') +
|
|
||||||
' p-2 col-start-1 col-span-1 h-fit w-fit flex flex-col items-start gap-2 bg-chalkboard-10 border border-solid border-chalkboard-20 dark:bg-chalkboard-90 dark:border-chalkboard-80 ' +
|
|
||||||
(openPanes.length === 1 && currentPane === 'none' ? 'pr-0.5' : '')
|
|
||||||
}
|
}
|
||||||
|
onChange={(index) => {
|
||||||
|
const newPane = index === 0 ? 'none' : paneIds[index - 1]
|
||||||
|
togglePane(newPane)
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<Tab key="none" className="sr-only">
|
<Tab.List
|
||||||
No panes open
|
className={
|
||||||
</Tab>
|
'pointer-events-auto ' +
|
||||||
{filteredPanes.map((pane) => (
|
(alignButtons === 'start'
|
||||||
<ModelingPaneButton
|
? 'justify-start self-start'
|
||||||
key={pane.id}
|
: 'justify-end self-end') +
|
||||||
paneConfig={pane}
|
(currentPane === 'none'
|
||||||
currentPane={currentPane}
|
? ' rounded-r focus-within:!border-primary/50'
|
||||||
togglePane={() => togglePane(pane.id)}
|
: ' border-r-0') +
|
||||||
/>
|
' p-2 col-start-1 col-span-1 h-fit w-fit flex flex-col items-start gap-2 ' +
|
||||||
))}
|
'bg-chalkboard-10 border border-solid border-chalkboard-20 dark:bg-chalkboard-90 dark:border-chalkboard-80 group-focus-within:border-primary dark:group-focus-within:border-chalkboard-50 ' +
|
||||||
</Tab.List>
|
(openPanes.length === 1 && currentPane === 'none' ? 'pr-0.5' : '')
|
||||||
<Tab.Panels
|
}
|
||||||
as="article"
|
>
|
||||||
className={
|
<Tab key="none" className="sr-only">
|
||||||
'col-start-2 col-span-1 ' +
|
No panes open
|
||||||
(openPanes.length === 1
|
</Tab>
|
||||||
? currentPane !== 'none'
|
{filteredPanes.map((pane) => (
|
||||||
? `row-start-1 row-end-3`
|
<ModelingPaneButton
|
||||||
: `hidden`
|
key={pane.id}
|
||||||
: ``)
|
paneConfig={pane}
|
||||||
}
|
currentPane={currentPane}
|
||||||
>
|
togglePane={() => togglePane(pane.id)}
|
||||||
<Tab.Panel key="none" />
|
/>
|
||||||
{filteredPanes.map((pane) => (
|
))}
|
||||||
<Tab.Panel key={pane.id} className="h-full">
|
</Tab.List>
|
||||||
<ModelingPane
|
<Tab.Panels
|
||||||
id={`${pane.id}-pane`}
|
as="article"
|
||||||
title={pane.title}
|
className={
|
||||||
Menu={pane.Menu}
|
'col-start-2 col-span-1 ' +
|
||||||
>
|
(openPanes.length === 1
|
||||||
{pane.Content instanceof Function ? (
|
? currentPane !== 'none'
|
||||||
<pane.Content />
|
? `row-start-1 row-end-3`
|
||||||
) : (
|
: `hidden`
|
||||||
pane.Content
|
: ``)
|
||||||
)}
|
}
|
||||||
</ModelingPane>
|
>
|
||||||
</Tab.Panel>
|
<Tab.Panel key="none" />
|
||||||
))}
|
{filteredPanes.map((pane) => (
|
||||||
</Tab.Panels>
|
<Tab.Panel key={pane.id} className="h-full">
|
||||||
</Tab.Group>
|
<ModelingPane
|
||||||
|
id={`${pane.id}-pane`}
|
||||||
|
title={pane.title}
|
||||||
|
Menu={pane.Menu}
|
||||||
|
>
|
||||||
|
{pane.Content instanceof Function ? (
|
||||||
|
<pane.Content />
|
||||||
|
) : (
|
||||||
|
pane.Content
|
||||||
|
)}
|
||||||
|
</ModelingPane>
|
||||||
|
</Tab.Panel>
|
||||||
|
))}
|
||||||
|
</Tab.Panels>
|
||||||
|
</Tab.Group>
|
||||||
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { fireEvent, render, screen } from '@testing-library/react'
|
import { render, screen } from '@testing-library/react'
|
||||||
import { BrowserRouter } from 'react-router-dom'
|
import { BrowserRouter } from 'react-router-dom'
|
||||||
import ProjectSidebarMenu from './ProjectSidebarMenu'
|
import ProjectSidebarMenu from './ProjectSidebarMenu'
|
||||||
import { SettingsAuthProviderJest } from './SettingsAuthProvider'
|
import { SettingsAuthProviderJest } from './SettingsAuthProvider'
|
||||||
import { APP_NAME } from 'lib/constants'
|
|
||||||
import { CommandBarProvider } from './CommandBar/CommandBarProvider'
|
import { CommandBarProvider } from './CommandBar/CommandBarProvider'
|
||||||
import { Project } from 'wasm-lib/kcl/bindings/Project'
|
import { Project } from 'wasm-lib/kcl/bindings/Project'
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ const UserSidebarMenu = ({ user }: { user?: User }) => {
|
|||||||
<Popover className="relative">
|
<Popover className="relative">
|
||||||
{user?.image && !imageLoadFailed ? (
|
{user?.image && !imageLoadFailed ? (
|
||||||
<Popover.Button
|
<Popover.Button
|
||||||
className="border-0 rounded-full w-fit min-w-max p-0 group"
|
className="relative border-0 rounded-full w-fit min-w-max p-0 group"
|
||||||
data-testid="user-sidebar-toggle"
|
data-testid="user-sidebar-toggle"
|
||||||
>
|
>
|
||||||
<div className="rounded-full border overflow-hidden">
|
<div className="rounded-full border overflow-hidden">
|
||||||
@ -51,6 +51,9 @@ const UserSidebarMenu = ({ user }: { user?: User }) => {
|
|||||||
onError={() => setImageLoadFailed(true)}
|
onError={() => setImageLoadFailed(true)}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
<Tooltip position="bottom-right" delay={1000}>
|
||||||
|
User menu
|
||||||
|
</Tooltip>
|
||||||
</Popover.Button>
|
</Popover.Button>
|
||||||
) : (
|
) : (
|
||||||
<ActionButton
|
<ActionButton
|
||||||
@ -59,7 +62,7 @@ const UserSidebarMenu = ({ user }: { user?: User }) => {
|
|||||||
className="border-transparent !px-0"
|
className="border-transparent !px-0"
|
||||||
data-testid="user-sidebar-toggle"
|
data-testid="user-sidebar-toggle"
|
||||||
>
|
>
|
||||||
<Tooltip position="left" delay={1000}>
|
<Tooltip position="bottom-right" delay={1000}>
|
||||||
User menu
|
User menu
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</ActionButton>
|
</ActionButton>
|
||||||
|
@ -147,15 +147,33 @@ code {
|
|||||||
|
|
||||||
#code-mirror-override .cm-activeLine,
|
#code-mirror-override .cm-activeLine,
|
||||||
#code-mirror-override .cm-activeLineGutter {
|
#code-mirror-override .cm-activeLineGutter {
|
||||||
@apply bg-primary/10;
|
@apply bg-primary/5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark #code-mirror-override .cm-activeLine,
|
.dark #code-mirror-override .cm-activeLine,
|
||||||
.dark #code-mirror-override .cm-activeLineGutter {
|
.dark #code-mirror-override .cm-activeLineGutter {
|
||||||
@apply bg-primary/20;
|
@apply bg-chalkboard-70/20;
|
||||||
mix-blend-mode: lighten;
|
mix-blend-mode: lighten;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#code-mirror-override .cm-focused .cm-activeLine,
|
||||||
|
#code-mirror-override .cm-focused .cm-activeLineGutter {
|
||||||
|
@apply bg-primary/10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark #code-mirror-override .cm-focused .cm-activeLine,
|
||||||
|
.dark #code-mirror-override .cm-focused .cm-activeLineGutter {
|
||||||
|
@apply bg-chalkboard-70/40;
|
||||||
|
}
|
||||||
|
|
||||||
|
#code-mirror-override .cm-matchingBracket {
|
||||||
|
@apply bg-primary/20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dark #code-mirror-override .cm-matchingBracket {
|
||||||
|
@apply bg-chalkboard-70/60;
|
||||||
|
}
|
||||||
|
|
||||||
#code-mirror-override .cm-gutters {
|
#code-mirror-override .cm-gutters {
|
||||||
@apply bg-chalkboard-10/30;
|
@apply bg-chalkboard-10/30;
|
||||||
}
|
}
|
||||||
@ -171,22 +189,8 @@ code {
|
|||||||
@apply caret-chalkboard-10;
|
@apply caret-chalkboard-10;
|
||||||
}
|
}
|
||||||
|
|
||||||
#code-mirror-override .cm-focused .cm-cursor {
|
#code-mirror-override .cm-focused {
|
||||||
width: 0px;
|
outline: none;
|
||||||
}
|
|
||||||
#code-mirror-override .cm-cursor {
|
|
||||||
display: block;
|
|
||||||
width: 1ch;
|
|
||||||
@apply mix-blend-multiply;
|
|
||||||
@apply border-l-primary;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dark #code-mirror-override .cm-cursor {
|
|
||||||
@apply border-l-chalkboard-10;
|
|
||||||
}
|
|
||||||
|
|
||||||
#code-mirror-override.blink .cm-cursor {
|
|
||||||
animation: blink 1200ms ease-out infinite;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes blink {
|
@keyframes blink {
|
||||||
|
@ -41,7 +41,10 @@ export class KclManager {
|
|||||||
engineCommandManager: EngineCommandManager
|
engineCommandManager: EngineCommandManager
|
||||||
private _defferer = deferExecution((code: string) => {
|
private _defferer = deferExecution((code: string) => {
|
||||||
const ast = this.safeParse(code)
|
const ast = this.safeParse(code)
|
||||||
if (!ast) return
|
if (!ast) {
|
||||||
|
this.clearAst()
|
||||||
|
return
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
const fmtAndStringify = (ast: Program) =>
|
const fmtAndStringify = (ast: Program) =>
|
||||||
JSON.stringify(parse(recast(ast)))
|
JSON.stringify(parse(recast(ast)))
|
||||||
@ -89,7 +92,6 @@ export class KclManager {
|
|||||||
return this._kclErrors
|
return this._kclErrors
|
||||||
}
|
}
|
||||||
set kclErrors(kclErrors) {
|
set kclErrors(kclErrors) {
|
||||||
console.log('[lsp] not lsp, actually typescript: ', kclErrors)
|
|
||||||
this._kclErrors = kclErrors
|
this._kclErrors = kclErrors
|
||||||
let diagnostics = kclErrorsToDiagnostics(kclErrors)
|
let diagnostics = kclErrorsToDiagnostics(kclErrors)
|
||||||
editorManager.addDiagnostics(diagnostics)
|
editorManager.addDiagnostics(diagnostics)
|
||||||
@ -146,6 +148,18 @@ export class KclManager {
|
|||||||
this._executeCallback = callback
|
this._executeCallback = callback
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearAst() {
|
||||||
|
this._ast = {
|
||||||
|
body: [],
|
||||||
|
start: 0,
|
||||||
|
end: 0,
|
||||||
|
nonCodeMeta: {
|
||||||
|
nonCodeNodes: {},
|
||||||
|
start: [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
safeParse(code: string): Program | null {
|
safeParse(code: string): Program | null {
|
||||||
try {
|
try {
|
||||||
const ast = parse(code)
|
const ast = parse(code)
|
||||||
@ -293,14 +307,20 @@ export class KclManager {
|
|||||||
if (!force) return this._defferer(codeManager.code)
|
if (!force) return this._defferer(codeManager.code)
|
||||||
|
|
||||||
const ast = this.safeParse(codeManager.code)
|
const ast = this.safeParse(codeManager.code)
|
||||||
if (!ast) return
|
if (!ast) {
|
||||||
|
this.clearAst()
|
||||||
|
return
|
||||||
|
}
|
||||||
this.ast = { ...ast }
|
this.ast = { ...ast }
|
||||||
return this.executeAst(ast, zoomToFit)
|
return this.executeAst(ast, zoomToFit)
|
||||||
}
|
}
|
||||||
format() {
|
format() {
|
||||||
const originalCode = codeManager.code
|
const originalCode = codeManager.code
|
||||||
const ast = this.safeParse(originalCode)
|
const ast = this.safeParse(originalCode)
|
||||||
if (!ast) return
|
if (!ast) {
|
||||||
|
this.clearAst()
|
||||||
|
return
|
||||||
|
}
|
||||||
const code = recast(ast)
|
const code = recast(ast)
|
||||||
if (originalCode === code) return
|
if (originalCode === code) return
|
||||||
|
|
||||||
|
@ -51,13 +51,7 @@ const mySketch001 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
xAxis: { x: 1, y: 0, z: 0 },
|
|
||||||
yAxis: { x: 0, y: 1, z: 0 },
|
|
||||||
zAxis: { x: 0, y: 0, z: 1 },
|
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
entityId: expect.any(String),
|
|
||||||
__meta: [{ sourceRange: [46, 71] }],
|
__meta: [{ sourceRange: [46, 71] }],
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -79,8 +73,6 @@ const mySketch001 = startSketchOn('XY')
|
|||||||
value: [
|
value: [
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -88,8 +80,6 @@ const mySketch001 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -119,8 +109,6 @@ const mySketch001 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
height: 2,
|
height: 2,
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
xAxis: { x: 1, y: 0, z: 0 },
|
xAxis: { x: 1, y: 0, z: 0 },
|
||||||
yAxis: { x: 0, y: 1, z: 0 },
|
yAxis: { x: 0, y: 1, z: 0 },
|
||||||
zAxis: { x: 0, y: 0, z: 1 },
|
zAxis: { x: 0, y: 0, z: 1 },
|
||||||
@ -162,8 +150,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
value: [
|
value: [
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -171,8 +157,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: 'p',
|
name: 'p',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -180,8 +164,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -221,8 +203,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
height: 2,
|
height: 2,
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
xAxis: { x: 1, y: 0, z: 0 },
|
xAxis: { x: 1, y: 0, z: 0 },
|
||||||
yAxis: { x: 0, y: 1, z: 0 },
|
yAxis: { x: 0, y: 1, z: 0 },
|
||||||
zAxis: { x: 0, y: 0, z: 1 },
|
zAxis: { x: 0, y: 0, z: 1 },
|
||||||
@ -236,8 +216,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
value: [
|
value: [
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -245,8 +223,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: 'p',
|
name: 'p',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -254,8 +230,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'extrudePlane',
|
type: 'extrudePlane',
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
faceId: expect.any(String),
|
faceId: expect.any(String),
|
||||||
name: '',
|
name: '',
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
@ -295,8 +269,6 @@ const sk2 = startSketchOn('XY')
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
height: 2,
|
height: 2,
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
xAxis: { x: 1, y: 0, z: 0 },
|
xAxis: { x: 1, y: 0, z: 0 },
|
||||||
yAxis: { x: 0, y: 1, z: 0 },
|
yAxis: { x: 0, y: 1, z: 0 },
|
||||||
zAxis: { x: 0, y: 0, z: 1 },
|
zAxis: { x: 0, y: 0, z: 1 },
|
||||||
|
@ -22,7 +22,7 @@ export default class CodeManager {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const storedCode = safeLSGetItem(PERSIST_CODE_TOKEN) || ''
|
const storedCode = safeLSGetItem(PERSIST_CODE_TOKEN)
|
||||||
// TODO #819 remove zustand persistence logic in a few months
|
// TODO #819 remove zustand persistence logic in a few months
|
||||||
// short term migration, shouldn't make a difference for tauri app users
|
// short term migration, shouldn't make a difference for tauri app users
|
||||||
// anyway since that's filesystem based.
|
// anyway since that's filesystem based.
|
||||||
@ -68,7 +68,9 @@ export default class CodeManager {
|
|||||||
this._currentFilePath = path
|
this._currentFilePath = path
|
||||||
}
|
}
|
||||||
|
|
||||||
// This updates the code state and calls the updateState function.
|
/**
|
||||||
|
* This updates the code state and calls the updateState function.
|
||||||
|
*/
|
||||||
updateCodeState(code: string): void {
|
updateCodeState(code: string): void {
|
||||||
if (this._code !== code) {
|
if (this._code !== code) {
|
||||||
this.code = code
|
this.code = code
|
||||||
@ -76,7 +78,9 @@ export default class CodeManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the code in the editor.
|
/**
|
||||||
|
* Update the code in the editor.
|
||||||
|
*/
|
||||||
updateCodeEditor(code: string): void {
|
updateCodeEditor(code: string): void {
|
||||||
this.code = code
|
this.code = code
|
||||||
if (editorManager.editorView) {
|
if (editorManager.editorView) {
|
||||||
@ -90,7 +94,9 @@ export default class CodeManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the code, state, and the code the code mirror editor sees.
|
/**
|
||||||
|
* Update the code, state, and the code the code mirror editor sees.
|
||||||
|
*/
|
||||||
updateCodeStateEditor(code: string): void {
|
updateCodeStateEditor(code: string): void {
|
||||||
if (this._code !== code) {
|
if (this._code !== code) {
|
||||||
this.code = code
|
this.code = code
|
||||||
|
@ -177,13 +177,7 @@ const newVar = myVar + 1`
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
position: [0, 0, 0],
|
|
||||||
rotation: [0, 0, 0, 1],
|
|
||||||
xAxis: { x: 1, y: 0, z: 0 },
|
|
||||||
yAxis: { x: 0, y: 1, z: 0 },
|
|
||||||
zAxis: { x: 0, y: 0, z: 1 },
|
|
||||||
id: expect.any(String),
|
id: expect.any(String),
|
||||||
entityId: expect.any(String),
|
|
||||||
__meta: [{ sourceRange: [39, 63] }],
|
__meta: [{ sourceRange: [39, 63] }],
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -7,6 +7,8 @@ import {
|
|||||||
doesPipeHaveCallExp,
|
doesPipeHaveCallExp,
|
||||||
hasExtrudeSketchGroup,
|
hasExtrudeSketchGroup,
|
||||||
findUsesOfTagInPipe,
|
findUsesOfTagInPipe,
|
||||||
|
hasSketchPipeBeenExtruded,
|
||||||
|
hasExtrudableGeometry,
|
||||||
} from './queryAst'
|
} from './queryAst'
|
||||||
import { enginelessExecutor } from '../lib/testHelpers'
|
import { enginelessExecutor } from '../lib/testHelpers'
|
||||||
import {
|
import {
|
||||||
@ -396,3 +398,90 @@ describe('Testing findUsesOfTagInPipe', () => {
|
|||||||
expect(result).toHaveLength(0)
|
expect(result).toHaveLength(0)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('Testing hasSketchPipeBeenExtruded', () => {
|
||||||
|
const exampleCode = `const sketch001 = startSketchOn('XZ')
|
||||||
|
|> startProfileAt([3.29, 7.86], %)
|
||||||
|
|> line([2.48, 2.44], %)
|
||||||
|
|> line([2.66, 1.17], %)
|
||||||
|
|> line([3.75, 0.46], %)
|
||||||
|
|> line([4.99, -0.46], %, 'seg01')
|
||||||
|
|> line([3.3, -2.12], %)
|
||||||
|
|> line([2.16, -3.33], %)
|
||||||
|
|> line([0.85, -3.08], %)
|
||||||
|
|> line([-0.18, -3.36], %)
|
||||||
|
|> line([-3.86, -2.73], %)
|
||||||
|
|> line([-17.67, 0.85], %)
|
||||||
|
|> close(%)
|
||||||
|
const extrude001 = extrude(10, sketch001)
|
||||||
|
const sketch002 = startSketchOn(extrude001, 'seg01')
|
||||||
|
|> startProfileAt([-12.94, 6.6], %)
|
||||||
|
|> line([2.45, -0.2], %)
|
||||||
|
|> line([-2, -1.25], %)
|
||||||
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||||
|
|> close(%)
|
||||||
|
`
|
||||||
|
it('finds sketch001 pipe to be extruded', async () => {
|
||||||
|
const ast = parse(exampleCode)
|
||||||
|
const lineOfInterest = `line([4.99, -0.46], %, 'seg01')`
|
||||||
|
const characterIndex =
|
||||||
|
exampleCode.indexOf(lineOfInterest) + lineOfInterest.length
|
||||||
|
const extruded = hasSketchPipeBeenExtruded(
|
||||||
|
{
|
||||||
|
range: [characterIndex, characterIndex],
|
||||||
|
type: 'default',
|
||||||
|
},
|
||||||
|
ast
|
||||||
|
)
|
||||||
|
expect(extruded).toBeTruthy()
|
||||||
|
})
|
||||||
|
it('find sketch002 NOT pipe to be extruded', async () => {
|
||||||
|
const ast = parse(exampleCode)
|
||||||
|
const lineOfInterest = `line([2.45, -0.2], %)`
|
||||||
|
const characterIndex =
|
||||||
|
exampleCode.indexOf(lineOfInterest) + lineOfInterest.length
|
||||||
|
const extruded = hasSketchPipeBeenExtruded(
|
||||||
|
{
|
||||||
|
range: [characterIndex, characterIndex],
|
||||||
|
type: 'default',
|
||||||
|
},
|
||||||
|
ast
|
||||||
|
)
|
||||||
|
expect(extruded).toBeFalsy()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('Testing hasExtrudableGeometry', () => {
|
||||||
|
it('finds sketch001 pipe to be extruded', async () => {
|
||||||
|
const exampleCode = `const sketch001 = startSketchOn('XZ')
|
||||||
|
|> startProfileAt([3.29, 7.86], %)
|
||||||
|
|> line([2.48, 2.44], %)
|
||||||
|
|> line([-3.86, -2.73], %)
|
||||||
|
|> line([-17.67, 0.85], %)
|
||||||
|
|> close(%)
|
||||||
|
const extrude001 = extrude(10, sketch001)
|
||||||
|
const sketch002 = startSketchOn(extrude001, 'seg01')
|
||||||
|
|> startProfileAt([-12.94, 6.6], %)
|
||||||
|
|> line([2.45, -0.2], %)
|
||||||
|
|> line([-2, -1.25], %)
|
||||||
|
|> lineTo([profileStartX(%), profileStartY(%)], %)
|
||||||
|
|> close(%)
|
||||||
|
`
|
||||||
|
const ast = parse(exampleCode)
|
||||||
|
const extrudable = hasExtrudableGeometry(ast)
|
||||||
|
expect(extrudable).toBeTruthy()
|
||||||
|
})
|
||||||
|
it('find sketch002 NOT pipe to be extruded', async () => {
|
||||||
|
const exampleCode = `const sketch001 = startSketchOn('XZ')
|
||||||
|
|> startProfileAt([3.29, 7.86], %)
|
||||||
|
|> line([2.48, 2.44], %)
|
||||||
|
|> line([-3.86, -2.73], %)
|
||||||
|
|> line([-17.67, 0.85], %)
|
||||||
|
|> close(%)
|
||||||
|
const extrude001 = extrude(10, sketch001)
|
||||||
|
`
|
||||||
|
const ast = parse(exampleCode)
|
||||||
|
const extrudable = hasExtrudableGeometry(ast)
|
||||||
|
expect(extrudable).toBeFalsy()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
@ -720,3 +720,78 @@ export function findUsesOfTagInPipe(
|
|||||||
})
|
})
|
||||||
return dependentRanges
|
return dependentRanges
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function hasSketchPipeBeenExtruded(selection: Selection, ast: Program) {
|
||||||
|
const path = getNodePathFromSourceRange(ast, selection.range)
|
||||||
|
const { node: pipeExpression } = getNodeFromPath<PipeExpression>(
|
||||||
|
ast,
|
||||||
|
path,
|
||||||
|
'PipeExpression'
|
||||||
|
)
|
||||||
|
if (pipeExpression.type !== 'PipeExpression') return false
|
||||||
|
const varDec = getNodeFromPath<VariableDeclarator>(
|
||||||
|
ast,
|
||||||
|
path,
|
||||||
|
'VariableDeclarator'
|
||||||
|
).node
|
||||||
|
let extruded = false
|
||||||
|
traverse(ast as any, {
|
||||||
|
enter(node) {
|
||||||
|
if (
|
||||||
|
node.type === 'CallExpression' &&
|
||||||
|
node.callee.type === 'Identifier' &&
|
||||||
|
node.callee.name === 'extrude' &&
|
||||||
|
node.arguments?.[1]?.type === 'Identifier' &&
|
||||||
|
node.arguments[1].name === varDec.id.name
|
||||||
|
) {
|
||||||
|
extruded = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return extruded
|
||||||
|
}
|
||||||
|
|
||||||
|
/** File must contain at least one sketch that has not been extruded already */
|
||||||
|
export function hasExtrudableGeometry(ast: Program) {
|
||||||
|
const theMap: any = {}
|
||||||
|
traverse(ast as any, {
|
||||||
|
enter(node) {
|
||||||
|
if (
|
||||||
|
node.type === 'VariableDeclarator' &&
|
||||||
|
node.init?.type === 'PipeExpression'
|
||||||
|
) {
|
||||||
|
let hasStartProfileAt = false
|
||||||
|
let hasStartSketchOn = false
|
||||||
|
let hasClose = false
|
||||||
|
for (const pipe of node.init.body) {
|
||||||
|
if (
|
||||||
|
pipe.type === 'CallExpression' &&
|
||||||
|
pipe.callee.name === 'startProfileAt'
|
||||||
|
) {
|
||||||
|
hasStartProfileAt = true
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
pipe.type === 'CallExpression' &&
|
||||||
|
pipe.callee.name === 'startSketchOn'
|
||||||
|
) {
|
||||||
|
hasStartSketchOn = true
|
||||||
|
}
|
||||||
|
if (pipe.type === 'CallExpression' && pipe.callee.name === 'close') {
|
||||||
|
hasClose = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (hasStartProfileAt && hasStartSketchOn && hasClose) {
|
||||||
|
theMap[node.id.name] = true
|
||||||
|
}
|
||||||
|
} else if (
|
||||||
|
node.type === 'CallExpression' &&
|
||||||
|
node.callee.name === 'extrude' &&
|
||||||
|
node.arguments[1]?.type === 'Identifier' &&
|
||||||
|
theMap?.[node?.arguments?.[1]?.name]
|
||||||
|
) {
|
||||||
|
delete theMap[node.arguments[1].name]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
|
return Object.keys(theMap).length > 0
|
||||||
|
}
|
||||||
|
@ -58,6 +58,9 @@ function isHighlightSetEntity_type(
|
|||||||
|
|
||||||
type WebSocketResponse = Models['WebSocketResponse_type']
|
type WebSocketResponse = Models['WebSocketResponse_type']
|
||||||
type OkWebSocketResponseData = Models['OkWebSocketResponseData_type']
|
type OkWebSocketResponseData = Models['OkWebSocketResponseData_type']
|
||||||
|
type BatchResponseMap = {
|
||||||
|
[key: string]: Models['BatchResponse_type']
|
||||||
|
}
|
||||||
|
|
||||||
type ResultCommand = CommandInfo & {
|
type ResultCommand = CommandInfo & {
|
||||||
type: 'result'
|
type: 'result'
|
||||||
@ -1316,7 +1319,8 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
)
|
)
|
||||||
if (
|
if (
|
||||||
message.success &&
|
message.success &&
|
||||||
message.resp.type === 'modeling' &&
|
(message.resp.type === 'modeling' ||
|
||||||
|
message.resp.type === 'modeling_batch') &&
|
||||||
message.request_id
|
message.request_id
|
||||||
) {
|
) {
|
||||||
this.handleModelingCommand(
|
this.handleModelingCommand(
|
||||||
@ -1380,19 +1384,60 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
id: string,
|
id: string,
|
||||||
raw: WebSocketResponse
|
raw: WebSocketResponse
|
||||||
) {
|
) {
|
||||||
if (message.type !== 'modeling') {
|
if (!(message.type === 'modeling' || message.type === 'modeling_batch')) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
const modelingResponse = message.data.modeling_response
|
|
||||||
const command = this.artifactMap[id]
|
const command = this.artifactMap[id]
|
||||||
|
let modelingResponse: Models['OkModelingCmdResponse_type'] = {
|
||||||
|
type: 'empty',
|
||||||
|
}
|
||||||
|
if ('modeling_response' in message.data) {
|
||||||
|
modelingResponse = message.data.modeling_response
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
command?.type === 'pending' &&
|
command?.type === 'pending' &&
|
||||||
command.commandType === 'batch' &&
|
command.commandType === 'batch' &&
|
||||||
command?.additionalData?.type === 'batch-ids'
|
command?.additionalData?.type === 'batch-ids'
|
||||||
) {
|
) {
|
||||||
command.additionalData.ids.forEach((id) => {
|
if ('responses' in message.data) {
|
||||||
this.handleModelingCommand(message, id, raw)
|
const batchResponse = message.data.responses as BatchResponseMap
|
||||||
})
|
// Iterate over the map of responses.
|
||||||
|
Object.entries(batchResponse).forEach(([key, response]) => {
|
||||||
|
// If the response is a success, we resolve the promise.
|
||||||
|
if ('response' in response && response.response) {
|
||||||
|
this.handleModelingCommand(
|
||||||
|
{
|
||||||
|
type: 'modeling',
|
||||||
|
data: {
|
||||||
|
modeling_response: response.response,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
key,
|
||||||
|
{
|
||||||
|
request_id: key,
|
||||||
|
resp: {
|
||||||
|
type: 'modeling',
|
||||||
|
data: {
|
||||||
|
modeling_response: response.response,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
success: true,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} else if ('errors' in response) {
|
||||||
|
this.handleFailedModelingCommand(key, {
|
||||||
|
request_id: key,
|
||||||
|
success: false,
|
||||||
|
errors: response.errors,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
command.additionalData.ids.forEach((id) => {
|
||||||
|
this.handleModelingCommand(message, id, raw)
|
||||||
|
})
|
||||||
|
}
|
||||||
// batch artifact is just a container, we don't need to keep it
|
// batch artifact is just a container, we don't need to keep it
|
||||||
// once we process all the commands inside it
|
// once we process all the commands inside it
|
||||||
const resolve = command.resolve
|
const resolve = command.resolve
|
||||||
@ -1401,7 +1446,6 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
id,
|
id,
|
||||||
commandType: command.commandType,
|
commandType: command.commandType,
|
||||||
range: command.range,
|
range: command.range,
|
||||||
data: modelingResponse,
|
|
||||||
raw,
|
raw,
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
@ -1422,6 +1466,9 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
|
|
||||||
if (command && command.type === 'pending') {
|
if (command && command.type === 'pending') {
|
||||||
const resolve = command.resolve
|
const resolve = command.resolve
|
||||||
|
const oldArtifact = this.artifactMap[id] as ArtifactMapCommand & {
|
||||||
|
extrusions?: string[]
|
||||||
|
}
|
||||||
const artifact = {
|
const artifact = {
|
||||||
type: 'result',
|
type: 'result',
|
||||||
range: command.range,
|
range: command.range,
|
||||||
@ -1430,7 +1477,10 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
parentId: command.parentId ? command.parentId : undefined,
|
parentId: command.parentId ? command.parentId : undefined,
|
||||||
data: modelingResponse,
|
data: modelingResponse,
|
||||||
raw,
|
raw,
|
||||||
} as const
|
} as ArtifactMapCommand & { extrusions?: string[] }
|
||||||
|
if (oldArtifact?.extrusions) {
|
||||||
|
artifact.extrusions = oldArtifact.extrusions
|
||||||
|
}
|
||||||
this.artifactMap[id] = artifact
|
this.artifactMap[id] = artifact
|
||||||
if (
|
if (
|
||||||
(command.commandType === 'entity_linear_pattern' &&
|
(command.commandType === 'entity_linear_pattern' &&
|
||||||
@ -1733,7 +1783,7 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
command: EngineCommand
|
command: EngineCommand
|
||||||
ast: Program
|
ast: Program
|
||||||
idToRangeMap?: { [key: string]: SourceRange }
|
idToRangeMap?: { [key: string]: SourceRange }
|
||||||
}): Promise<any> {
|
}): Promise<ResolveCommand | void> {
|
||||||
if (this.engineConnection === undefined) {
|
if (this.engineConnection === undefined) {
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
}
|
}
|
||||||
@ -1802,11 +1852,13 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
command: Models['ModelingCmd_type'],
|
command: Models['ModelingCmd_type'],
|
||||||
ast?: Program,
|
ast?: Program,
|
||||||
range?: SourceRange
|
range?: SourceRange
|
||||||
) {
|
): Promise<ResolveCommand | void> {
|
||||||
let resolve: (val: any) => void = () => {}
|
let resolve: (val: any) => void = () => {}
|
||||||
const promise = new Promise((_resolve, reject) => {
|
const promise: Promise<ResolveCommand | void> = new Promise(
|
||||||
resolve = _resolve
|
(_resolve, reject) => {
|
||||||
})
|
resolve = _resolve
|
||||||
|
}
|
||||||
|
)
|
||||||
const getParentId = (): string | undefined => {
|
const getParentId = (): string | undefined => {
|
||||||
if (command.type === 'extend_path') return command.path
|
if (command.type === 'extend_path') return command.path
|
||||||
if (command.type === 'solid3d_get_extrusion_face_info') {
|
if (command.type === 'solid3d_get_extrusion_face_info') {
|
||||||
@ -1857,6 +1909,8 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
} else {
|
} else {
|
||||||
typedTarget.extrusions = [id]
|
typedTarget.extrusions = [id]
|
||||||
}
|
}
|
||||||
|
// Update in the map.
|
||||||
|
this.artifactMap[command.target] = typedTarget
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return promise
|
return promise
|
||||||
@ -1867,11 +1921,13 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
idToRangeMap?: { [key: string]: SourceRange },
|
idToRangeMap?: { [key: string]: SourceRange },
|
||||||
ast?: Program,
|
ast?: Program,
|
||||||
range?: SourceRange
|
range?: SourceRange
|
||||||
) {
|
): Promise<ResolveCommand | void> {
|
||||||
let resolve: (val: any) => void = () => {}
|
let resolve: (val: any) => void = () => {}
|
||||||
const promise = new Promise((_resolve, reject) => {
|
const promise: Promise<ResolveCommand | void> = new Promise(
|
||||||
resolve = _resolve
|
(_resolve, reject) => {
|
||||||
})
|
resolve = _resolve
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
if (!idToRangeMap) {
|
if (!idToRangeMap) {
|
||||||
throw new Error('idToRangeMap is required for batch commands')
|
throw new Error('idToRangeMap is required for batch commands')
|
||||||
@ -1891,7 +1947,7 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
resolve,
|
resolve,
|
||||||
}
|
}
|
||||||
|
|
||||||
await Promise.all(
|
Promise.all(
|
||||||
commands.map((c) =>
|
commands.map((c) =>
|
||||||
this.handlePendingCommand(c.cmd_id, c.cmd, ast, idToRangeMap[c.cmd_id])
|
this.handlePendingCommand(c.cmd_id, c.cmd, ast, idToRangeMap[c.cmd_id])
|
||||||
)
|
)
|
||||||
@ -1903,7 +1959,7 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
rangeStr: string,
|
rangeStr: string,
|
||||||
commandStr: string,
|
commandStr: string,
|
||||||
idToRangeStr: string
|
idToRangeStr: string
|
||||||
): Promise<any> {
|
): Promise<string | void> {
|
||||||
if (this.engineConnection === undefined) {
|
if (this.engineConnection === undefined) {
|
||||||
return Promise.resolve()
|
return Promise.resolve()
|
||||||
}
|
}
|
||||||
@ -1932,13 +1988,13 @@ export class EngineCommandManager extends EventTarget {
|
|||||||
command,
|
command,
|
||||||
ast: this.getAst(),
|
ast: this.getAst(),
|
||||||
idToRangeMap,
|
idToRangeMap,
|
||||||
}).then(({ raw }: { raw: WebSocketResponse | undefined | null }) => {
|
}).then((resp) => {
|
||||||
if (raw === undefined || raw === null) {
|
if (!resp) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
'returning modeling cmd response to the rust side is undefined or null'
|
'returning modeling cmd response to the rust side is undefined or null'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return JSON.stringify(raw)
|
return JSON.stringify(resp.raw)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
commandResult(id: string): Promise<any> {
|
commandResult(id: string): Promise<any> {
|
||||||
|
@ -25,7 +25,7 @@ import type { Program } from '../wasm-lib/kcl/bindings/Program'
|
|||||||
import type { Token } from '../wasm-lib/kcl/bindings/Token'
|
import type { Token } from '../wasm-lib/kcl/bindings/Token'
|
||||||
import { Coords2d } from './std/sketch'
|
import { Coords2d } from './std/sketch'
|
||||||
import { fileSystemManager } from 'lang/std/fileSystemManager'
|
import { fileSystemManager } from 'lang/std/fileSystemManager'
|
||||||
import { AppInfo } from 'wasm-lib/kcl/bindings/AppInfo'
|
import { CoreDumpInfo } from 'wasm-lib/kcl/bindings/CoreDumpInfo'
|
||||||
import { CoreDumpManager } from 'lib/coredump'
|
import { CoreDumpManager } from 'lib/coredump'
|
||||||
import openWindow from 'lib/openWindow'
|
import openWindow from 'lib/openWindow'
|
||||||
import { DefaultPlanes } from 'wasm-lib/kcl/bindings/DefaultPlanes'
|
import { DefaultPlanes } from 'wasm-lib/kcl/bindings/DefaultPlanes'
|
||||||
@ -74,8 +74,6 @@ export type SyntaxType =
|
|||||||
| 'UnaryExpression'
|
| 'UnaryExpression'
|
||||||
|
|
||||||
export type { SourceRange } from '../wasm-lib/kcl/bindings/SourceRange'
|
export type { SourceRange } from '../wasm-lib/kcl/bindings/SourceRange'
|
||||||
export type { Position } from '../wasm-lib/kcl/bindings/Position'
|
|
||||||
export type { Rotation } from '../wasm-lib/kcl/bindings/Rotation'
|
|
||||||
export type { Path } from '../wasm-lib/kcl/bindings/Path'
|
export type { Path } from '../wasm-lib/kcl/bindings/Path'
|
||||||
export type { SketchGroup } from '../wasm-lib/kcl/bindings/SketchGroup'
|
export type { SketchGroup } from '../wasm-lib/kcl/bindings/SketchGroup'
|
||||||
export type { ExtrudeGroup } from '../wasm-lib/kcl/bindings/ExtrudeGroup'
|
export type { ExtrudeGroup } from '../wasm-lib/kcl/bindings/ExtrudeGroup'
|
||||||
@ -335,14 +333,27 @@ export function programMemoryInit(): ProgramMemory {
|
|||||||
export async function coreDump(
|
export async function coreDump(
|
||||||
coreDumpManager: CoreDumpManager,
|
coreDumpManager: CoreDumpManager,
|
||||||
openGithubIssue: boolean = false
|
openGithubIssue: boolean = false
|
||||||
): Promise<AppInfo> {
|
): Promise<CoreDumpInfo> {
|
||||||
try {
|
try {
|
||||||
const dump: AppInfo = await coredump(coreDumpManager)
|
const dump: CoreDumpInfo = await coredump(coreDumpManager)
|
||||||
|
/* NOTE: this console output of the coredump should include the field
|
||||||
|
`github_issue_url` which is not in the uploaded coredump file.
|
||||||
|
`github_issue_url` is added after the file is uploaded
|
||||||
|
and is only needed for the openWindow operation which creates
|
||||||
|
a new GitHub issue for the user.
|
||||||
|
*/
|
||||||
if (openGithubIssue && dump.github_issue_url) {
|
if (openGithubIssue && dump.github_issue_url) {
|
||||||
openWindow(dump.github_issue_url)
|
openWindow(dump.github_issue_url)
|
||||||
|
} else {
|
||||||
|
console.error(
|
||||||
|
'github_issue_url undefined. Unable to create GitHub issue for coredump.'
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
console.log('CoreDump: final coredump', dump)
|
||||||
|
console.log('CoreDump: final coredump JSON', JSON.stringify(dump))
|
||||||
return dump
|
return dump
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
|
console.error('CoreDump: error', e)
|
||||||
throw new Error(`Error getting core dump: ${e}`)
|
throw new Error(`Error getting core dump: ${e}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,15 @@ import screenshot from 'lib/screenshot'
|
|||||||
import React from 'react'
|
import React from 'react'
|
||||||
import { VITE_KC_API_BASE_URL } from 'env'
|
import { VITE_KC_API_BASE_URL } from 'env'
|
||||||
|
|
||||||
// This is a class for getting all the values from the JS world to pass to the Rust world
|
/**
|
||||||
// for a core dump.
|
* CoreDumpManager module
|
||||||
|
* - for getting all the values from the JS world to pass to the Rust world for a core dump.
|
||||||
|
* @module lib/coredump
|
||||||
|
* @class
|
||||||
|
*/
|
||||||
|
// CoreDumpManager is instantiated in ModelingMachineProvider and passed to coreDump() in wasm.ts
|
||||||
|
// The async function coreDump() handles any errors thrown in its Promise catch method and rethrows
|
||||||
|
// them to so the toast handler in ModelingMachineProvider can show the user an error message toast
|
||||||
export class CoreDumpManager {
|
export class CoreDumpManager {
|
||||||
engineCommandManager: EngineCommandManager
|
engineCommandManager: EngineCommandManager
|
||||||
htmlRef: React.RefObject<HTMLDivElement> | null
|
htmlRef: React.RefObject<HTMLDivElement> | null
|
||||||
@ -144,6 +151,293 @@ export class CoreDumpManager {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Currently just a placeholder to begin loading singleton and xstate data into
|
||||||
|
getClientState(): Promise<string> {
|
||||||
|
/**
|
||||||
|
* Deep clone a JavaScript Object
|
||||||
|
* - NOTE: this function throws on parse errors from things like circular references
|
||||||
|
* - It is also synchronous and could be more performant
|
||||||
|
* - There is a whole rabbit hole to explore here if you like.
|
||||||
|
* - This works for our use case.
|
||||||
|
* @param {object} obj - The object to clone.
|
||||||
|
*/
|
||||||
|
const deepClone = (obj: any) => JSON.parse(JSON.stringify(obj))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a function is private method
|
||||||
|
*/
|
||||||
|
const isPrivateMethod = (key: string) => {
|
||||||
|
return key.length && key[0] === '_'
|
||||||
|
}
|
||||||
|
|
||||||
|
// Turn off verbose logging by default
|
||||||
|
const verboseLogging = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Toggle verbose debug logging of step-by-step client state coredump data
|
||||||
|
*/
|
||||||
|
const debugLog = verboseLogging ? console.log : () => {}
|
||||||
|
|
||||||
|
console.warn('CoreDump: Gathering client state')
|
||||||
|
|
||||||
|
// Initialize the clientState object
|
||||||
|
let clientState = {
|
||||||
|
// singletons
|
||||||
|
engine_command_manager: {
|
||||||
|
artifact_map: {},
|
||||||
|
command_logs: [],
|
||||||
|
engine_connection: { state: { type: '' } },
|
||||||
|
default_planes: {},
|
||||||
|
scene_command_artifacts: {},
|
||||||
|
},
|
||||||
|
kcl_manager: {
|
||||||
|
ast: {},
|
||||||
|
kcl_errors: [],
|
||||||
|
},
|
||||||
|
scene_infra: {},
|
||||||
|
scene_entities_manager: {},
|
||||||
|
editor_manager: {},
|
||||||
|
// xstate
|
||||||
|
auth_machine: {},
|
||||||
|
command_bar_machine: {},
|
||||||
|
file_machine: {},
|
||||||
|
home_machine: {},
|
||||||
|
modeling_machine: {},
|
||||||
|
settings_machine: {},
|
||||||
|
}
|
||||||
|
debugLog('CoreDump: initialized clientState', clientState)
|
||||||
|
debugLog('CoreDump: globalThis.window', globalThis.window)
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Singletons
|
||||||
|
|
||||||
|
// engine_command_manager
|
||||||
|
debugLog('CoreDump: engineCommandManager', this.engineCommandManager)
|
||||||
|
|
||||||
|
// artifact map - this.engineCommandManager.artifactMap
|
||||||
|
if (this.engineCommandManager?.artifactMap) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager artifact map',
|
||||||
|
this.engineCommandManager.artifactMap
|
||||||
|
)
|
||||||
|
clientState.engine_command_manager.artifact_map = deepClone(
|
||||||
|
this.engineCommandManager.artifactMap
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// command logs - this.engineCommandManager.commandLogs
|
||||||
|
if (this.engineCommandManager?.commandLogs) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager command logs',
|
||||||
|
this.engineCommandManager.commandLogs
|
||||||
|
)
|
||||||
|
clientState.engine_command_manager.command_logs = deepClone(
|
||||||
|
this.engineCommandManager.commandLogs
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// default planes - this.engineCommandManager.defaultPlanes
|
||||||
|
if (this.engineCommandManager?.defaultPlanes) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager default planes',
|
||||||
|
this.engineCommandManager.defaultPlanes
|
||||||
|
)
|
||||||
|
clientState.engine_command_manager.default_planes = deepClone(
|
||||||
|
this.engineCommandManager.defaultPlanes
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// engine connection state
|
||||||
|
if (this.engineCommandManager?.engineConnection?.state) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager engine connection state',
|
||||||
|
this.engineCommandManager.engineConnection.state
|
||||||
|
)
|
||||||
|
clientState.engine_command_manager.engine_connection.state =
|
||||||
|
this.engineCommandManager.engineConnection.state
|
||||||
|
}
|
||||||
|
|
||||||
|
// in sequence - this.engineCommandManager.inSequence
|
||||||
|
if (this.engineCommandManager?.inSequence) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager in sequence',
|
||||||
|
this.engineCommandManager.inSequence
|
||||||
|
)
|
||||||
|
;(clientState.engine_command_manager as any).in_sequence =
|
||||||
|
this.engineCommandManager.inSequence
|
||||||
|
}
|
||||||
|
|
||||||
|
// out sequence - this.engineCommandManager.outSequence
|
||||||
|
if (this.engineCommandManager?.outSequence) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager out sequence',
|
||||||
|
this.engineCommandManager.outSequence
|
||||||
|
)
|
||||||
|
;(clientState.engine_command_manager as any).out_sequence =
|
||||||
|
this.engineCommandManager.outSequence
|
||||||
|
}
|
||||||
|
|
||||||
|
// scene command artifacts - this.engineCommandManager.sceneCommandArtifacts
|
||||||
|
if (this.engineCommandManager?.sceneCommandArtifacts) {
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Engine Command Manager scene command artifacts',
|
||||||
|
this.engineCommandManager.sceneCommandArtifacts
|
||||||
|
)
|
||||||
|
clientState.engine_command_manager.scene_command_artifacts = deepClone(
|
||||||
|
this.engineCommandManager.sceneCommandArtifacts
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// KCL Manager - globalThis?.window?.kclManager
|
||||||
|
const kclManager = (globalThis?.window as any)?.kclManager
|
||||||
|
debugLog('CoreDump: kclManager', kclManager)
|
||||||
|
|
||||||
|
if (kclManager) {
|
||||||
|
// KCL Manager AST
|
||||||
|
debugLog('CoreDump: KCL Manager AST', kclManager?.ast)
|
||||||
|
if (kclManager?.ast) {
|
||||||
|
clientState.kcl_manager.ast = deepClone(kclManager.ast)
|
||||||
|
}
|
||||||
|
|
||||||
|
// KCL Errors
|
||||||
|
debugLog('CoreDump: KCL Errors', kclManager?.kclErrors)
|
||||||
|
if (kclManager?.kclErrors) {
|
||||||
|
clientState.kcl_manager.kcl_errors = deepClone(kclManager.kclErrors)
|
||||||
|
}
|
||||||
|
|
||||||
|
// KCL isExecuting
|
||||||
|
debugLog('CoreDump: KCL isExecuting', kclManager?.isExecuting)
|
||||||
|
if (kclManager?.isExecuting) {
|
||||||
|
;(clientState.kcl_manager as any).isExecuting = kclManager.isExecuting
|
||||||
|
}
|
||||||
|
|
||||||
|
// KCL logs
|
||||||
|
debugLog('CoreDump: KCL logs', kclManager?.logs)
|
||||||
|
if (kclManager?.logs) {
|
||||||
|
;(clientState.kcl_manager as any).logs = deepClone(kclManager.logs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// KCL programMemory
|
||||||
|
debugLog('CoreDump: KCL programMemory', kclManager?.programMemory)
|
||||||
|
if (kclManager?.programMemory) {
|
||||||
|
;(clientState.kcl_manager as any).programMemory = deepClone(
|
||||||
|
kclManager.programMemory
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// KCL wasmInitFailed
|
||||||
|
debugLog('CoreDump: KCL wasmInitFailed', kclManager?.wasmInitFailed)
|
||||||
|
if (kclManager?.wasmInitFailed) {
|
||||||
|
;(clientState.kcl_manager as any).wasmInitFailed =
|
||||||
|
kclManager.wasmInitFailed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scene Infra - globalThis?.window?.sceneInfra
|
||||||
|
const sceneInfra = (globalThis?.window as any)?.sceneInfra
|
||||||
|
debugLog('CoreDump: Scene Infra', sceneInfra)
|
||||||
|
|
||||||
|
if (sceneInfra) {
|
||||||
|
const sceneInfraSkipKeys = ['camControls']
|
||||||
|
const sceneInfraKeys = Object.keys(sceneInfra)
|
||||||
|
.sort()
|
||||||
|
.filter((entry) => {
|
||||||
|
return (
|
||||||
|
typeof sceneInfra[entry] !== 'function' &&
|
||||||
|
!sceneInfraSkipKeys.includes(entry)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
debugLog('CoreDump: Scene Infra keys', sceneInfraKeys)
|
||||||
|
sceneInfraKeys.forEach((key: string) => {
|
||||||
|
debugLog('CoreDump: Scene Infra', key, sceneInfra[key])
|
||||||
|
try {
|
||||||
|
;(clientState.scene_infra as any)[key] = sceneInfra[key]
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
'CoreDump: unable to parse Scene Infra ' + key + ' data due to ',
|
||||||
|
error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scene Entities Manager - globalThis?.window?.sceneEntitiesManager
|
||||||
|
const sceneEntitiesManager = (globalThis?.window as any)
|
||||||
|
?.sceneEntitiesManager
|
||||||
|
debugLog('CoreDump: sceneEntitiesManager', sceneEntitiesManager)
|
||||||
|
|
||||||
|
if (sceneEntitiesManager) {
|
||||||
|
// Scene Entities Manager active segments
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: Scene Entities Manager active segments',
|
||||||
|
sceneEntitiesManager?.activeSegments
|
||||||
|
)
|
||||||
|
if (sceneEntitiesManager?.activeSegments) {
|
||||||
|
;(clientState.scene_entities_manager as any).activeSegments =
|
||||||
|
deepClone(sceneEntitiesManager.activeSegments)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Editor Manager - globalThis?.window?.editorManager
|
||||||
|
const editorManager = (globalThis?.window as any)?.editorManager
|
||||||
|
debugLog('CoreDump: editorManager', editorManager)
|
||||||
|
|
||||||
|
if (editorManager) {
|
||||||
|
const editorManagerSkipKeys = ['camControls']
|
||||||
|
const editorManagerKeys = Object.keys(editorManager)
|
||||||
|
.sort()
|
||||||
|
.filter((entry) => {
|
||||||
|
return (
|
||||||
|
typeof editorManager[entry] !== 'function' &&
|
||||||
|
!isPrivateMethod(entry) &&
|
||||||
|
!editorManagerSkipKeys.includes(entry)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
debugLog('CoreDump: Editor Manager keys', editorManagerKeys)
|
||||||
|
editorManagerKeys.forEach((key: string) => {
|
||||||
|
debugLog('CoreDump: Editor Manager', key, editorManager[key])
|
||||||
|
try {
|
||||||
|
;(clientState.editor_manager as any)[key] = deepClone(
|
||||||
|
editorManager[key]
|
||||||
|
)
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
'CoreDump: unable to parse Editor Manager ' +
|
||||||
|
key +
|
||||||
|
' data due to ',
|
||||||
|
error
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// enableMousePositionLogs - Not coredumped
|
||||||
|
// See https://github.com/KittyCAD/modeling-app/issues/2338#issuecomment-2136441998
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: enableMousePositionLogs [not coredumped]',
|
||||||
|
(globalThis?.window as any)?.enableMousePositionLogs
|
||||||
|
)
|
||||||
|
|
||||||
|
// XState Machines
|
||||||
|
debugLog(
|
||||||
|
'CoreDump: xstate services',
|
||||||
|
(globalThis?.window as any)?.__xstate__?.services
|
||||||
|
)
|
||||||
|
|
||||||
|
debugLog('CoreDump: final clientState', clientState)
|
||||||
|
|
||||||
|
const clientStateJson = JSON.stringify(clientState)
|
||||||
|
debugLog('CoreDump: final clientState JSON', clientStateJson)
|
||||||
|
|
||||||
|
return Promise.resolve(clientStateJson)
|
||||||
|
} catch (error) {
|
||||||
|
console.error('CoreDump: unable to return data due to ', error)
|
||||||
|
return Promise.reject(JSON.stringify(error))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Return a data URL (png format) of the screenshot of the current page.
|
// Return a data URL (png format) of the screenshot of the current page.
|
||||||
screenshot(): Promise<string> {
|
screenshot(): Promise<string> {
|
||||||
return screenshot(this.htmlRef)
|
return screenshot(this.htmlRef)
|
||||||
|
@ -16,6 +16,7 @@ import { Program } from 'lang/wasm'
|
|||||||
import {
|
import {
|
||||||
doesPipeHaveCallExp,
|
doesPipeHaveCallExp,
|
||||||
getNodeFromPath,
|
getNodeFromPath,
|
||||||
|
hasSketchPipeBeenExtruded,
|
||||||
isSingleCursorInPipe,
|
isSingleCursorInPipe,
|
||||||
} from 'lang/queryAst'
|
} from 'lang/queryAst'
|
||||||
import { CommandArgument } from './commandTypes'
|
import { CommandArgument } from './commandTypes'
|
||||||
@ -387,6 +388,7 @@ export function canExtrudeSelection(selection: Selections) {
|
|||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
!!isSketchPipe(selection) &&
|
!!isSketchPipe(selection) &&
|
||||||
|
commonNodes.every((n) => !hasSketchPipeBeenExtruded(n.selection, n.ast)) &&
|
||||||
commonNodes.every((n) => nodeHasClose(n)) &&
|
commonNodes.every((n) => nodeHasClose(n)) &&
|
||||||
commonNodes.every((n) => !nodeHasExtrude(n))
|
commonNodes.every((n) => !nodeHasExtrude(n))
|
||||||
)
|
)
|
||||||
|
@ -157,7 +157,7 @@ export function createSettings() {
|
|||||||
),
|
),
|
||||||
}),
|
}),
|
||||||
enableSSAO: new Setting<boolean>({
|
enableSSAO: new Setting<boolean>({
|
||||||
defaultValue: true,
|
defaultValue: false,
|
||||||
description:
|
description:
|
||||||
'Whether or not Screen Space Ambient Occlusion (SSAO) is enabled',
|
'Whether or not Screen Space Ambient Occlusion (SSAO) is enabled',
|
||||||
validate: (v) => typeof v === 'boolean',
|
validate: (v) => typeof v === 'boolean',
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
import { OnboardingButtons, useDismiss, useNextClick } from '.'
|
import { OnboardingButtons, useDemoCode, useDismiss, useNextClick } from '.'
|
||||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
import { useStore } from '../../useStore'
|
import { useStore } from '../../useStore'
|
||||||
|
|
||||||
export default function CodeEditor() {
|
export default function OnboardingCodeEditor() {
|
||||||
|
useDemoCode()
|
||||||
const { buttonDownInStream } = useStore((s) => ({
|
const { buttonDownInStream } = useStore((s) => ({
|
||||||
buttonDownInStream: s.buttonDownInStream,
|
buttonDownInStream: s.buttonDownInStream,
|
||||||
}))
|
}))
|
||||||
|
@ -1,24 +1,19 @@
|
|||||||
import { OnboardingButtons, useDismiss } from '.'
|
import { OnboardingButtons, useDemoCode, useDismiss } from '.'
|
||||||
import { useEffect } from 'react'
|
import { useEffect } from 'react'
|
||||||
import { bracket } from 'lib/exampleKcl'
|
|
||||||
import { codeManager, kclManager } from 'lib/singletons'
|
|
||||||
import { useModelingContext } from 'hooks/useModelingContext'
|
import { useModelingContext } from 'hooks/useModelingContext'
|
||||||
import { APP_NAME } from 'lib/constants'
|
import { APP_NAME } from 'lib/constants'
|
||||||
import { onboardingPaths } from './paths'
|
import { onboardingPaths } from './paths'
|
||||||
|
import { sceneInfra } from 'lib/singletons'
|
||||||
|
|
||||||
export default function FutureWork() {
|
export default function FutureWork() {
|
||||||
const { send } = useModelingContext()
|
const { send } = useModelingContext()
|
||||||
const dismiss = useDismiss()
|
const dismiss = useDismiss()
|
||||||
|
|
||||||
|
// Reset the code, the camera, and the modeling state
|
||||||
|
useDemoCode()
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// We do want to update both the state and editor here.
|
|
||||||
codeManager.updateCodeEditor(bracket)
|
|
||||||
if (kclManager.engineCommandManager.engineConnection?.isReady()) {
|
|
||||||
// If the engine is ready, promptly execute the loaded code
|
|
||||||
kclManager.executeCode(true, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
send({ type: 'Cancel' }) // in case the user hit 'Next' while still in sketch mode
|
send({ type: 'Cancel' }) // in case the user hit 'Next' while still in sketch mode
|
||||||
|
sceneInfra.camControls.resetCameraPosition()
|
||||||
}, [send])
|
}, [send])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -1,9 +1,16 @@
|
|||||||
import { OnboardingButtons, kbdClasses, useDismiss, useNextClick } from '.'
|
import {
|
||||||
|
OnboardingButtons,
|
||||||
|
kbdClasses,
|
||||||
|
useDemoCode,
|
||||||
|
useDismiss,
|
||||||
|
useNextClick,
|
||||||
|
} from '.'
|
||||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
import { useStore } from '../../useStore'
|
import { useStore } from '../../useStore'
|
||||||
import { bracketWidthConstantLine } from 'lib/exampleKcl'
|
import { bracketWidthConstantLine } from 'lib/exampleKcl'
|
||||||
|
|
||||||
export default function InteractiveNumbers() {
|
export default function OnboardingInteractiveNumbers() {
|
||||||
|
useDemoCode()
|
||||||
const { buttonDownInStream } = useStore((s) => ({
|
const { buttonDownInStream } = useStore((s) => ({
|
||||||
buttonDownInStream: s.buttonDownInStream,
|
buttonDownInStream: s.buttonDownInStream,
|
||||||
}))
|
}))
|
||||||
@ -33,8 +40,10 @@ export default function InteractiveNumbers() {
|
|||||||
<kbd className={kbdClasses}>Option</kbd>) key
|
<kbd className={kbdClasses}>Option</kbd>) key
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
Hover over the number assigned to <code>width</code> on line{' '}
|
Hover over the number assigned to "width" on{' '}
|
||||||
{bracketWidthConstantLine}
|
<em>
|
||||||
|
<strong>line {bracketWidthConstantLine}</strong>
|
||||||
|
</em>
|
||||||
</li>
|
</li>
|
||||||
<li>Drag the number left and right to change its value</li>
|
<li>Drag the number left and right to change its value</li>
|
||||||
</ol>
|
</ol>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { OnboardingButtons, useDismiss, useNextClick } from '.'
|
import { OnboardingButtons, useDemoCode, useDismiss, useNextClick } from '.'
|
||||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
import { useSettingsAuthContext } from 'hooks/useSettingsAuthContext'
|
import { useSettingsAuthContext } from 'hooks/useSettingsAuthContext'
|
||||||
import { Themes, getSystemTheme } from 'lib/theme'
|
import { Themes, getSystemTheme } from 'lib/theme'
|
||||||
@ -10,7 +10,6 @@ import {
|
|||||||
import { isTauri } from 'lib/isTauri'
|
import { isTauri } from 'lib/isTauri'
|
||||||
import { useNavigate } from 'react-router-dom'
|
import { useNavigate } from 'react-router-dom'
|
||||||
import { paths } from 'lib/paths'
|
import { paths } from 'lib/paths'
|
||||||
import { useEffect } from 'react'
|
|
||||||
import { codeManager, kclManager } from 'lib/singletons'
|
import { codeManager, kclManager } from 'lib/singletons'
|
||||||
import { join } from '@tauri-apps/api/path'
|
import { join } from '@tauri-apps/api/path'
|
||||||
import {
|
import {
|
||||||
@ -92,7 +91,7 @@ function OnboardingWithNewFile() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function Introduction() {
|
export default function OnboardingIntroduction() {
|
||||||
const {
|
const {
|
||||||
settings: {
|
settings: {
|
||||||
state: {
|
state: {
|
||||||
@ -112,9 +111,7 @@ export default function Introduction() {
|
|||||||
const currentCode = codeManager.code
|
const currentCode = codeManager.code
|
||||||
const isStarterCode = currentCode === '' || currentCode === bracket
|
const isStarterCode = currentCode === '' || currentCode === bracket
|
||||||
|
|
||||||
useEffect(() => {
|
useDemoCode()
|
||||||
if (codeManager.code === '') codeManager.updateCodeEditor(bracket)
|
|
||||||
}, [])
|
|
||||||
|
|
||||||
return isStarterCode ? (
|
return isStarterCode ? (
|
||||||
<div className="fixed inset-0 z-50 grid place-content-center bg-chalkboard-110/50">
|
<div className="fixed inset-0 z-50 grid place-content-center bg-chalkboard-110/50">
|
||||||
@ -159,6 +156,12 @@ export default function Introduction() {
|
|||||||
! We are trying to release as early as possible to get feedback from
|
! We are trying to release as early as possible to get feedback from
|
||||||
users like you.
|
users like you.
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
As you go through the onboarding, we'll be changing and resetting
|
||||||
|
your code occasionally, so that we can reference specific code
|
||||||
|
features. So hold off on writing production KCL code until you're
|
||||||
|
done with the onboarding 😉
|
||||||
|
</p>
|
||||||
</section>
|
</section>
|
||||||
<OnboardingButtons
|
<OnboardingButtons
|
||||||
currentSlug={onboardingPaths.INDEX}
|
currentSlug={onboardingPaths.INDEX}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import { OnboardingButtons, useDismiss, useNextClick } from '.'
|
import { OnboardingButtons, useDemoCode, useDismiss, useNextClick } from '.'
|
||||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
import { useStore } from '../../useStore'
|
import { useStore } from '../../useStore'
|
||||||
import { Themes, getSystemTheme } from 'lib/theme'
|
import { Themes, getSystemTheme } from 'lib/theme'
|
||||||
import { useSettingsAuthContext } from 'hooks/useSettingsAuthContext'
|
import { useSettingsAuthContext } from 'hooks/useSettingsAuthContext'
|
||||||
import { bracketThicknessCalculationLine } from 'lib/exampleKcl'
|
import { bracketThicknessCalculationLine } from 'lib/exampleKcl'
|
||||||
|
|
||||||
export default function ParametricModeling() {
|
export default function OnboardingParametricModeling() {
|
||||||
|
useDemoCode()
|
||||||
const { buttonDownInStream } = useStore((s) => ({
|
const { buttonDownInStream } = useStore((s) => ({
|
||||||
buttonDownInStream: s.buttonDownInStream,
|
buttonDownInStream: s.buttonDownInStream,
|
||||||
}))
|
}))
|
||||||
@ -44,8 +45,10 @@ export default function ParametricModeling() {
|
|||||||
|
|
||||||
<p className="my-4">
|
<p className="my-4">
|
||||||
We've received this sketch from a designer highlighting an{' '}
|
We've received this sketch from a designer highlighting an{' '}
|
||||||
<em className="text-primary">aluminum bracket</em> they need for
|
<em>
|
||||||
this shelf:
|
<strong>aluminum bracket</strong>
|
||||||
|
</em>{' '}
|
||||||
|
they need for this shelf:
|
||||||
</p>
|
</p>
|
||||||
<figure className="my-4 w-2/3 mx-auto">
|
<figure className="my-4 w-2/3 mx-auto">
|
||||||
<img
|
<img
|
||||||
@ -59,8 +62,8 @@ export default function ParametricModeling() {
|
|||||||
<p className="my-4">
|
<p className="my-4">
|
||||||
We are able to easily calculate the thickness of the material based
|
We are able to easily calculate the thickness of the material based
|
||||||
on the width of the bracket to meet a set safety factor on{' '}
|
on the width of the bracket to meet a set safety factor on{' '}
|
||||||
<em className="text-primary">
|
<em>
|
||||||
line {bracketThicknessCalculationLine}
|
<strong>line {bracketThicknessCalculationLine}</strong>
|
||||||
</em>
|
</em>
|
||||||
.
|
.
|
||||||
</p>
|
</p>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { OnboardingButtons, useDismiss, useNextClick } from '.'
|
import { OnboardingButtons, useDismiss, useNextClick } from '.'
|
||||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
import { useStore } from '../../useStore'
|
import { useStore } from '../../useStore'
|
||||||
|
import { useEffect, useState } from 'react'
|
||||||
|
|
||||||
export default function UserMenu() {
|
export default function UserMenu() {
|
||||||
const { buttonDownInStream } = useStore((s) => ({
|
const { buttonDownInStream } = useStore((s) => ({
|
||||||
@ -8,6 +9,20 @@ export default function UserMenu() {
|
|||||||
}))
|
}))
|
||||||
const dismiss = useDismiss()
|
const dismiss = useDismiss()
|
||||||
const next = useNextClick(onboardingPaths.PROJECT_MENU)
|
const next = useNextClick(onboardingPaths.PROJECT_MENU)
|
||||||
|
const [avatarErrored, setAvatarErrored] = useState(false)
|
||||||
|
const buttonDescription = !avatarErrored ? 'your avatar' : 'the menu button'
|
||||||
|
|
||||||
|
// Set up error handling for the user's avatar image,
|
||||||
|
// so the onboarding text can be updated if it fails to load.
|
||||||
|
useEffect(() => {
|
||||||
|
const element = globalThis.document.querySelector(
|
||||||
|
'[data-testid="user-sidebar-toggle"] img'
|
||||||
|
)
|
||||||
|
|
||||||
|
if (element?.tagName === 'IMG') {
|
||||||
|
element.addEventListener('error', () => setAvatarErrored(true))
|
||||||
|
}
|
||||||
|
}, [])
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="fixed grid justify-center items-start inset-0 z-50 pointer-events-none">
|
<div className="fixed grid justify-center items-start inset-0 z-50 pointer-events-none">
|
||||||
@ -20,8 +35,8 @@ export default function UserMenu() {
|
|||||||
<section className="flex-1">
|
<section className="flex-1">
|
||||||
<h2 className="text-2xl font-bold">User Menu</h2>
|
<h2 className="text-2xl font-bold">User Menu</h2>
|
||||||
<p className="my-4">
|
<p className="my-4">
|
||||||
Click your avatar on the upper right to open the user menu. You can
|
Click {buttonDescription} in the upper right to open the user menu.
|
||||||
change your settings, sign out, or request a feature.
|
You can change your settings, sign out, or request a feature.
|
||||||
</p>
|
</p>
|
||||||
<p className="my-4">
|
<p className="my-4">
|
||||||
We only support global settings at the moment, but we are working to
|
We only support global settings at the moment, but we are working to
|
||||||
|
@ -19,9 +19,11 @@ import { paths } from 'lib/paths'
|
|||||||
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
|
import { useAbsoluteFilePath } from 'hooks/useAbsoluteFilePath'
|
||||||
import { ActionButton } from 'components/ActionButton'
|
import { ActionButton } from 'components/ActionButton'
|
||||||
import { onboardingPaths } from 'routes/Onboarding/paths'
|
import { onboardingPaths } from 'routes/Onboarding/paths'
|
||||||
|
import { codeManager, editorManager } from 'lib/singletons'
|
||||||
|
import { bracket } from 'lib/exampleKcl'
|
||||||
|
|
||||||
export const kbdClasses =
|
export const kbdClasses =
|
||||||
'p-0.5 text-sm rounded-sm bg-chalkboard-10 dark:bg-chalkboard-100 border border-chalkboard-50'
|
'py-0.5 px-1 text-sm rounded bg-chalkboard-10 dark:bg-chalkboard-100 border border-chalkboard-50 border-b-2'
|
||||||
|
|
||||||
export const onboardingRoutes = [
|
export const onboardingRoutes = [
|
||||||
{
|
{
|
||||||
@ -75,6 +77,13 @@ export const onboardingRoutes = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
export function useDemoCode() {
|
||||||
|
useEffect(() => {
|
||||||
|
if (!editorManager.editorView) return
|
||||||
|
setTimeout(() => codeManager.updateCodeStateEditor(bracket))
|
||||||
|
}, [editorManager.editorView, codeManager.updateCodeStateEditor])
|
||||||
|
}
|
||||||
|
|
||||||
export function useNextClick(newStatus: string) {
|
export function useNextClick(newStatus: string) {
|
||||||
const filePath = useAbsoluteFilePath()
|
const filePath = useAbsoluteFilePath()
|
||||||
const {
|
const {
|
||||||
|
213
src/wasm-lib/Cargo.lock
generated
@ -169,7 +169,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -180,7 +180,7 @@ checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -197,7 +197,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -437,7 +437,7 @@ dependencies = [
|
|||||||
"heck 0.5.0",
|
"heck 0.5.0",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -635,7 +635,7 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"strsim 0.10.0",
|
"strsim 0.10.0",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -646,7 +646,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"darling_core",
|
"darling_core",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -687,7 +687,7 @@ checksum = "4078275de501a61ceb9e759d37bdd3d7210e654dbc167ac1a3678ef4435ed57b"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
"synstructure",
|
"synstructure",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -716,7 +716,7 @@ dependencies = [
|
|||||||
"rustfmt-wrapper",
|
"rustfmt-wrapper",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_tokenstream",
|
"serde_tokenstream",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -727,7 +727,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -754,7 +754,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -926,7 +926,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1016,7 +1016,7 @@ dependencies = [
|
|||||||
"inflections",
|
"inflections",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1277,6 +1277,12 @@ dependencies = [
|
|||||||
"hashbrown 0.14.3",
|
"hashbrown 0.14.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "indoc"
|
||||||
|
version = "2.0.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "inflections"
|
name = "inflections"
|
||||||
version = "1.1.1"
|
version = "1.1.1"
|
||||||
@ -1369,7 +1375,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kcl-lib"
|
name = "kcl-lib"
|
||||||
version = "0.1.60"
|
version = "0.1.62"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"approx",
|
"approx",
|
||||||
@ -1399,6 +1405,7 @@ dependencies = [
|
|||||||
"mime_guess",
|
"mime_guess",
|
||||||
"parse-display",
|
"parse-display",
|
||||||
"pretty_assertions",
|
"pretty_assertions",
|
||||||
|
"pyo3",
|
||||||
"reqwest",
|
"reqwest",
|
||||||
"ropey",
|
"ropey",
|
||||||
"schemars",
|
"schemars",
|
||||||
@ -1431,7 +1438,20 @@ dependencies = [
|
|||||||
"pretty_assertions",
|
"pretty_assertions",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "kcl-test-server"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"anyhow",
|
||||||
|
"hyper",
|
||||||
|
"kcl-lib",
|
||||||
|
"pico-args",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1556,6 +1576,15 @@ version = "2.7.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
|
checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "memoffset"
|
||||||
|
version = "0.9.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mime"
|
name = "mime"
|
||||||
version = "0.3.17"
|
version = "0.3.17"
|
||||||
@ -1785,7 +1814,7 @@ dependencies = [
|
|||||||
"regex",
|
"regex",
|
||||||
"regex-syntax 0.8.3",
|
"regex-syntax 0.8.3",
|
||||||
"structmeta",
|
"structmeta",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1815,6 +1844,12 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pico-args"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project"
|
name = "pin-project"
|
||||||
version = "1.1.5"
|
version = "1.1.5"
|
||||||
@ -1832,7 +1867,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -1888,6 +1923,12 @@ dependencies = [
|
|||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "portable-atomic"
|
||||||
|
version = "1.6.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "powerfmt"
|
name = "powerfmt"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
@ -1936,13 +1977,76 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.85"
|
version = "1.0.86"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "22244ce15aa966053a896d1accb3a6e68469b97c7f33f284b99f0d576879fc23"
|
checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"unicode-ident",
|
"unicode-ident",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyo3"
|
||||||
|
version = "0.21.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"indoc",
|
||||||
|
"libc",
|
||||||
|
"memoffset",
|
||||||
|
"parking_lot 0.12.1",
|
||||||
|
"portable-atomic",
|
||||||
|
"pyo3-build-config",
|
||||||
|
"pyo3-ffi",
|
||||||
|
"pyo3-macros",
|
||||||
|
"unindent",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyo3-build-config"
|
||||||
|
version = "0.21.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50"
|
||||||
|
dependencies = [
|
||||||
|
"once_cell",
|
||||||
|
"target-lexicon",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyo3-ffi"
|
||||||
|
version = "0.21.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"pyo3-build-config",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyo3-macros"
|
||||||
|
version = "0.21.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"pyo3-macros-backend",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.67",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pyo3-macros-backend"
|
||||||
|
version = "0.21.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c"
|
||||||
|
dependencies = [
|
||||||
|
"heck 0.4.1",
|
||||||
|
"proc-macro2",
|
||||||
|
"pyo3-build-config",
|
||||||
|
"quote",
|
||||||
|
"syn 2.0.67",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "quick-xml"
|
name = "quick-xml"
|
||||||
version = "0.28.2"
|
version = "0.28.2"
|
||||||
@ -2402,7 +2506,7 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"serde_derive_internals",
|
"serde_derive_internals",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2476,7 +2580,7 @@ checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2487,14 +2591,14 @@ checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.116"
|
version = "1.0.117"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3e17db7126d17feb94eb3fad46bf1a96b034e8aacbc2e775fe81505f8b0b2813"
|
checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"indexmap 2.2.5",
|
"indexmap 2.2.5",
|
||||||
"itoa",
|
"itoa",
|
||||||
@ -2510,7 +2614,7 @@ checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2524,14 +2628,14 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_tokenstream"
|
name = "serde_tokenstream"
|
||||||
version = "0.2.0"
|
version = "0.2.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8a00ffd23fd882d096f09fcaae2a9de8329a328628e86027e049ee051dc1621f"
|
checksum = "8790a7c3fe883e443eaa2af6f705952bc5d6e8671a220b9335c8cae92c037e74"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"serde",
|
"serde",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2668,7 +2772,7 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"structmeta-derive",
|
"structmeta-derive",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2679,7 +2783,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2723,9 +2827,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "2.0.66"
|
version = "2.0.67"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c42f3f41a2de00b01c0aaad383c5a45241efc8b2d1eda5661812fda5f3cdcff5"
|
checksum = "ff8655ed1d86f3af4ee3fd3263786bc14245ad17c4c7e85ba7187fb3ae028c90"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -2746,7 +2850,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2776,6 +2880,12 @@ version = "1.0.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
|
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "target-lexicon"
|
||||||
|
version = "0.12.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "task-local-extensions"
|
name = "task-local-extensions"
|
||||||
version = "0.1.4"
|
version = "0.1.4"
|
||||||
@ -2823,7 +2933,7 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2919,7 +3029,7 @@ checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3072,7 +3182,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3100,7 +3210,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3157,10 +3267,12 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ts-rs"
|
name = "ts-rs"
|
||||||
version = "8.1.0"
|
version = "9.0.0"
|
||||||
source = "git+https://github.com/Aleph-Alpha/ts-rs#be0349d5fb07a8ccab713887a61e90e3bc773c7a"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "5e2dcf58e612adda9a83800731e8e4aba04d8a302b9029617b0b6e4b021d5357"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
|
"serde_json",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"ts-rs-macros",
|
"ts-rs-macros",
|
||||||
"url",
|
"url",
|
||||||
@ -3169,12 +3281,13 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ts-rs-macros"
|
name = "ts-rs-macros"
|
||||||
version = "8.1.0"
|
version = "9.0.0"
|
||||||
source = "git+https://github.com/Aleph-Alpha/ts-rs#be0349d5fb07a8ccab713887a61e90e3bc773c7a"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cbdee324e50a7402416d9c25270d3df4241ed528af5d36dda18b6f219551c577"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
"termcolor",
|
"termcolor",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -3258,6 +3371,12 @@ version = "0.1.11"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unindent"
|
||||||
|
version = "0.2.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c7de7d73e1754487cb58364ee906a499937a0dfabd86bcb980fa99ec8c8fa2ce"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "untrusted"
|
name = "untrusted"
|
||||||
version = "0.9.0"
|
version = "0.9.0"
|
||||||
@ -3266,9 +3385,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.5.0"
|
version = "2.5.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
|
checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"form_urlencoded",
|
"form_urlencoded",
|
||||||
"idna",
|
"idna",
|
||||||
@ -3327,7 +3446,7 @@ dependencies = [
|
|||||||
"proc-macro-error",
|
"proc-macro-error",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -3388,7 +3507,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -3423,7 +3542,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
"wasm-bindgen-backend",
|
"wasm-bindgen-backend",
|
||||||
"wasm-bindgen-shared",
|
"wasm-bindgen-shared",
|
||||||
]
|
]
|
||||||
@ -3748,7 +3867,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"syn 2.0.66",
|
"syn 2.0.67",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -65,6 +65,7 @@ members = [
|
|||||||
"derive-docs",
|
"derive-docs",
|
||||||
"kcl",
|
"kcl",
|
||||||
"kcl-macros",
|
"kcl-macros",
|
||||||
|
"kcl-test-server",
|
||||||
]
|
]
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
|
@ -20,7 +20,7 @@ quote = "1"
|
|||||||
regex = "1.10"
|
regex = "1.10"
|
||||||
serde = { version = "1.0.203", features = ["derive"] }
|
serde = { version = "1.0.203", features = ["derive"] }
|
||||||
serde_tokenstream = "0.2"
|
serde_tokenstream = "0.2"
|
||||||
syn = { version = "2.0.66", features = ["full"] }
|
syn = { version = "2.0.67", features = ["full"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
anyhow = "1.0.86"
|
anyhow = "1.0.86"
|
||||||
|
@ -15,7 +15,7 @@ databake = "0.1.8"
|
|||||||
kcl-lib = { path = "../kcl" }
|
kcl-lib = { path = "../kcl" }
|
||||||
proc-macro2 = "1"
|
proc-macro2 = "1"
|
||||||
quote = "1"
|
quote = "1"
|
||||||
syn = { version = "2.0.66", features = ["full"] }
|
syn = { version = "2.0.67", features = ["full"] }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
pretty_assertions = "1.4.0"
|
pretty_assertions = "1.4.0"
|
||||||
|
15
src/wasm-lib/kcl-test-server/Cargo.toml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[package]
|
||||||
|
name = "kcl-test-server"
|
||||||
|
description = "A test server for KCL"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
license = "MIT"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
anyhow = "1.0.86"
|
||||||
|
hyper = { version = "0.14.29", features = ["server"] }
|
||||||
|
kcl-lib = { version = "0.1.62", path = "../kcl" }
|
||||||
|
pico-args = "0.5.0"
|
||||||
|
serde = { version = "1.0.203", features = ["derive"] }
|
||||||
|
serde_json = "1.0.117"
|
||||||
|
tokio = { version = "1.38.0", features = ["macros", "rt-multi-thread"] }
|
207
src/wasm-lib/kcl-test-server/src/lib.rs
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
//! Executes KCL programs.
|
||||||
|
//! The server reuses the same engine session for each KCL program it receives.
|
||||||
|
use std::{
|
||||||
|
net::SocketAddr,
|
||||||
|
sync::{
|
||||||
|
atomic::{AtomicUsize, Ordering},
|
||||||
|
Arc,
|
||||||
|
},
|
||||||
|
time::Duration,
|
||||||
|
};
|
||||||
|
|
||||||
|
use hyper::{
|
||||||
|
body::Bytes,
|
||||||
|
header::CONTENT_TYPE,
|
||||||
|
service::{make_service_fn, service_fn},
|
||||||
|
Body, Error, Response, Server,
|
||||||
|
};
|
||||||
|
use kcl_lib::{executor::ExecutorContext, settings::types::UnitLength, test_server::RequestBody};
|
||||||
|
use tokio::{
|
||||||
|
sync::{mpsc, oneshot},
|
||||||
|
task::JoinHandle,
|
||||||
|
time::sleep,
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct ServerArgs {
|
||||||
|
/// What port this server should listen on.
|
||||||
|
pub listen_on: SocketAddr,
|
||||||
|
/// How many connections to establish with the engine.
|
||||||
|
pub num_engine_conns: u8,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ServerArgs {
|
||||||
|
pub fn parse(mut pargs: pico_args::Arguments) -> Result<Self, pico_args::Error> {
|
||||||
|
let args = ServerArgs {
|
||||||
|
listen_on: pargs
|
||||||
|
.opt_value_from_str("--listen-on")?
|
||||||
|
.unwrap_or("0.0.0.0:3333".parse().unwrap()),
|
||||||
|
num_engine_conns: pargs.opt_value_from_str("--num-engine-conns")?.unwrap_or(1),
|
||||||
|
};
|
||||||
|
println!("Config is {args:?}");
|
||||||
|
Ok(args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Sent from the server to each worker.
|
||||||
|
struct WorkerReq {
|
||||||
|
/// A KCL program, in UTF-8.
|
||||||
|
body: Bytes,
|
||||||
|
/// A channel to send the HTTP response back.
|
||||||
|
resp: oneshot::Sender<Response<Body>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Each worker has a connection to the engine, and accepts
|
||||||
|
/// KCL programs. When it receives one (over the mpsc channel)
|
||||||
|
/// it executes it and returns the result via a oneshot channel.
|
||||||
|
fn start_worker(i: u8) -> mpsc::Sender<WorkerReq> {
|
||||||
|
println!("Starting worker {i}");
|
||||||
|
// Make a work queue for this worker.
|
||||||
|
let (tx, mut rx) = mpsc::channel(1);
|
||||||
|
tokio::task::spawn(async move {
|
||||||
|
let state = ExecutorContext::new_for_unit_test(UnitLength::Mm).await.unwrap();
|
||||||
|
println!("Worker {i} ready");
|
||||||
|
while let Some(req) = rx.recv().await {
|
||||||
|
let req: WorkerReq = req;
|
||||||
|
let resp = snapshot_endpoint(req.body, state.clone()).await;
|
||||||
|
if req.resp.send(resp).is_err() {
|
||||||
|
println!("\tWorker {i} exiting");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("\tWorker {i} exiting");
|
||||||
|
});
|
||||||
|
tx
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ServerState {
|
||||||
|
workers: Vec<mpsc::Sender<WorkerReq>>,
|
||||||
|
req_num: AtomicUsize,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn start_server(args: ServerArgs) -> anyhow::Result<()> {
|
||||||
|
let ServerArgs {
|
||||||
|
listen_on,
|
||||||
|
num_engine_conns,
|
||||||
|
} = args;
|
||||||
|
let workers: Vec<_> = (0..num_engine_conns).map(start_worker).collect();
|
||||||
|
let state = Arc::new(ServerState {
|
||||||
|
workers,
|
||||||
|
req_num: 0.into(),
|
||||||
|
});
|
||||||
|
// In hyper, a `MakeService` is basically your server.
|
||||||
|
// It makes a `Service` for each connection, which manages the connection.
|
||||||
|
let make_service = make_service_fn(
|
||||||
|
// This closure is run for each connection.
|
||||||
|
move |_conn_info| {
|
||||||
|
// eprintln!("Connected to a client");
|
||||||
|
let state = state.clone();
|
||||||
|
async move {
|
||||||
|
// This is the `Service` which handles the connection.
|
||||||
|
// `service_fn` converts a function which returns a Response
|
||||||
|
// into a `Service`.
|
||||||
|
Ok::<_, Error>(service_fn(move |req| {
|
||||||
|
// eprintln!("Received a request");
|
||||||
|
let state = state.clone();
|
||||||
|
async move { handle_request(req, state).await }
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
let server = Server::bind(&listen_on).serve(make_service);
|
||||||
|
println!("Listening on {listen_on}");
|
||||||
|
println!("PID is {}", std::process::id());
|
||||||
|
if let Err(e) = server.await {
|
||||||
|
eprintln!("Server error: {e}");
|
||||||
|
return Err(e.into());
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn handle_request(req: hyper::Request<Body>, state3: Arc<ServerState>) -> Result<Response<Body>, Error> {
|
||||||
|
let body = hyper::body::to_bytes(req.into_body()).await?;
|
||||||
|
|
||||||
|
// Round robin requests between each available worker.
|
||||||
|
let req_num = state3.req_num.fetch_add(1, Ordering::Relaxed);
|
||||||
|
let worker_id = req_num % state3.workers.len();
|
||||||
|
// println!("Sending request {req_num} to worker {worker_id}");
|
||||||
|
let worker = state3.workers[worker_id].clone();
|
||||||
|
let (tx, rx) = oneshot::channel();
|
||||||
|
let req_sent = worker.send(WorkerReq { body, resp: tx }).await;
|
||||||
|
req_sent.unwrap();
|
||||||
|
let resp = rx.await.unwrap();
|
||||||
|
Ok(resp)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Execute a KCL program, then respond with a PNG snapshot.
|
||||||
|
/// KCL errors (from engine or the executor) respond with HTTP Bad Gateway.
|
||||||
|
/// Malformed requests are HTTP Bad Request.
|
||||||
|
/// Successful requests contain a PNG as the body.
|
||||||
|
async fn snapshot_endpoint(body: Bytes, state: ExecutorContext) -> Response<Body> {
|
||||||
|
let body = match serde_json::from_slice::<RequestBody>(body.as_ref()) {
|
||||||
|
Ok(bd) => bd,
|
||||||
|
Err(e) => return bad_request(format!("Invalid request JSON: {e}")),
|
||||||
|
};
|
||||||
|
let RequestBody { kcl_program, test_name } = body;
|
||||||
|
let parser = match kcl_lib::token::lexer(&kcl_program) {
|
||||||
|
Ok(ts) => kcl_lib::parser::Parser::new(ts),
|
||||||
|
Err(e) => return bad_request(format!("tokenization error: {e}")),
|
||||||
|
};
|
||||||
|
let program = match parser.ast() {
|
||||||
|
Ok(pr) => pr,
|
||||||
|
Err(e) => return bad_request(format!("Parse error: {e}")),
|
||||||
|
};
|
||||||
|
eprintln!("Executing {test_name}");
|
||||||
|
if let Err(e) = state.reset_scene().await {
|
||||||
|
return kcl_err(e);
|
||||||
|
}
|
||||||
|
// Let users know if the test is taking a long time.
|
||||||
|
let (done_tx, done_rx) = oneshot::channel::<()>();
|
||||||
|
let timer = time_until(done_rx);
|
||||||
|
let snapshot = match state.execute_and_prepare_snapshot(program).await {
|
||||||
|
Ok(sn) => sn,
|
||||||
|
Err(e) => return kcl_err(e),
|
||||||
|
};
|
||||||
|
let _ = done_tx.send(());
|
||||||
|
timer.abort();
|
||||||
|
eprintln!("\tServing response");
|
||||||
|
let png_bytes = snapshot.contents.0;
|
||||||
|
let mut resp = Response::new(Body::from(png_bytes));
|
||||||
|
resp.headers_mut().insert(CONTENT_TYPE, "image/png".parse().unwrap());
|
||||||
|
resp
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bad_request(msg: String) -> Response<Body> {
|
||||||
|
eprintln!("\tBad request");
|
||||||
|
let mut resp = Response::new(Body::from(msg));
|
||||||
|
*resp.status_mut() = hyper::StatusCode::BAD_REQUEST;
|
||||||
|
resp
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bad_gateway(msg: String) -> Response<Body> {
|
||||||
|
eprintln!("\tBad gateway");
|
||||||
|
let mut resp = Response::new(Body::from(msg));
|
||||||
|
*resp.status_mut() = hyper::StatusCode::BAD_GATEWAY;
|
||||||
|
resp
|
||||||
|
}
|
||||||
|
|
||||||
|
fn kcl_err(err: anyhow::Error) -> Response<Body> {
|
||||||
|
eprintln!("\tBad KCL");
|
||||||
|
bad_gateway(format!("{err}"))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn time_until(done: oneshot::Receiver<()>) -> JoinHandle<()> {
|
||||||
|
tokio::task::spawn(async move {
|
||||||
|
let period = 10;
|
||||||
|
tokio::pin!(done);
|
||||||
|
for i in 1..=3 {
|
||||||
|
tokio::select! {
|
||||||
|
biased;
|
||||||
|
// If the test is done, no need for this timer anymore.
|
||||||
|
_ = &mut done => return,
|
||||||
|
_ = sleep(Duration::from_secs(period)) => {
|
||||||
|
eprintln!("\tTest has taken {}s", period * i);
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "kcl-lib"
|
name = "kcl-lib"
|
||||||
description = "KittyCAD Language implementation and tools"
|
description = "KittyCAD Language implementation and tools"
|
||||||
version = "0.1.60"
|
version = "0.1.62"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
repository = "https://github.com/KittyCAD/modeling-app"
|
repository = "https://github.com/KittyCAD/modeling-app"
|
||||||
@ -28,6 +28,7 @@ kittycad = { workspace = true, features = ["clap"] }
|
|||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
mime_guess = "2.0.4"
|
mime_guess = "2.0.4"
|
||||||
parse-display = "0.9.1"
|
parse-display = "0.9.1"
|
||||||
|
pyo3 = {version = "0.21.2", optional = true}
|
||||||
reqwest = { version = "0.11.26", default-features = false, features = ["stream", "rustls-tls"] }
|
reqwest = { version = "0.11.26", default-features = false, features = ["stream", "rustls-tls"] }
|
||||||
ropey = "1.6.1"
|
ropey = "1.6.1"
|
||||||
schemars = { version = "0.8.17", features = ["impl_json_schema", "url", "uuid1"] }
|
schemars = { version = "0.8.17", features = ["impl_json_schema", "url", "uuid1"] }
|
||||||
@ -36,9 +37,8 @@ serde_json = "1.0.116"
|
|||||||
sha2 = "0.10.8"
|
sha2 = "0.10.8"
|
||||||
thiserror = "1.0.61"
|
thiserror = "1.0.61"
|
||||||
toml = "0.8.14"
|
toml = "0.8.14"
|
||||||
# TODO: change this to a cargo release once 8.1.1 comes out
|
ts-rs = { version = "9.0.0", features = ["uuid-impl", "url-impl", "chrono-impl", "no-serde-warnings", "serde-json-impl"] }
|
||||||
ts-rs = { git = "https://github.com/Aleph-Alpha/ts-rs", features = ["uuid-impl", "url-impl", "chrono-impl", "no-serde-warnings"] }
|
url = { version = "2.5.2", features = ["serde"] }
|
||||||
url = { version = "2.5.0", features = ["serde"] }
|
|
||||||
uuid = { version = "1.8.0", features = ["v4", "js", "serde"] }
|
uuid = { version = "1.8.0", features = ["v4", "js", "serde"] }
|
||||||
validator = { version = "0.18.1", features = ["derive"] }
|
validator = { version = "0.18.1", features = ["derive"] }
|
||||||
winnow = "0.5.40"
|
winnow = "0.5.40"
|
||||||
@ -62,7 +62,11 @@ tower-lsp = { version = "0.20.0", features = ["proposed"] }
|
|||||||
[features]
|
[features]
|
||||||
default = ["cli", "engine"]
|
default = ["cli", "engine"]
|
||||||
cli = ["dep:clap"]
|
cli = ["dep:clap"]
|
||||||
|
# For the lsp server, when run with stdout for rpc we want to disable println.
|
||||||
|
# This is used for editor extensions that use the lsp server.
|
||||||
|
disable-println = []
|
||||||
engine = []
|
engine = []
|
||||||
|
pyo3 = ["dep:pyo3"]
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
panic = "abort"
|
panic = "abort"
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
//! Data types for the AST.
|
//! Data types for the AST.
|
||||||
|
|
||||||
use std::{collections::HashMap, fmt::Write, ops::RangeInclusive};
|
use std::{
|
||||||
|
collections::HashMap,
|
||||||
|
fmt::Write,
|
||||||
|
ops::RangeInclusive,
|
||||||
|
sync::{Arc, Mutex},
|
||||||
|
};
|
||||||
|
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use databake::*;
|
use databake::*;
|
||||||
@ -147,6 +152,21 @@ impl Program {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Check the provided Program for any lint findings.
|
||||||
|
pub fn lint<'a, RuleT>(&'a self, rule: RuleT) -> Result<Vec<crate::lint::Discovered>>
|
||||||
|
where
|
||||||
|
RuleT: crate::lint::rule::Rule<'a>,
|
||||||
|
{
|
||||||
|
let v = Arc::new(Mutex::new(vec![]));
|
||||||
|
crate::lint::walk(self, &|node: crate::lint::Node<'a>| {
|
||||||
|
let mut findings = v.lock().map_err(|_| anyhow::anyhow!("mutex"))?;
|
||||||
|
findings.append(&mut rule.check(node)?);
|
||||||
|
Ok(true)
|
||||||
|
})?;
|
||||||
|
let x = v.lock().unwrap();
|
||||||
|
Ok(x.clone())
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the body item that includes the given character position.
|
/// Returns the body item that includes the given character position.
|
||||||
pub fn get_body_item_for_position(&self, pos: usize) -> Option<&BodyItem> {
|
pub fn get_body_item_for_position(&self, pos: usize) -> Option<&BodyItem> {
|
||||||
for item in &self.body {
|
for item in &self.body {
|
||||||
@ -1076,7 +1096,12 @@ impl CallExpression {
|
|||||||
|
|
||||||
fn recast(&self, options: &FormatOptions, indentation_level: usize, is_in_pipe: bool) -> String {
|
fn recast(&self, options: &FormatOptions, indentation_level: usize, is_in_pipe: bool) -> String {
|
||||||
format!(
|
format!(
|
||||||
"{}({})",
|
"{}{}({})",
|
||||||
|
if is_in_pipe {
|
||||||
|
"".to_string()
|
||||||
|
} else {
|
||||||
|
options.get_indentation(indentation_level)
|
||||||
|
},
|
||||||
self.callee.name,
|
self.callee.name,
|
||||||
self.arguments
|
self.arguments
|
||||||
.iter()
|
.iter()
|
||||||
@ -1335,7 +1360,7 @@ impl VariableDeclaration {
|
|||||||
indentation,
|
indentation,
|
||||||
self.kind,
|
self.kind,
|
||||||
declaration.id.name,
|
declaration.id.name,
|
||||||
declaration.init.recast(options, indentation_level, false)
|
declaration.init.recast(options, indentation_level, false).trim()
|
||||||
);
|
);
|
||||||
output
|
output
|
||||||
})
|
})
|
||||||
@ -1751,7 +1776,7 @@ impl ArrayExpression {
|
|||||||
inner_indentation,
|
inner_indentation,
|
||||||
self.elements
|
self.elements
|
||||||
.iter()
|
.iter()
|
||||||
.map(|el| el.recast(options, indentation_level, false))
|
.map(|el| el.recast(options, indentation_level, is_in_pipe))
|
||||||
.collect::<Vec<String>>()
|
.collect::<Vec<String>>()
|
||||||
.join(format!(",\n{}", inner_indentation).as_str()),
|
.join(format!(",\n{}", inner_indentation).as_str()),
|
||||||
if is_in_pipe {
|
if is_in_pipe {
|
||||||
@ -2678,7 +2703,8 @@ impl PipeExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn recast(&self, options: &FormatOptions, indentation_level: usize) -> String {
|
fn recast(&self, options: &FormatOptions, indentation_level: usize) -> String {
|
||||||
self.body
|
let pipe = self
|
||||||
|
.body
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.map(|(index, statement)| {
|
.map(|(index, statement)| {
|
||||||
@ -2710,7 +2736,8 @@ impl PipeExpression {
|
|||||||
}
|
}
|
||||||
s
|
s
|
||||||
})
|
})
|
||||||
.collect::<String>()
|
.collect::<String>();
|
||||||
|
format!("{}{}", options.get_indentation(indentation_level), pipe)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns a hover value that includes the given character position.
|
/// Returns a hover value that includes the given character position.
|
||||||
@ -2997,6 +3024,7 @@ pub enum Hover {
|
|||||||
|
|
||||||
/// Format options.
|
/// Format options.
|
||||||
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
|
||||||
|
#[cfg_attr(feature = "pyo3", pyo3::pyclass)]
|
||||||
#[ts(export)]
|
#[ts(export)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
pub struct FormatOptions {
|
pub struct FormatOptions {
|
||||||
@ -3265,6 +3293,132 @@ fn ghi = (x) => {
|
|||||||
assert_eq!(symbols.len(), 7);
|
assert_eq!(symbols.len(), 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_recast_bug_fn_in_fn() {
|
||||||
|
let some_program_string = r#"// Start point (top left)
|
||||||
|
const zoo_x = -20
|
||||||
|
const zoo_y = 7
|
||||||
|
// Scale
|
||||||
|
const s = 1 // s = 1 -> height of Z is 13.4mm
|
||||||
|
// Depth
|
||||||
|
const d = 1
|
||||||
|
|
||||||
|
fn rect = (x, y, w, h) => {
|
||||||
|
startSketchOn('XY')
|
||||||
|
|> startProfileAt([x, y], %)
|
||||||
|
|> xLine(w, %)
|
||||||
|
|> yLine(h, %)
|
||||||
|
|> xLine(-w, %)
|
||||||
|
|> close(%)
|
||||||
|
|> extrude(d, %)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn quad = (x1, y1, x2, y2, x3, y3, x4, y4) => {
|
||||||
|
startSketchOn('XY')
|
||||||
|
|> startProfileAt([x1, y1], %)
|
||||||
|
|> lineTo([x2, y2], %)
|
||||||
|
|> lineTo([x3, y3], %)
|
||||||
|
|> lineTo([x4, y4], %)
|
||||||
|
|> close(%)
|
||||||
|
|> extrude(d, %)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn crosshair = (x, y) => {
|
||||||
|
startSketchOn('XY')
|
||||||
|
|> startProfileAt([x, y], %)
|
||||||
|
|> yLine(1, %)
|
||||||
|
|> yLine(-2, %)
|
||||||
|
|> yLine(1, %)
|
||||||
|
|> xLine(1, %)
|
||||||
|
|> xLine(-2, %)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn z = (z_x, z_y) => {
|
||||||
|
const z_end_w = s * 8.4
|
||||||
|
const z_end_h = s * 3
|
||||||
|
const z_corner = s * 2
|
||||||
|
const z_w = z_end_w + 2 * z_corner
|
||||||
|
const z_h = z_w * 1.08130081300813
|
||||||
|
rect(z_x, z_y, z_end_w, -z_end_h)
|
||||||
|
rect(z_x + z_w, z_y, -z_corner, -z_corner)
|
||||||
|
rect(z_x + z_w, z_y - z_h, -z_end_w, z_end_h)
|
||||||
|
rect(z_x, z_y - z_h, z_corner, z_corner)
|
||||||
|
quad(z_x, z_y - z_h + z_corner, z_x + z_w - z_corner, z_y, z_x + z_w, z_y - z_corner, z_x + z_corner, z_y - z_h)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn o = (c_x, c_y) => {
|
||||||
|
// Outer and inner radii
|
||||||
|
const o_r = s * 6.95
|
||||||
|
const i_r = 0.5652173913043478 * o_r
|
||||||
|
|
||||||
|
// Angle offset for diagonal break
|
||||||
|
const a = 7
|
||||||
|
|
||||||
|
// Start point for the top sketch
|
||||||
|
const o_x1 = c_x + o_r * cos((45 + a) / 360 * tau())
|
||||||
|
const o_y1 = c_y + o_r * sin((45 + a) / 360 * tau())
|
||||||
|
|
||||||
|
// Start point for the bottom sketch
|
||||||
|
const o_x2 = c_x + o_r * cos((225 + a) / 360 * tau())
|
||||||
|
const o_y2 = c_y + o_r * sin((225 + a) / 360 * tau())
|
||||||
|
|
||||||
|
// End point for the bottom startSketchAt
|
||||||
|
const o_x3 = c_x + o_r * cos((45 - a) / 360 * tau())
|
||||||
|
const o_y3 = c_y + o_r * sin((45 - a) / 360 * tau())
|
||||||
|
|
||||||
|
// Where is the center?
|
||||||
|
// crosshair(c_x, c_y)
|
||||||
|
|
||||||
|
|
||||||
|
startSketchOn('XY')
|
||||||
|
|> startProfileAt([o_x1, o_y1], %)
|
||||||
|
|> arc({
|
||||||
|
radius: o_r,
|
||||||
|
angle_start: 45 + a,
|
||||||
|
angle_end: 225 - a
|
||||||
|
}, %)
|
||||||
|
|> angledLine([45, o_r - i_r], %)
|
||||||
|
|> arc({
|
||||||
|
radius: i_r,
|
||||||
|
angle_start: 225 - a,
|
||||||
|
angle_end: 45 + a
|
||||||
|
}, %)
|
||||||
|
|> close(%)
|
||||||
|
|> extrude(d, %)
|
||||||
|
|
||||||
|
startSketchOn('XY')
|
||||||
|
|> startProfileAt([o_x2, o_y2], %)
|
||||||
|
|> arc({
|
||||||
|
radius: o_r,
|
||||||
|
angle_start: 225 + a,
|
||||||
|
angle_end: 360 + 45 - a
|
||||||
|
}, %)
|
||||||
|
|> angledLine([225, o_r - i_r], %)
|
||||||
|
|> arc({
|
||||||
|
radius: i_r,
|
||||||
|
angle_start: 45 - a,
|
||||||
|
angle_end: 225 + a - 360
|
||||||
|
}, %)
|
||||||
|
|> close(%)
|
||||||
|
|> extrude(d, %)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn zoo = (x0, y0) => {
|
||||||
|
z(x0, y0)
|
||||||
|
o(x0 + s * 20, y0 - (s * 6.7))
|
||||||
|
o(x0 + s * 35, y0 - (s * 6.7))
|
||||||
|
}
|
||||||
|
|
||||||
|
zoo(zoo_x, zoo_y)
|
||||||
|
"#;
|
||||||
|
let tokens = crate::token::lexer(some_program_string).unwrap();
|
||||||
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
|
let program = parser.ast().unwrap();
|
||||||
|
|
||||||
|
let recasted = program.recast(&Default::default(), 0);
|
||||||
|
assert_eq!(recasted, some_program_string);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_recast_bug_extra_parens() {
|
fn test_recast_bug_extra_parens() {
|
||||||
let some_program_string = r#"// Ball Bearing
|
let some_program_string = r#"// Ball Bearing
|
||||||
@ -3332,8 +3486,6 @@ const outsideRevolve = startSketchOn('XZ')
|
|||||||
let parser = crate::parser::Parser::new(tokens);
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
let program = parser.ast().unwrap();
|
let program = parser.ast().unwrap();
|
||||||
|
|
||||||
println!("{:#?}", program);
|
|
||||||
|
|
||||||
let recasted = program.recast(&Default::default(), 0);
|
let recasted = program.recast(&Default::default(), 0);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
recasted,
|
recasted,
|
||||||
@ -3656,7 +3808,6 @@ const tabs_l = startSketchOn({
|
|||||||
let tokens = crate::token::lexer(some_program_string).unwrap();
|
let tokens = crate::token::lexer(some_program_string).unwrap();
|
||||||
let parser = crate::parser::Parser::new(tokens);
|
let parser = crate::parser::Parser::new(tokens);
|
||||||
let program = parser.ast().unwrap();
|
let program = parser.ast().unwrap();
|
||||||
println!("{:#?}", program);
|
|
||||||
|
|
||||||
let recasted = program.recast(&Default::default(), 0);
|
let recasted = program.recast(&Default::default(), 0);
|
||||||
// Its VERY important this comes back with zero new lines.
|
// Its VERY important this comes back with zero new lines.
|
||||||
|