Compare commits
1 Commits
jtran/requ
...
achalmers/
Author | SHA1 | Date | |
---|---|---|---|
0604da9c37 |
37
.github/ISSUE_TEMPLATE/cryptic_error.yml
vendored
@ -1,37 +0,0 @@
|
|||||||
name: Cryptic KCL Error
|
|
||||||
description: File a bug report for source code that produces a confusing error
|
|
||||||
title: "[CRYPTIC]: "
|
|
||||||
labels: ["cryptic-error"]
|
|
||||||
assignees: []
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: "Thank you for taking the time to report a confusing error. Please provide as much information as possible to help us resolve it."
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: kcl
|
|
||||||
attributes:
|
|
||||||
label: Paste minimal KCL source that produces a cryptic error
|
|
||||||
description: Minimal KCL reproducer that produces a cryptic error
|
|
||||||
placeholder: "const ..."
|
|
||||||
render: javascript
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: expected-behavior
|
|
||||||
attributes:
|
|
||||||
label: Expected Behavior
|
|
||||||
description: Description of what you expected to happen (if you know).
|
|
||||||
placeholder: "I expected that..."
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
|
|
||||||
- type: textarea
|
|
||||||
id: additional-context
|
|
||||||
attributes:
|
|
||||||
label: Additional Context
|
|
||||||
description: Add any other context about the problem here.
|
|
||||||
placeholder: "Anything else you want to add..."
|
|
||||||
validations:
|
|
||||||
required: false
|
|
38
README.md
@ -124,40 +124,20 @@ Before you submit a contribution PR to this repo, please ensure that:
|
|||||||
|
|
||||||
## Release a new version
|
## Release a new version
|
||||||
|
|
||||||
#### 1. Bump the versions by running `./make-release.sh` and create a Cut Release PR
|
1. Bump the versions by running `./make-realease.sh` while on a fresh pull of main
|
||||||
|
|
||||||
That will create the branch with the updated json files for you:
|
That will create the branch with the updated json files for you.
|
||||||
- run `./make-release.sh` or `./make-release.sh patch` for a patch update;
|
run `./make-release.sh` for a patch update
|
||||||
- run `./make-release.sh minor` for minor; or
|
run `./make-release.sh "minor"` for minor
|
||||||
- run `./make-release.sh major` for major.
|
run `./make-release.sh "major"` for major
|
||||||
|
|
||||||
After it runs you should just need the push the branch and open a PR.
|
After it runs you should just need to push the push the branch and open a PR (it will suggest a changelog for you too, delete any that are not user facing)
|
||||||
|
|
||||||
**Important:** It needs to be prefixed with `Cut release v` to build in release mode and a few other things to test in the best context possible, the intent would be for instance to have `Cut release v1.2.3` for the `v1.2.3` release candidate.
|
The PR may serve as a place to discuss the human-readable changelog and extra QA.
|
||||||
|
|
||||||
The PR may then serve as a place to discuss the human-readable changelog and extra QA. The `make-release.sh` tool suggests a changelog for you too to be used as PR description, just make sure to delete lines that are not user facing.
|
2. Merge the PR
|
||||||
|
|
||||||
#### 2. Smoke test artifacts from the Cut Release PR
|
|
||||||
|
|
||||||
The release builds can be find under the `artifact` zip, at the very bottom of the `ci` action page for each commit on this branch.
|
|
||||||
|
|
||||||
We don't have a strict process, but click around and check for anything obvious, posting results as comments in the Cut Release PR.
|
|
||||||
|
|
||||||
The other `ci` output in Cut Release PRs is `updater-test`, because we don't have a way to test this fully automated, we have a semi-automated process. Download updater-test zip file, install the app, run it, expect an updater prompt to a dummy v0.99.99, install it and check that the app comes back at that version (on both macOS and Windows).
|
|
||||||
|
|
||||||
#### 3. Merge the Cut Release PR
|
|
||||||
|
|
||||||
This will kick the `create-release` action, that creates a _Draft_ release out of this Cut Release PR merge after less than a minute, with the new version as title and Cut Release PR as description.
|
|
||||||
|
|
||||||
|
|
||||||
#### 4. Publish the release
|
|
||||||
|
|
||||||
Head over to https://github.com/KittyCAD/modeling-app/releases, the draft release corresponding to the merged Cut Release PR should show up at the top as _Draft_. Click on it, verify the content, and hit _Publish_.
|
|
||||||
|
|
||||||
#### 5. Profit
|
|
||||||
|
|
||||||
A new Action kicks in at https://github.com/KittyCAD/modeling-app/actions, which can be found under `release` event filter.
|
|
||||||
|
|
||||||
|
3. Profit (A new Action kicks in at https://github.com/KittyCAD/modeling-app/actions if the PR was correctly named)
|
||||||
|
|
||||||
## Fuzzing the parser
|
## Fuzzing the parser
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
|> lineTo([0, 20], %)
|
|> lineTo([0, 20], %)
|
||||||
|> angledLineThatIntersects({
|
|> angledLineThatIntersects({
|
||||||
angle: 80,
|
angle: 80,
|
||||||
intersectTag: lineToIntersect,
|
intersectTag: 'lineToIntersect',
|
||||||
offset: 10
|
offset: 10
|
||||||
}, %)
|
}, %)
|
||||||
|> close(%)
|
|> close(%)
|
||||||
@ -41,92 +41,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
angle: number,
|
angle: number,
|
||||||
// The tag of the line to intersect with.
|
// The tag of the line to intersect with.
|
||||||
intersectTag: {
|
intersectTag: {
|
||||||
// Engine information for a tag.
|
|
||||||
info: {
|
|
||||||
// The id of the tagged object.
|
|
||||||
id: uuid,
|
|
||||||
// The path the tag is on.
|
|
||||||
path: {
|
|
||||||
// The from point.
|
|
||||||
from: [number, number],
|
|
||||||
// The tag of the path.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
// The to point.
|
|
||||||
to: [number, number],
|
|
||||||
},
|
|
||||||
// The sketch group the tag is on.
|
|
||||||
sketchGroup: uuid,
|
|
||||||
// The surface information for the tag.
|
|
||||||
surface: {
|
|
||||||
// The face id for the extrude plane.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "extrudePlane",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The face id for the extrude plane.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "extrudeArc",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
// The offset from the intersecting line.
|
// The offset from the intersecting line.
|
||||||
@ -136,7 +50,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -178,21 +92,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -210,7 +118,7 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -361,38 +269,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
@ -548,7 +424,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -590,21 +466,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -622,7 +492,7 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -773,38 +643,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
|
@ -41,7 +41,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -83,21 +83,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -115,7 +109,7 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -266,38 +260,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
@ -453,7 +415,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -495,21 +457,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -527,7 +483,7 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -678,38 +634,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
|
102
docs/kcl/arc.md
@ -19,8 +19,8 @@ const example = startSketchOn('XZ')
|
|||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([10, 0], %)
|
|> line([10, 0], %)
|
||||||
|> arc({
|
|> arc({
|
||||||
angleStart: 120,
|
angle_end: 0,
|
||||||
angleEnd: 0,
|
angle_start: 120,
|
||||||
radius: 5
|
radius: 5
|
||||||
}, %)
|
}, %)
|
||||||
|> line([5, 0], %)
|
|> line([5, 0], %)
|
||||||
@ -41,8 +41,8 @@ const example = startSketchOn('XZ')
|
|||||||
const exampleSketch = startSketchOn('XZ')
|
const exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([-10, 0], %)
|
|> startProfileAt([-10, 0], %)
|
||||||
|> arc({
|
|> arc({
|
||||||
angleStart: 120,
|
angle_end: -60,
|
||||||
angleEnd: -60,
|
angle_start: 120,
|
||||||
radius: 5
|
radius: 5
|
||||||
}, %)
|
}, %)
|
||||||
|> line([10, 0], %)
|
|> line([10, 0], %)
|
||||||
@ -67,7 +67,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -109,21 +109,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -141,7 +135,7 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -292,38 +286,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
@ -479,21 +441,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -511,7 +467,7 @@ const example = extrude(10, exampleSketch)
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -553,21 +509,15 @@ const example = extrude(10, exampleSketch)
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -619,38 +569,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
@ -825,38 +743,6 @@ const example = extrude(10, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
|
366
docs/kcl/getEdge.md
Normal file
142
docs/kcl/hole.md
@ -20,11 +20,6 @@ layout: manual
|
|||||||
* [`angledLineToY`](kcl/angledLineToY)
|
* [`angledLineToY`](kcl/angledLineToY)
|
||||||
* [`arc`](kcl/arc)
|
* [`arc`](kcl/arc)
|
||||||
* [`asin`](kcl/asin)
|
* [`asin`](kcl/asin)
|
||||||
* [`assert`](kcl/assert)
|
|
||||||
* [`assertGreaterThan`](kcl/assertGreaterThan)
|
|
||||||
* [`assertGreaterThanOrEq`](kcl/assertGreaterThanOrEq)
|
|
||||||
* [`assertLessThan`](kcl/assertLessThan)
|
|
||||||
* [`assertLessThanOrEq`](kcl/assertLessThanOrEq)
|
|
||||||
* [`atan`](kcl/atan)
|
* [`atan`](kcl/atan)
|
||||||
* [`bezierCurve`](kcl/bezierCurve)
|
* [`bezierCurve`](kcl/bezierCurve)
|
||||||
* [`ceil`](kcl/ceil)
|
* [`ceil`](kcl/ceil)
|
||||||
@ -36,13 +31,13 @@ layout: manual
|
|||||||
* [`extrude`](kcl/extrude)
|
* [`extrude`](kcl/extrude)
|
||||||
* [`fillet`](kcl/fillet)
|
* [`fillet`](kcl/fillet)
|
||||||
* [`floor`](kcl/floor)
|
* [`floor`](kcl/floor)
|
||||||
|
* [`getEdge`](kcl/getEdge)
|
||||||
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
|
* [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge)
|
||||||
* [`getOppositeEdge`](kcl/getOppositeEdge)
|
* [`getOppositeEdge`](kcl/getOppositeEdge)
|
||||||
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
|
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
|
||||||
* [`helix`](kcl/helix)
|
* [`helix`](kcl/helix)
|
||||||
* [`hole`](kcl/hole)
|
* [`hole`](kcl/hole)
|
||||||
* [`import`](kcl/import)
|
* [`import`](kcl/import)
|
||||||
* [`int`](kcl/int)
|
|
||||||
* [`lastSegX`](kcl/lastSegX)
|
* [`lastSegX`](kcl/lastSegX)
|
||||||
* [`lastSegY`](kcl/lastSegY)
|
* [`lastSegY`](kcl/lastSegY)
|
||||||
* [`legAngX`](kcl/legAngX)
|
* [`legAngX`](kcl/legAngX)
|
||||||
@ -62,7 +57,6 @@ layout: manual
|
|||||||
* [`patternLinear3d`](kcl/patternLinear3d)
|
* [`patternLinear3d`](kcl/patternLinear3d)
|
||||||
* [`patternTransform`](kcl/patternTransform)
|
* [`patternTransform`](kcl/patternTransform)
|
||||||
* [`pi`](kcl/pi)
|
* [`pi`](kcl/pi)
|
||||||
* [`polar`](kcl/polar)
|
|
||||||
* [`pow`](kcl/pow)
|
* [`pow`](kcl/pow)
|
||||||
* [`profileStart`](kcl/profileStart)
|
* [`profileStart`](kcl/profileStart)
|
||||||
* [`profileStartX`](kcl/profileStartX)
|
* [`profileStartX`](kcl/profileStartX)
|
||||||
|
@ -29,7 +29,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -71,21 +71,15 @@ const sketch001 = startSketchOn('XY')
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -103,7 +97,7 @@ const sketch001 = startSketchOn('XY')
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -254,38 +248,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
|
@ -28,7 +28,7 @@ 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 id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: {
|
on: {
|
||||||
@ -70,21 +70,15 @@ const sketch001 = startSketchOn('XY')
|
|||||||
// Chamfers or fillets on this extrude group.
|
// Chamfers or fillets on this extrude group.
|
||||||
filletOrChamfers: [{
|
filletOrChamfers: [{
|
||||||
// The engine id of the edge to fillet.
|
// The engine id of the edge to fillet.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this fillet.
|
// The id of the engine command that called this fillet.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
radius: number,
|
radius: number,
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
type: "fillet",
|
||||||
} |
|
} |
|
||||||
{
|
{
|
||||||
// The engine id of the edge to chamfer.
|
// The engine id of the edge to chamfer.
|
||||||
edgeId: uuid,
|
edge_id: uuid,
|
||||||
// The id of the engine command that called this chamfer.
|
// The id of the engine command that called this chamfer.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
length: number,
|
length: number,
|
||||||
@ -102,7 +96,7 @@ const sketch001 = startSketchOn('XY')
|
|||||||
id: uuid,
|
id: uuid,
|
||||||
// The sketch group.
|
// The sketch group.
|
||||||
sketchGroup: {
|
sketchGroup: {
|
||||||
// The id of the sketch group (this will change when the engine's reference to it changes.
|
// 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).
|
||||||
on: SketchSurface,
|
on: SketchSurface,
|
||||||
@ -253,38 +247,6 @@ const sketch001 = startSketchOn('XY')
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the chamfer surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "chamfer",
|
|
||||||
} |
|
|
||||||
{
|
|
||||||
// The id for the fillet surface.
|
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
|
||||||
// The source range.
|
|
||||||
sourceRange: [number, number],
|
|
||||||
// The tag.
|
|
||||||
tag: {
|
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
|
||||||
end: number,
|
|
||||||
start: number,
|
|
||||||
value: string,
|
|
||||||
},
|
|
||||||
type: "fillet",
|
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
// The id of the face.
|
// The id of the face.
|
||||||
|
@ -9,7 +9,7 @@ Returns the angle of the segment.
|
|||||||
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
segAng(tag: TagIdentifier) -> number
|
segAng(segment_name: TagIdentifier, sketch_group: SketchGroup) -> number
|
||||||
```
|
```
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
@ -20,9 +20,9 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
|> line([10, 0], %)
|
|> line([10, 0], %)
|
||||||
|> line([5, 10], %, $seg01)
|
|> line([5, 10], %, $seg01)
|
||||||
|> line([-10, 0], %)
|
|> line([-10, 0], %)
|
||||||
|> angledLine([segAng(seg01), 10], %)
|
|> angledLine([segAng(seg01, %), 10], %)
|
||||||
|> line([-10, 0], %)
|
|> line([-10, 0], %)
|
||||||
|> angledLine([segAng(seg01), -15], %)
|
|> angledLine([segAng(seg01, %), -15], %)
|
||||||
|> close(%)
|
|> close(%)
|
||||||
|
|
||||||
const example = extrude(4, exampleSketch)
|
const example = extrude(4, exampleSketch)
|
||||||
@ -32,15 +32,89 @@ const example = extrude(4, exampleSketch)
|
|||||||
|
|
||||||
### Arguments
|
### Arguments
|
||||||
|
|
||||||
* `tag`: `TagIdentifier` (REQUIRED)
|
* `segment_name`: `TagIdentifier` (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// Engine information for a tag.
|
value: string,
|
||||||
info: {
|
}
|
||||||
// The id of the tagged object.
|
```
|
||||||
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The path the tag is on.
|
// What the sketch is on (can be a plane or a face).
|
||||||
path: {
|
on: {
|
||||||
|
// The id of the plane.
|
||||||
|
id: uuid,
|
||||||
|
// Origin of the plane.
|
||||||
|
origin: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
type: "plane",
|
||||||
|
// Type for a plane.
|
||||||
|
value: "XY" | "XZ" | "YZ" | "Custom",
|
||||||
|
// What should the plane’s X axis be?
|
||||||
|
xAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// What should the plane’s Y axis be?
|
||||||
|
yAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// The z-axis (normal).
|
||||||
|
zAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The extrude group the face is on.
|
||||||
|
extrudeGroup: {
|
||||||
|
// The id of the extrusion end cap
|
||||||
|
endCapId: uuid,
|
||||||
|
// Chamfers or fillets on this extrude group.
|
||||||
|
filletOrChamfers: [{
|
||||||
|
// The engine id of the edge to fillet.
|
||||||
|
edge_id: uuid,
|
||||||
|
// The id of the engine command that called this fillet.
|
||||||
|
id: uuid,
|
||||||
|
radius: number,
|
||||||
|
type: "fillet",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The engine id of the edge to chamfer.
|
||||||
|
edge_id: uuid,
|
||||||
|
// The id of the engine command that called this chamfer.
|
||||||
|
id: uuid,
|
||||||
|
length: number,
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
type: "chamfer",
|
||||||
|
}],
|
||||||
|
// The height of the extrude group.
|
||||||
|
height: number,
|
||||||
|
// The id of the extrude group.
|
||||||
|
id: uuid,
|
||||||
|
// The sketch group.
|
||||||
|
sketchGroup: {
|
||||||
|
// The id of the sketch group.
|
||||||
|
id: uuid,
|
||||||
|
// What the sketch is on (can be a plane or a face).
|
||||||
|
on: SketchSurface,
|
||||||
|
// The starting path.
|
||||||
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
from: [number, number],
|
from: [number, number],
|
||||||
// The tag of the path.
|
// The tag of the path.
|
||||||
@ -53,10 +127,109 @@ const example = extrude(4, exampleSketch)
|
|||||||
// The to point.
|
// The to point.
|
||||||
to: [number, number],
|
to: [number, number],
|
||||||
},
|
},
|
||||||
// The sketch group the tag is on.
|
// Tag identifiers that have been declared in this sketch group.
|
||||||
sketchGroup: uuid,
|
tags: {
|
||||||
// The surface information for the tag.
|
},
|
||||||
surface: {
|
// The paths in the sketch group.
|
||||||
|
value: [{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "ToPoint",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// arc's direction
|
||||||
|
ccw: string,
|
||||||
|
// the arc's center
|
||||||
|
center: [number, number],
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArcTo",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArc",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Horizontal",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "AngledLineTo",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
// The y coordinate.
|
||||||
|
y: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Base",
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
// The id of the extrusion start cap
|
||||||
|
startCapId: uuid,
|
||||||
|
// The extrude surfaces.
|
||||||
|
value: [{
|
||||||
// The face id for the extrude plane.
|
// The face id for the extrude plane.
|
||||||
faceId: uuid,
|
faceId: uuid,
|
||||||
// The id of the geometry.
|
// The id of the geometry.
|
||||||
@ -87,41 +260,144 @@ const example = extrude(4, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
}],
|
||||||
{
|
},
|
||||||
// The id for the chamfer surface.
|
// The id of the face.
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The source range.
|
type: "face",
|
||||||
sourceRange: [number, number],
|
// The tag of the face.
|
||||||
// The tag.
|
value: string,
|
||||||
|
// What should the face’s X axis be?
|
||||||
|
xAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// What should the face’s Y axis be?
|
||||||
|
yAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// The z-axis (normal).
|
||||||
|
zAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// The starting path.
|
||||||
|
start: {
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
tag: {
|
tag: {
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
end: number,
|
end: number,
|
||||||
start: number,
|
start: number,
|
||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "chamfer",
|
// The to point.
|
||||||
} |
|
to: [number, number],
|
||||||
{
|
},
|
||||||
// The id for the fillet surface.
|
// Tag identifiers that have been declared in this sketch group.
|
||||||
faceId: uuid,
|
tags: {
|
||||||
// The id of the geometry.
|
},
|
||||||
id: uuid,
|
// The paths in the sketch group.
|
||||||
// The source range.
|
value: [{
|
||||||
sourceRange: [number, number],
|
// The from point.
|
||||||
// The tag.
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
tag: {
|
tag: {
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
end: number,
|
end: number,
|
||||||
start: number,
|
start: number,
|
||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "fillet",
|
// The to point.
|
||||||
},
|
to: [number, number],
|
||||||
},
|
type: "ToPoint",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// arc's direction
|
||||||
|
ccw: string,
|
||||||
|
// the arc's center
|
||||||
|
center: [number, number],
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
value: string,
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArcTo",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArc",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Horizontal",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "AngledLineTo",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
// The y coordinate.
|
||||||
|
y: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Base",
|
||||||
|
}],
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Returns the segment end of y.
|
|||||||
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
segEndY(tag: TagIdentifier) -> number
|
segEndY(segment_name: TagIdentifier, sketch_group: SketchGroup) -> number
|
||||||
```
|
```
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
@ -20,7 +20,7 @@ const exampleSketch = startSketchOn('XZ')
|
|||||||
|> line([20, 0], %)
|
|> line([20, 0], %)
|
||||||
|> line([0, 3], %, $thing)
|
|> line([0, 3], %, $thing)
|
||||||
|> line([-10, 0], %)
|
|> line([-10, 0], %)
|
||||||
|> line([0, segEndY(thing)], %)
|
|> line([0, segEndY(thing, %)], %)
|
||||||
|> line([-10, 0], %)
|
|> line([-10, 0], %)
|
||||||
|> close(%)
|
|> close(%)
|
||||||
|
|
||||||
@ -31,15 +31,89 @@ const example = extrude(5, exampleSketch)
|
|||||||
|
|
||||||
### Arguments
|
### Arguments
|
||||||
|
|
||||||
* `tag`: `TagIdentifier` (REQUIRED)
|
* `segment_name`: `TagIdentifier` (REQUIRED)
|
||||||
```js
|
```js
|
||||||
{
|
{
|
||||||
// Engine information for a tag.
|
value: string,
|
||||||
info: {
|
}
|
||||||
// The id of the tagged object.
|
```
|
||||||
|
* `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
|
||||||
|
```js
|
||||||
|
{
|
||||||
|
// The id of the sketch group.
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The path the tag is on.
|
// What the sketch is on (can be a plane or a face).
|
||||||
path: {
|
on: {
|
||||||
|
// The id of the plane.
|
||||||
|
id: uuid,
|
||||||
|
// Origin of the plane.
|
||||||
|
origin: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
type: "plane",
|
||||||
|
// Type for a plane.
|
||||||
|
value: "XY" | "XZ" | "YZ" | "Custom",
|
||||||
|
// What should the plane’s X axis be?
|
||||||
|
xAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// What should the plane’s Y axis be?
|
||||||
|
yAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// The z-axis (normal).
|
||||||
|
zAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The extrude group the face is on.
|
||||||
|
extrudeGroup: {
|
||||||
|
// The id of the extrusion end cap
|
||||||
|
endCapId: uuid,
|
||||||
|
// Chamfers or fillets on this extrude group.
|
||||||
|
filletOrChamfers: [{
|
||||||
|
// The engine id of the edge to fillet.
|
||||||
|
edge_id: uuid,
|
||||||
|
// The id of the engine command that called this fillet.
|
||||||
|
id: uuid,
|
||||||
|
radius: number,
|
||||||
|
type: "fillet",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The engine id of the edge to chamfer.
|
||||||
|
edge_id: uuid,
|
||||||
|
// The id of the engine command that called this chamfer.
|
||||||
|
id: uuid,
|
||||||
|
length: number,
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
type: "chamfer",
|
||||||
|
}],
|
||||||
|
// The height of the extrude group.
|
||||||
|
height: number,
|
||||||
|
// The id of the extrude group.
|
||||||
|
id: uuid,
|
||||||
|
// The sketch group.
|
||||||
|
sketchGroup: {
|
||||||
|
// The id of the sketch group.
|
||||||
|
id: uuid,
|
||||||
|
// What the sketch is on (can be a plane or a face).
|
||||||
|
on: SketchSurface,
|
||||||
|
// The starting path.
|
||||||
|
start: {
|
||||||
// The from point.
|
// The from point.
|
||||||
from: [number, number],
|
from: [number, number],
|
||||||
// The tag of the path.
|
// The tag of the path.
|
||||||
@ -52,10 +126,109 @@ const example = extrude(5, exampleSketch)
|
|||||||
// The to point.
|
// The to point.
|
||||||
to: [number, number],
|
to: [number, number],
|
||||||
},
|
},
|
||||||
// The sketch group the tag is on.
|
// Tag identifiers that have been declared in this sketch group.
|
||||||
sketchGroup: uuid,
|
tags: {
|
||||||
// The surface information for the tag.
|
},
|
||||||
surface: {
|
// The paths in the sketch group.
|
||||||
|
value: [{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "ToPoint",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// arc's direction
|
||||||
|
ccw: string,
|
||||||
|
// the arc's center
|
||||||
|
center: [number, number],
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArcTo",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArc",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Horizontal",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "AngledLineTo",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
// The y coordinate.
|
||||||
|
y: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Base",
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
// The id of the extrusion start cap
|
||||||
|
startCapId: uuid,
|
||||||
|
// The extrude surfaces.
|
||||||
|
value: [{
|
||||||
// The face id for the extrude plane.
|
// The face id for the extrude plane.
|
||||||
faceId: uuid,
|
faceId: uuid,
|
||||||
// The id of the geometry.
|
// The id of the geometry.
|
||||||
@ -86,41 +259,144 @@ const example = extrude(5, exampleSketch)
|
|||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "extrudeArc",
|
type: "extrudeArc",
|
||||||
} |
|
}],
|
||||||
{
|
},
|
||||||
// The id for the chamfer surface.
|
// The id of the face.
|
||||||
faceId: uuid,
|
|
||||||
// The id of the geometry.
|
|
||||||
id: uuid,
|
id: uuid,
|
||||||
// The source range.
|
type: "face",
|
||||||
sourceRange: [number, number],
|
// The tag of the face.
|
||||||
// The tag.
|
value: string,
|
||||||
|
// What should the face’s X axis be?
|
||||||
|
xAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// What should the face’s Y axis be?
|
||||||
|
yAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
// The z-axis (normal).
|
||||||
|
zAxis: {
|
||||||
|
x: number,
|
||||||
|
y: number,
|
||||||
|
z: number,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
// The starting path.
|
||||||
|
start: {
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
tag: {
|
tag: {
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
end: number,
|
end: number,
|
||||||
start: number,
|
start: number,
|
||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "chamfer",
|
// The to point.
|
||||||
} |
|
to: [number, number],
|
||||||
{
|
},
|
||||||
// The id for the fillet surface.
|
// Tag identifiers that have been declared in this sketch group.
|
||||||
faceId: uuid,
|
tags: {
|
||||||
// The id of the geometry.
|
},
|
||||||
id: uuid,
|
// The paths in the sketch group.
|
||||||
// The source range.
|
value: [{
|
||||||
sourceRange: [number, number],
|
// The from point.
|
||||||
// The tag.
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
tag: {
|
tag: {
|
||||||
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
end: number,
|
end: number,
|
||||||
start: number,
|
start: number,
|
||||||
value: string,
|
value: string,
|
||||||
},
|
},
|
||||||
type: "fillet",
|
// The to point.
|
||||||
},
|
to: [number, number],
|
||||||
},
|
type: "ToPoint",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// arc's direction
|
||||||
|
ccw: string,
|
||||||
|
// the arc's center
|
||||||
|
center: [number, number],
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
value: string,
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArcTo",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "TangentialArc",
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Horizontal",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "AngledLineTo",
|
||||||
|
// The x coordinate.
|
||||||
|
x: number,
|
||||||
|
// The y coordinate.
|
||||||
|
y: number,
|
||||||
|
} |
|
||||||
|
{
|
||||||
|
// The from point.
|
||||||
|
from: [number, number],
|
||||||
|
// The tag of the path.
|
||||||
|
tag: {
|
||||||
|
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
|
||||||
|
end: number,
|
||||||
|
start: number,
|
||||||
|
value: string,
|
||||||
|
},
|
||||||
|
// The to point.
|
||||||
|
to: [number, number],
|
||||||
|
type: "Base",
|
||||||
|
}],
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
96633
docs/kcl/std.json
@ -64,27 +64,27 @@ const part001 = startSketchOn('-XZ')
|
|||||||
|> angledLineToY({
|
|> angledLineToY({
|
||||||
angle: topAng,
|
angle: topAng,
|
||||||
to: totalHeightHalf,
|
to: totalHeightHalf,
|
||||||
}, %, $seg04)
|
}, %, 'seg04')
|
||||||
|> xLineTo(totalLen, %, $seg03')
|
|> xLineTo(totalLen, %, 'seg03')
|
||||||
|> yLine(-armThick, %, $seg01)
|
|> yLine(-armThick, %, 'seg01')
|
||||||
|> angledLineThatIntersects({
|
|> angledLineThatIntersects({
|
||||||
angle: HALF_TURN,
|
angle: HALF_TURN,
|
||||||
offset: -armThick,
|
offset: -armThick,
|
||||||
intersectTag: seg04
|
intersectTag: 'seg04'
|
||||||
}, %)
|
}, %)
|
||||||
|> angledLineToY([segAng(seg04, %) + 180, ZERO], %)
|
|> angledLineToY([segAng('seg04', %) + 180, ZERO], %)
|
||||||
|> angledLineToY({
|
|> angledLineToY({
|
||||||
angle: -bottomAng,
|
angle: -bottomAng,
|
||||||
to: -totalHeightHalf - armThick,
|
to: -totalHeightHalf - armThick,
|
||||||
}, %, $seg02)
|
}, %, 'seg02')
|
||||||
|> xLineTo(segEndX(seg03, %) + 0, %)
|
|> xLineTo(segEndX('seg03', %) + 0, %)
|
||||||
|> yLine(-segLen(seg01, %), %)
|
|> yLine(-segLen('seg01', %), %)
|
||||||
|> angledLineThatIntersects({
|
|> angledLineThatIntersects({
|
||||||
angle: HALF_TURN,
|
angle: HALF_TURN,
|
||||||
offset: -armThick,
|
offset: -armThick,
|
||||||
intersectTag: seg02
|
intersectTag: 'seg02'
|
||||||
}, %)
|
}, %)
|
||||||
|> angledLineToY([segAng(seg02, %) + 180, -baseHeight], %)
|
|> angledLineToY([segAng('seg02', %) + 180, -baseHeight], %)
|
||||||
|> xLineTo(ZERO, %)
|
|> xLineTo(ZERO, %)
|
||||||
|> close(%)
|
|> close(%)
|
||||||
|> extrude(4, %)`
|
|> extrude(4, %)`
|
||||||
@ -431,9 +431,7 @@ test('Draft segments should look right', async ({ page, context }) => {
|
|||||||
|> line([7.25, 0], %)`
|
|> line([7.25, 0], %)`
|
||||||
await expect(page.locator('.cm-content')).toHaveText(code)
|
await expect(page.locator('.cm-content')).toHaveText(code)
|
||||||
|
|
||||||
await page
|
await page.getByRole('button', { name: 'Tangential Arc' }).click()
|
||||||
.getByRole('button', { name: 'Tangential Arc', exact: true })
|
|
||||||
.click()
|
|
||||||
|
|
||||||
await page.mouse.move(startXPx + PUR * 30, 500 - PUR * 20, { steps: 10 })
|
await page.mouse.move(startXPx + PUR * 30, 500 - PUR * 20, { steps: 10 })
|
||||||
|
|
||||||
@ -477,10 +475,8 @@ test('Draft rectangles should look right', async ({ page, context }) => {
|
|||||||
const startXPx = 600
|
const startXPx = 600
|
||||||
|
|
||||||
// Equip the rectangle tool
|
// Equip the rectangle tool
|
||||||
await page.getByRole('button', { name: 'Line', exact: true }).click()
|
await page.getByRole('button', { name: 'Line' }).click()
|
||||||
await page
|
await page.getByRole('button', { name: 'Rectangle' }).click()
|
||||||
.getByRole('button', { name: 'Corner rectangle', exact: true })
|
|
||||||
.click()
|
|
||||||
|
|
||||||
// Draw the rectangle
|
// Draw the rectangle
|
||||||
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 30)
|
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 30)
|
||||||
@ -539,9 +535,7 @@ test.describe('Client side scene scale should match engine scale', () => {
|
|||||||
|> line([7.25, 0], %)`
|
|> line([7.25, 0], %)`
|
||||||
await expect(u.codeLocator).toHaveText(code)
|
await expect(u.codeLocator).toHaveText(code)
|
||||||
|
|
||||||
await page
|
await page.getByRole('button', { name: 'Tangential Arc' }).click()
|
||||||
.getByRole('button', { name: 'Tangential Arc', exact: true })
|
|
||||||
.click()
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
await page.mouse.click(startXPx + PUR * 30, 500 - PUR * 20)
|
await page.mouse.click(startXPx + PUR * 30, 500 - PUR * 20)
|
||||||
@ -551,9 +545,7 @@ test.describe('Client side scene scale should match engine scale', () => {
|
|||||||
await expect(u.codeLocator).toHaveText(code)
|
await expect(u.codeLocator).toHaveText(code)
|
||||||
|
|
||||||
// click tangential arc tool again to unequip it
|
// click tangential arc tool again to unequip it
|
||||||
await page
|
await page.getByRole('button', { name: 'Tangential Arc' }).click()
|
||||||
.getByRole('button', { name: 'Tangential Arc', exact: true })
|
|
||||||
.click()
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
// screen shot should show the sketch
|
// screen shot should show the sketch
|
||||||
@ -642,9 +634,7 @@ test.describe('Client side scene scale should match engine scale', () => {
|
|||||||
|> line([184.3, 0], %)`
|
|> line([184.3, 0], %)`
|
||||||
await expect(u.codeLocator).toHaveText(code)
|
await expect(u.codeLocator).toHaveText(code)
|
||||||
|
|
||||||
await page
|
await page.getByRole('button', { name: 'Tangential Arc' }).click()
|
||||||
.getByRole('button', { name: 'Tangential Arc', exact: true })
|
|
||||||
.click()
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
await page.mouse.click(startXPx + PUR * 30, 500 - PUR * 20)
|
await page.mouse.click(startXPx + PUR * 30, 500 - PUR * 20)
|
||||||
@ -653,9 +643,7 @@ test.describe('Client side scene scale should match engine scale', () => {
|
|||||||
|> tangentialArcTo([551.2, -62.01], %)`
|
|> tangentialArcTo([551.2, -62.01], %)`
|
||||||
await expect(u.codeLocator).toHaveText(code)
|
await expect(u.codeLocator).toHaveText(code)
|
||||||
|
|
||||||
await page
|
await page.getByRole('button', { name: 'Tangential Arc' }).click()
|
||||||
.getByRole('button', { name: 'Tangential Arc', exact: true })
|
|
||||||
.click()
|
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
|
|
||||||
// screen shot should show the sketch
|
// screen shot should show the sketch
|
||||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 29 KiB |
@ -71,7 +71,7 @@ export const TEST_CODE_GIZMO = `const part001 = startSketchOn('XZ')
|
|||||||
|> angledLine({ angle: 3 + 0, length: 3.14 + 0 }, %)
|
|> angledLine({ angle: 3 + 0, length: 3.14 + 0 }, %)
|
||||||
|> lineTo([20.14 + 0, -0.14 + 0], %)
|
|> lineTo([20.14 + 0, -0.14 + 0], %)
|
||||||
|> xLineTo(29 + 0, %)
|
|> xLineTo(29 + 0, %)
|
||||||
|> yLine(-3.14 + 0, %, $a)
|
|> yLine(-3.14 + 0, %, 'a')
|
||||||
|> xLine(1.63, %)
|
|> xLine(1.63, %)
|
||||||
|> angledLineOfXLength({ angle: 3 + 0, length: 3.14 }, %)
|
|> angledLineOfXLength({ angle: 3 + 0, length: 3.14 }, %)
|
||||||
|> angledLineOfYLength({ angle: 30, length: 3 + 0 }, %)
|
|> angledLineOfYLength({ angle: 30, length: 3 + 0 }, %)
|
||||||
@ -79,7 +79,7 @@ export const TEST_CODE_GIZMO = `const part001 = startSketchOn('XZ')
|
|||||||
|> angledLineToY({ angle: 30, to: 11.14 }, %)
|
|> angledLineToY({ angle: 30, to: 11.14 }, %)
|
||||||
|> angledLineThatIntersects({
|
|> angledLineThatIntersects({
|
||||||
angle: 3.14,
|
angle: 3.14,
|
||||||
intersectTag: a,
|
intersectTag: 'a',
|
||||||
offset: 0
|
offset: 0
|
||||||
}, %)
|
}, %)
|
||||||
|> tangentialArcTo([13.14 + 0, 13.14], %)
|
|> tangentialArcTo([13.14 + 0, 13.14], %)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { expect, Page, Download } from '@playwright/test'
|
import { test, expect, Page, Download } from '@playwright/test'
|
||||||
import { EngineCommand } from 'lang/std/artifactMap'
|
import { EngineCommand } from '../../src/lang/std/engineConnection'
|
||||||
import os from 'os'
|
import os from 'os'
|
||||||
import fsp from 'fs/promises'
|
import fsp from 'fs/promises'
|
||||||
import pixelMatch from 'pixelmatch'
|
import pixelMatch from 'pixelmatch'
|
||||||
@ -16,14 +16,14 @@ export const TEST_COLORS = {
|
|||||||
} as const
|
} as const
|
||||||
|
|
||||||
async function waitForPageLoad(page: Page) {
|
async function waitForPageLoad(page: Page) {
|
||||||
|
// wait for 'Loading stream...' spinner
|
||||||
|
await page.getByTestId('loading-stream').waitFor()
|
||||||
// wait for all spinners to be gone
|
// wait for all spinners to be gone
|
||||||
await expect(page.getByTestId('loading')).not.toBeAttached({
|
await page
|
||||||
timeout: 20_000,
|
.getByTestId('loading')
|
||||||
})
|
.waitFor({ state: 'detached', timeout: 20_000 })
|
||||||
|
|
||||||
await expect(page.getByRole('button', { name: 'Start Sketch' })).toBeEnabled({
|
await page.getByTestId('start-sketch').waitFor()
|
||||||
timeout: 20_000,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function removeCurrentCode(page: Page) {
|
async function removeCurrentCode(page: Page) {
|
||||||
@ -58,45 +58,44 @@ async function waitForDefaultPlanesToBeVisible(page: Page) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function openKclCodePanel(page: Page) {
|
async function openKclCodePanel(page: Page) {
|
||||||
const paneLocator = page.getByTestId('code-pane-button')
|
const paneLocator = page.getByRole('tab', { name: 'KCL Code', exact: false })
|
||||||
const ariaSelected = await paneLocator?.getAttribute('aria-pressed')
|
const isOpen = (await paneLocator?.getAttribute('aria-selected')) === 'true'
|
||||||
const isOpen = ariaSelected === 'true'
|
|
||||||
|
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
await paneLocator.click()
|
await paneLocator.click()
|
||||||
await expect(paneLocator).toHaveAttribute('aria-pressed', 'true')
|
await paneLocator.and(page.locator('[aria-selected="true"]')).waitFor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function closeKclCodePanel(page: Page) {
|
async function closeKclCodePanel(page: Page) {
|
||||||
const paneLocator = page.getByTestId('code-pane-button')
|
const paneLocator = page.getByRole('tab', { name: 'KCL Code', exact: false })
|
||||||
const ariaSelected = await paneLocator?.getAttribute('aria-pressed')
|
const isOpen = (await paneLocator?.getAttribute('aria-selected')) === 'true'
|
||||||
const isOpen = ariaSelected === 'true'
|
|
||||||
|
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
await paneLocator.click()
|
await paneLocator.click()
|
||||||
await expect(paneLocator).not.toHaveAttribute('aria-pressed', 'true')
|
await paneLocator
|
||||||
|
.and(page.locator(':not([aria-selected="true"])'))
|
||||||
|
.waitFor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function openDebugPanel(page: Page) {
|
async function openDebugPanel(page: Page) {
|
||||||
const debugLocator = page.getByTestId('debug-pane-button')
|
const debugLocator = page.getByRole('tab', { name: 'Debug', exact: false })
|
||||||
await expect(debugLocator).toBeVisible()
|
const isOpen = (await debugLocator?.getAttribute('aria-selected')) === 'true'
|
||||||
const isOpen = (await debugLocator?.getAttribute('aria-pressed')) === 'true'
|
|
||||||
|
|
||||||
if (!isOpen) {
|
if (!isOpen) {
|
||||||
await debugLocator.click()
|
await debugLocator.click()
|
||||||
await expect(debugLocator).toHaveAttribute('aria-pressed', 'true')
|
await debugLocator.and(page.locator('[aria-selected="true"]')).waitFor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function closeDebugPanel(page: Page) {
|
async function closeDebugPanel(page: Page) {
|
||||||
const debugLocator = page.getByTestId('debug-pane-button')
|
const debugLocator = page.getByRole('tab', { name: 'Debug', exact: false })
|
||||||
await expect(debugLocator).toBeVisible()
|
const isOpen = (await debugLocator?.getAttribute('aria-selected')) === 'true'
|
||||||
const isOpen = (await debugLocator?.getAttribute('aria-pressed')) === 'true'
|
|
||||||
if (isOpen) {
|
if (isOpen) {
|
||||||
await debugLocator.click()
|
await debugLocator.click()
|
||||||
await expect(debugLocator).not.toHaveAttribute('aria-pressed', 'true')
|
await debugLocator
|
||||||
|
.and(page.locator(':not([aria-selected="true"])'))
|
||||||
|
.waitFor()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,7 +265,7 @@ export async function getUtils(page: Page) {
|
|||||||
getSegmentBodyCoords: async (locator: string, px = 30) => {
|
getSegmentBodyCoords: async (locator: string, px = 30) => {
|
||||||
const overlay = page.locator(locator)
|
const overlay = page.locator(locator)
|
||||||
const bbox = await overlay
|
const bbox = await overlay
|
||||||
.boundingBox({ timeout: 5000 })
|
.boundingBox()
|
||||||
.then((box) => ({ ...box, x: box?.x || 0, y: box?.y || 0 }))
|
.then((box) => ({ ...box, x: box?.x || 0, y: box?.y || 0 }))
|
||||||
const angle = Number(await overlay.getAttribute('data-overlay-angle'))
|
const angle = Number(await overlay.getAttribute('data-overlay-angle'))
|
||||||
const angleXOffset = Math.cos(((angle - 180) * Math.PI) / 180) * px
|
const angleXOffset = Math.cos(((angle - 180) * Math.PI) / 180) * px
|
||||||
@ -472,11 +471,8 @@ export const doExport = async (
|
|||||||
page: Page
|
page: Page
|
||||||
): Promise<Paths> => {
|
): Promise<Paths> => {
|
||||||
await page.getByRole('button', { name: APP_NAME }).click()
|
await page.getByRole('button', { name: APP_NAME }).click()
|
||||||
const exportMenuButton = page.getByRole('button', {
|
await expect(page.getByRole('button', { name: 'Export Part' })).toBeVisible()
|
||||||
name: 'Export current part',
|
await page.getByRole('button', { name: 'Export Part' }).click()
|
||||||
})
|
|
||||||
await expect(exportMenuButton).toBeVisible()
|
|
||||||
await exportMenuButton.click()
|
|
||||||
await expect(page.getByTestId('command-bar')).toBeVisible()
|
await expect(page.getByTestId('command-bar')).toBeVisible()
|
||||||
|
|
||||||
// Go through export via command bar
|
// Go through export via command bar
|
||||||
|
@ -77,7 +77,7 @@ describe('ZMA authorized user flows', () => {
|
|||||||
const menuButton = await $('[data-testid="user-sidebar-toggle"]')
|
const menuButton = await $('[data-testid="user-sidebar-toggle"]')
|
||||||
await click(menuButton)
|
await click(menuButton)
|
||||||
|
|
||||||
const settingsButton = await $('[data-testid="user-settings"]')
|
const settingsButton = await $('[data-testid="settings-button"]')
|
||||||
await click(settingsButton)
|
await click(settingsButton)
|
||||||
|
|
||||||
const projectDirInput = await $('[data-testid="project-directory-input"]')
|
const projectDirInput = await $('[data-testid="project-directory-input"]')
|
||||||
|