Compare commits
23 Commits
achalmers/
...
nrc-uom-qu
Author | SHA1 | Date | |
---|---|---|---|
1b7126b9f3 | |||
a63e51e2ad | |||
1b8eee86a1 | |||
6d50278d34 | |||
35844842de | |||
843e772094 | |||
9d0518dfeb | |||
d33d399c31 | |||
970cf7f017 | |||
d125efcd60 | |||
4664427832 | |||
d84b9cc875 | |||
0c6b6bf5d5 | |||
d275995dfe | |||
b03ca30379 | |||
e5f23a49b4 | |||
e78100eaac | |||
ae9d8be4e4 | |||
e4f73a6d5c | |||
a31fd608cf | |||
a98d5aa2fb | |||
4c6ef841bb | |||
997f539a8c |
2
.github/workflows/build-apps.yml
vendored
2
.github/workflows/build-apps.yml
vendored
@ -378,7 +378,7 @@ jobs:
|
|||||||
NOTES: ${{ needs.prepare-files.outputs.notes }}
|
NOTES: ${{ needs.prepare-files.outputs.notes }}
|
||||||
PUB_DATE: ${{ github.event.repository.updated_at }}
|
PUB_DATE: ${{ github.event.repository.updated_at }}
|
||||||
WEBSITE_DIR: ${{ env.IS_NIGHTLY == 'true' && 'dl.zoo.dev/releases/modeling-app/nightly' || 'dl.zoo.dev/releases/modeling-app' }}
|
WEBSITE_DIR: ${{ env.IS_NIGHTLY == 'true' && 'dl.zoo.dev/releases/modeling-app/nightly' || 'dl.zoo.dev/releases/modeling-app' }}
|
||||||
URL_CODED_NAME: ${{ env.IS_NIGHTLY == 'true' && 'Zoo%20Modeling%20App%20%28Nightly%29' || 'Zoo%20Modeling%20App' }}
|
URL_CODED_NAME: ${{ env.IS_NIGHTLY == 'true' && 'Zoo%20Design%20Studio%20%28Nightly%29' || 'Zoo%20Design%20Studio' }}
|
||||||
run: |
|
run: |
|
||||||
RELEASE_DIR=https://${WEBSITE_DIR}
|
RELEASE_DIR=https://${WEBSITE_DIR}
|
||||||
jq --null-input \
|
jq --null-input \
|
||||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -26,6 +26,7 @@ yarn-error.log*
|
|||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
.helix
|
.helix
|
||||||
|
result
|
||||||
|
|
||||||
# rust
|
# rust
|
||||||
rust/target
|
rust/target
|
||||||
|
29
Makefile
29
Makefile
@ -5,11 +5,18 @@ all: install build check
|
|||||||
# INSTALL
|
# INSTALL
|
||||||
|
|
||||||
ifeq ($(OS),Windows_NT)
|
ifeq ($(OS),Windows_NT)
|
||||||
CARGO ?= ~/.cargo/bin/cargo.exe
|
export WINDOWS := true
|
||||||
WASM_PACK ?= ~/.cargo/bin/wasm-pack.exe
|
ifndef MSYSTEM
|
||||||
|
export POWERSHELL := true
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef WINDOWS
|
||||||
|
CARGO ?= $(USERPROFILE)/.cargo/bin/cargo.exe
|
||||||
|
WASM_PACK ?= $(USERPROFILE)/.cargo/bin/wasm-pack.exe
|
||||||
else
|
else
|
||||||
CARGO ?= ~/.cargo/bin/cargo
|
CARGO ?= ~/.cargo/bin/cargo
|
||||||
WASM_PACK ?= ~/.cargo/bin/wasm-pack
|
WASM_PACK ?= ~/.cargo/bin/wasm-pack
|
||||||
endif
|
endif
|
||||||
|
|
||||||
.PHONY: install
|
.PHONY: install
|
||||||
@ -17,21 +24,21 @@ install: node_modules/.yarn-integrity $(CARGO) $(WASM_PACK) ## Install dependenc
|
|||||||
|
|
||||||
node_modules/.yarn-integrity: package.json yarn.lock
|
node_modules/.yarn-integrity: package.json yarn.lock
|
||||||
yarn install
|
yarn install
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef POWERSHELL
|
||||||
@ type nul > $@
|
@ type nul > $@
|
||||||
else
|
else
|
||||||
@ touch $@
|
@ touch $@
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(CARGO):
|
$(CARGO):
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef WINDOWS
|
||||||
yarn install:rust:windows
|
yarn install:rust:windows
|
||||||
else
|
else
|
||||||
yarn install:rust
|
yarn install:rust
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(WASM_PACK):
|
$(WASM_PACK):
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef WINDOWS
|
||||||
yarn install:wasm-pack:cargo
|
yarn install:wasm-pack:cargo
|
||||||
else
|
else
|
||||||
yarn install:wasm-pack:sh
|
yarn install:wasm-pack:sh
|
||||||
@ -57,7 +64,7 @@ build-web: install public/kcl_wasm_lib_bg.wasm build/index.html
|
|||||||
build-desktop: install public/kcl_wasm_lib_bg.wasm .vite/build/main.js
|
build-desktop: install public/kcl_wasm_lib_bg.wasm .vite/build/main.js
|
||||||
|
|
||||||
public/kcl_wasm_lib_bg.wasm: $(CARGO_SOURCES) $(RUST_SOURCES)
|
public/kcl_wasm_lib_bg.wasm: $(CARGO_SOURCES) $(RUST_SOURCES)
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef WINDOWS
|
||||||
yarn build:wasm:dev:windows
|
yarn build:wasm:dev:windows
|
||||||
else
|
else
|
||||||
yarn build:wasm:dev
|
yarn build:wasm:dev
|
||||||
@ -140,8 +147,8 @@ endif
|
|||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean: ## Delete all artifacts
|
clean: ## Delete all artifacts
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef POWERSHELL
|
||||||
git clean --force -d -X
|
git clean --force -d -x --exclude=.env* --exclude=**/*.env
|
||||||
else
|
else
|
||||||
rm -rf .vite/ build/
|
rm -rf .vite/ build/
|
||||||
rm -rf trace.zip playwright-report/ test-results/
|
rm -rf trace.zip playwright-report/ test-results/
|
||||||
@ -152,7 +159,7 @@ endif
|
|||||||
|
|
||||||
.PHONY: help
|
.PHONY: help
|
||||||
help: install
|
help: install
|
||||||
ifeq ($(OS),Windows_NT)
|
ifdef POWERSHELL
|
||||||
@ powershell -Command "Get-Content $(MAKEFILE_LIST) | Select-String -Pattern '^[^\s]+:.*##\s.*$$' | ForEach-Object { $$line = $$_.Line -split ':.*?##\s+'; Write-Host -NoNewline $$line[0].PadRight(30) -ForegroundColor Cyan; Write-Host $$line[1] }"
|
@ powershell -Command "Get-Content $(MAKEFILE_LIST) | Select-String -Pattern '^[^\s]+:.*##\s.*$$' | ForEach-Object { $$line = $$_.Line -split ':.*?##\s+'; Write-Host -NoNewline $$line[0].PadRight(30) -ForegroundColor Cyan; Write-Host $$line[1] }"
|
||||||
else
|
else
|
||||||
@ grep -E '^[^[:space:]]+:.*## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
@ grep -E '^[^[:space:]]+:.*## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||||
|
@ -36,9 +36,9 @@ myAngle = -120
|
|||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [8, 0])
|
|> line(end = [8, 0])
|
||||||
|> angledLine({ angle = abs(myAngle), length = 5 }, %)
|
|> angledLine(angle = abs(myAngle), length = 5)
|
||||||
|> line(end = [-5, 0])
|
|> line(end = [-5, 0])
|
||||||
|> angledLine({ angle = myAngle, length = 5 }, %)
|
|> angledLine(angle = myAngle, length = 5)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
baseExtrusion = extrude(sketch001, length = 5)
|
baseExtrusion = extrude(sketch001, length = 5)
|
||||||
|
@ -33,10 +33,7 @@ acos(num: number): number
|
|||||||
```js
|
```js
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = toDegrees(acos(0.5)), length = 10)
|
||||||
angle = toDegrees(acos(0.5)),
|
|
||||||
length = 10
|
|
||||||
}, %)
|
|
||||||
|> line(end = [5, 0])
|
|> line(end = [5, 0])
|
||||||
|> line(endAbsolute = [12, 0])
|
|> line(endAbsolute = [12, 0])
|
||||||
|> close()
|
|> close()
|
||||||
|
@ -36,7 +36,7 @@ angleToMatchLengthX(
|
|||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [2, 5], tag = $seg01)
|
|> line(end = [2, 5], tag = $seg01)
|
||||||
|> angledLineToX([-angleToMatchLengthX(seg01, 7, %), 10], %)
|
|> angledLine(angle = -angleToMatchLengthX(seg01, 7, %), endAbsoluteX = 10)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
extrusion = extrude(sketch001, length = 5)
|
extrusion = extrude(sketch001, length = 5)
|
||||||
|
@ -36,10 +36,7 @@ angleToMatchLengthY(
|
|||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [1, 2], tag = $seg01)
|
|> line(end = [1, 2], tag = $seg01)
|
||||||
|> angledLine({
|
|> angledLine(angle = angleToMatchLengthY(seg01, 15, %), length = 5)
|
||||||
angle = angleToMatchLengthY(seg01, 15, %),
|
|
||||||
length = 5
|
|
||||||
}, %)
|
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -10,8 +10,13 @@ Draw a line segment relative to the current origin using the polar measure of so
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
angledLine(
|
angledLine(
|
||||||
data: AngledLineData,
|
|
||||||
sketch: Sketch,
|
sketch: Sketch,
|
||||||
|
angle: number,
|
||||||
|
length?: number,
|
||||||
|
lengthX?: number,
|
||||||
|
lengthY?: number,
|
||||||
|
endAbsoluteX?: number,
|
||||||
|
endAbsoluteY?: number,
|
||||||
tag?: TagDeclarator,
|
tag?: TagDeclarator,
|
||||||
): Sketch
|
): Sketch
|
||||||
```
|
```
|
||||||
@ -21,9 +26,14 @@ angledLine(
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `data` | [`AngledLineData`](/docs/kcl/types/AngledLineData) | Data to draw an angled line. | Yes |
|
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes |
|
||||||
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes |
|
| `angle` | [`number`](/docs/kcl/types/number) | Which angle should the line be drawn at? | Yes |
|
||||||
| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |
|
| `length` | [`number`](/docs/kcl/types/number) | Draw the line this distance along the given angle. Only one of `length`, `lengthX`, `lengthY`, `lengthAbsoluteEndX`, `lengthAbsoluteEndY` can be given. | No |
|
||||||
|
| `lengthX` | [`number`](/docs/kcl/types/number) | Draw the line this distance along the X axis. Only one of `length`, `lengthX`, `lengthY`, `lengthAbsoluteEndX`, `lengthAbsoluteEndY` can be given. | No |
|
||||||
|
| `lengthY` | [`number`](/docs/kcl/types/number) | Draw the line this distance along the Y axis. Only one of `length`, `lengthX`, `lengthY`, `lengthAbsoluteEndX`, `lengthAbsoluteEndY` can be given. | No |
|
||||||
|
| `endAbsoluteX` | [`number`](/docs/kcl/types/number) | Draw the line along the given angle until it reaches this point along the X axis. Only one of `length`, `lengthX`, `lengthY`, `lengthAbsoluteEndX`, `lengthAbsoluteEndY` can be given. | No |
|
||||||
|
| `endAbsoluteY` | [`number`](/docs/kcl/types/number) | Draw the line along the given angle until it reaches this point along the Y axis. Only one of `length`, `lengthX`, `lengthY`, `lengthAbsoluteEndX`, `lengthAbsoluteEndY` can be given. | No |
|
||||||
|
| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
@ -36,7 +46,7 @@ angledLine(
|
|||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> yLine(endAbsolute = 15)
|
|> yLine(endAbsolute = 15)
|
||||||
|> angledLine({ angle = 30, length = 15 }, %)
|
|> angledLine(angle = 30, length = 15)
|
||||||
|> line(end = [8, -10])
|
|> line(end = [8, -10])
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -33,10 +33,7 @@ asin(num: number): number
|
|||||||
```js
|
```js
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = toDegrees(asin(0.5)), length = 20)
|
||||||
angle = toDegrees(asin(0.5)),
|
|
||||||
length = 20
|
|
||||||
}, %)
|
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -33,10 +33,7 @@ atan(num: number): number
|
|||||||
```js
|
```js
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = toDegrees(atan(1.25)), length = 20)
|
||||||
angle = toDegrees(atan(1.25)),
|
|
||||||
length = 20
|
|
||||||
}, %)
|
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@ atan2(
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `y` | [`number`](/docs/kcl/types/number) | | Yes |
|
| `y` | [`number`](/docs/kcl/types/number) | Y | Yes |
|
||||||
| `x` | [`number`](/docs/kcl/types/number) | | Yes |
|
| `x` | [`number`](/docs/kcl/types/number) | X | Yes |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
@ -37,10 +37,7 @@ atan2(
|
|||||||
```js
|
```js
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = toDegrees(atan2(y = 1.25, x = 2)), length = 20)
|
||||||
angle = toDegrees(atan2(1.25, 2)),
|
|
||||||
length = 20
|
|
||||||
}, %)
|
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ part001 = cube([0, 0], 20)
|
|||||||
// We tag the chamfer to reference it later.
|
// We tag the chamfer to reference it later.
|
||||||
|> chamfer(length = 10, tags = [getOppositeEdge(line1)], tag = $chamfer1)
|
|> chamfer(length = 10, tags = [getOppositeEdge(line1)], tag = $chamfer1)
|
||||||
|
|
||||||
sketch001 = startSketchOn(part001, chamfer1)
|
sketch001 = startSketchOn(part001, face = chamfer1)
|
||||||
|> startProfileAt([10, 10], %)
|
|> startProfileAt([10, 10], %)
|
||||||
|> line(end = [2, 0])
|
|> line(end = [2, 0])
|
||||||
|> line(end = [0, 2])
|
|> line(end = [0, 2])
|
||||||
|
@ -17,10 +17,10 @@ std::math::E: number = 2.71828182845904523536028747135266250_
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = 30,
|
angle = 30,
|
||||||
length = 2 * E ^ 2,
|
length = 2 * E ^ 2,
|
||||||
}, %)
|
)
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -17,10 +17,10 @@ std::math::TAU: number = 6.28318530717958647692528676655900577_
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = 50,
|
angle = 50,
|
||||||
length = 10 * TAU,
|
length = 10 * TAU,
|
||||||
}, %)
|
)
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ e(): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 30, length = 2 * e() ^ 2 }, %)
|
|> angledLine(angle = 30, length = 2 * e() ^ 2)
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -30,10 +30,10 @@ getNextAdjacentEdge(tag: TagIdentifier): Uuid
|
|||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [10, 0])
|
|> line(end = [10, 0])
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine(angle = 60, length = 10)
|
||||||
|> angledLine({ angle = 120, length = 10 }, %)
|
|> angledLine(angle = 120, length = 10)
|
||||||
|> line(end = [-10, 0])
|
|> line(end = [-10, 0])
|
||||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
|> angledLine(angle = 240, length = 10, tag = $referenceEdge)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 5)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|
@ -30,10 +30,10 @@ getOppositeEdge(tag: TagIdentifier): Uuid
|
|||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [10, 0])
|
|> line(end = [10, 0])
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine(angle = 60, length = 10)
|
||||||
|> angledLine({ angle = 120, length = 10 }, %)
|
|> angledLine(angle = 120, length = 10)
|
||||||
|> line(end = [-10, 0])
|
|> line(end = [-10, 0])
|
||||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
|> angledLine(angle = 240, length = 10, tag = $referenceEdge)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 5)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|
@ -30,10 +30,10 @@ getPreviousAdjacentEdge(tag: TagIdentifier): Uuid
|
|||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [10, 0])
|
|> line(end = [10, 0])
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine(angle = 60, length = 10)
|
||||||
|> angledLine({ angle = 120, length = 10 }, %)
|
|> angledLine(angle = 120, length = 10)
|
||||||
|> line(end = [-10, 0])
|
|> line(end = [-10, 0])
|
||||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
|> angledLine(angle = 240, length = 10, tag = $referenceEdge)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 5)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|
@ -69,11 +69,11 @@ case = startSketchOn(-XZ)
|
|||||||
|> close()
|
|> close()
|
||||||
|> extrude(length = 65)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [size / 2, -size / 2], radius = 25)
|
|> circle(center = [size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -43,11 +43,7 @@ layout: manual
|
|||||||
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
|
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
|
||||||
* [`angleToMatchLengthY`](kcl/angleToMatchLengthY)
|
* [`angleToMatchLengthY`](kcl/angleToMatchLengthY)
|
||||||
* [`angledLine`](kcl/angledLine)
|
* [`angledLine`](kcl/angledLine)
|
||||||
* [`angledLineOfXLength`](kcl/angledLineOfXLength)
|
|
||||||
* [`angledLineOfYLength`](kcl/angledLineOfYLength)
|
|
||||||
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
|
* [`angledLineThatIntersects`](kcl/angledLineThatIntersects)
|
||||||
* [`angledLineToX`](kcl/angledLineToX)
|
|
||||||
* [`angledLineToY`](kcl/angledLineToY)
|
|
||||||
* [`appearance`](kcl/appearance)
|
* [`appearance`](kcl/appearance)
|
||||||
* [`arc`](kcl/arc)
|
* [`arc`](kcl/arc)
|
||||||
* [`arcTo`](kcl/arcTo)
|
* [`arcTo`](kcl/arcTo)
|
||||||
@ -81,6 +77,7 @@ layout: manual
|
|||||||
* [`helix`](kcl/std-helix)
|
* [`helix`](kcl/std-helix)
|
||||||
* [`hole`](kcl/hole)
|
* [`hole`](kcl/hole)
|
||||||
* [`hollow`](kcl/hollow)
|
* [`hollow`](kcl/hollow)
|
||||||
|
* [`intersect`](kcl/intersect)
|
||||||
* [`lastSegX`](kcl/lastSegX)
|
* [`lastSegX`](kcl/lastSegX)
|
||||||
* [`lastSegY`](kcl/lastSegY)
|
* [`lastSegY`](kcl/lastSegY)
|
||||||
* [`legAngX`](kcl/legAngX)
|
* [`legAngX`](kcl/legAngX)
|
||||||
@ -127,6 +124,7 @@ layout: manual
|
|||||||
* [`sqrt`](kcl/sqrt)
|
* [`sqrt`](kcl/sqrt)
|
||||||
* [`startProfileAt`](kcl/startProfileAt)
|
* [`startProfileAt`](kcl/startProfileAt)
|
||||||
* [`startSketchOn`](kcl/startSketchOn)
|
* [`startSketchOn`](kcl/startSketchOn)
|
||||||
|
* [`subtract`](kcl/subtract)
|
||||||
* [`sweep`](kcl/sweep)
|
* [`sweep`](kcl/sweep)
|
||||||
* [`tangentToEnd`](kcl/tangentToEnd)
|
* [`tangentToEnd`](kcl/tangentToEnd)
|
||||||
* [`tangentialArc`](kcl/tangentialArc)
|
* [`tangentialArc`](kcl/tangentialArc)
|
||||||
@ -135,6 +133,7 @@ layout: manual
|
|||||||
* [`toDegrees`](kcl/toDegrees)
|
* [`toDegrees`](kcl/toDegrees)
|
||||||
* [`toRadians`](kcl/toRadians)
|
* [`toRadians`](kcl/toRadians)
|
||||||
* [`translate`](kcl/translate)
|
* [`translate`](kcl/translate)
|
||||||
|
* [`union`](kcl/union)
|
||||||
* [`xLine`](kcl/xLine)
|
* [`xLine`](kcl/xLine)
|
||||||
* [`yLine`](kcl/yLine)
|
* [`yLine`](kcl/yLine)
|
||||||
* **std::math**
|
* **std::math**
|
||||||
|
File diff suppressed because one or more lines are too long
@ -33,10 +33,7 @@ max(args: [number]): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = 70, length = max(15, 31, 4, 13, 22))
|
||||||
angle = 70,
|
|
||||||
length = max(15, 31, 4, 13, 22)
|
|
||||||
}, %)
|
|
||||||
|> line(end = [20, 0])
|
|> line(end = [20, 0])
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -33,10 +33,7 @@ min(args: [number]): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = 70, length = min(15, 31, 4, 13, 22))
|
||||||
angle = 70,
|
|
||||||
length = min(15, 31, 4, 13, 22)
|
|
||||||
}, %)
|
|
||||||
|> line(end = [20, 0])
|
|> line(end = [20, 0])
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ offsetPlane(
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `plane` | [`PlaneData`](/docs/kcl/types/PlaneData) | The plane (e.g. 'XY') which this new plane is created from. | Yes |
|
| `plane` | [`PlaneData`](/docs/kcl/types/PlaneData) | The plane (e.g. XY) which this new plane is created from. | Yes |
|
||||||
| `offset` | [`number`](/docs/kcl/types/number) | Distance from the standard plane this new plane will be created at. | Yes |
|
| `offset` | [`number`](/docs/kcl/types/number) | Distance from the standard plane this new plane will be created at. | Yes |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
@ -61,11 +61,11 @@ case = startSketchOn(XY)
|
|||||||
|> close(%)
|
|> close(%)
|
||||||
|> extrude(length = 65)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [size / 2, -size / 2], radius = 25)
|
|> circle(center = [size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ case = startSketchOn(XY)
|
|||||||
|> close(%)
|
|> close(%)
|
||||||
|> extrude(length = 65)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ pow(
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 50, length = pow(5, 2) }, %)
|
|> angledLine(angle = 50, length = pow(5, 2))
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -29,11 +29,8 @@ profileStart(sketch: Sketch): [number]
|
|||||||
```js
|
```js
|
||||||
sketch001 = startSketchOn(XY)
|
sketch001 = startSketchOn(XY)
|
||||||
|> startProfileAt([5, 2], %)
|
|> startProfileAt([5, 2], %)
|
||||||
|> angledLine({ angle = 120, length = 50 }, %, $seg01)
|
|> angledLine(angle = 120, length = 50, tag = $seg01)
|
||||||
|> angledLine({
|
|> angledLine(angle = segAng(seg01) + 120, length = 50)
|
||||||
angle = segAng(seg01) + 120,
|
|
||||||
length = 50
|
|
||||||
}, %)
|
|
||||||
|> line(end = profileStart(%))
|
|> line(end = profileStart(%))
|
||||||
|> close()
|
|> close()
|
||||||
|> extrude(length = 20)
|
|> extrude(length = 20)
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -78,7 +78,7 @@ assertEqual(sum, 6, 0.00001, "1 + 2 + 3 summed is 6")
|
|||||||
```js
|
```js
|
||||||
// Declare a function that sketches a decagon.
|
// Declare a function that sketches a decagon.
|
||||||
fn decagon(radius) {
|
fn decagon(radius) {
|
||||||
// Each side of the decagon is turned this many degrees from the previous angle.
|
// Each side of the decagon is turned this many radians from the previous angle.
|
||||||
stepAngle = 1 / 10 * TAU
|
stepAngle = 1 / 10 * TAU
|
||||||
|
|
||||||
// Start the decagon sketch at this point.
|
// Start the decagon sketch at this point.
|
||||||
|
@ -151,15 +151,9 @@ cube
|
|||||||
|
|
||||||
sketch001 = startSketchOn(XY)
|
sketch001 = startSketchOn(XY)
|
||||||
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
||||||
|> angledLine([0, 73.47], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
50.61
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -85,15 +85,9 @@ cube
|
|||||||
|
|
||||||
sketch001 = startSketchOn(XY)
|
sketch001 = startSketchOn(XY)
|
||||||
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
||||||
|> angledLine([0, 73.47], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
50.61
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -32,9 +32,9 @@ exampleSketch = startSketchOn(XZ)
|
|||||||
|> line(end = [10, 0])
|
|> line(end = [10, 0])
|
||||||
|> line(end = [5, 10], tag = $seg01)
|
|> line(end = [5, 10], tag = $seg01)
|
||||||
|> line(end = [-10, 0])
|
|> line(end = [-10, 0])
|
||||||
|> angledLine([segAng(seg01), 10], %)
|
|> angledLine(angle = segAng(seg01), length = 10)
|
||||||
|> line(end = [-10, 0])
|
|> line(end = [-10, 0])
|
||||||
|> angledLine([segAng(seg01), -15], %)
|
|> angledLine(angle = segAng(seg01), length = -15)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 4)
|
example = extrude(exampleSketch, length = 4)
|
||||||
|
@ -29,9 +29,9 @@ segLen(tag: TagIdentifier): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 60, length = 10 }, %, $thing)
|
|> angledLine(angle = 60, length = 10, tag = $thing)
|
||||||
|> tangentialArc({ offset = -120, radius = 5 }, %)
|
|> tangentialArc({ offset = -120, radius = 5 }, %)
|
||||||
|> angledLine({ angle = -60, length = segLen(thing) }, %)
|
|> angledLine(angle = -60, length = segLen(thing))
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 5)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|
@ -107,11 +107,11 @@ case = startSketchOn(-XZ)
|
|||||||
|> close()
|
|> close()
|
||||||
|> extrude(length = 65)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [size / 2, -size / 2], radius = 25)
|
|> circle(center = [size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
@ -132,11 +132,11 @@ case = startSketchOn(XY)
|
|||||||
|> close()
|
|> close()
|
||||||
|> extrude(length = 65)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [size / 2, -size / 2], radius = 25)
|
|> circle(center = [size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
@ -160,11 +160,11 @@ case = startSketchOn(XY)
|
|||||||
|> close()
|
|> close()
|
||||||
|> extrude(length = 65)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
|> circle(center = [-size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, face = 'end')
|
||||||
|> circle(center = [size / 2, -size / 2], radius = 25)
|
|> circle(center = [size / 2, -size / 2], radius = 25)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ sqrt(num: number): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 50, length = sqrt(2500) }, %)
|
|> angledLine(angle = 50, length = sqrt(2500))
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -18,8 +18,8 @@ The point is if you want to export the result of a sketch on a face, you only ne
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
startSketchOn(
|
startSketchOn(
|
||||||
data: SketchData,
|
planeOrSolid: SketchData,
|
||||||
tag?: FaceTag,
|
face?: FaceTag,
|
||||||
): SketchSurface
|
): SketchSurface
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -28,8 +28,8 @@ startSketchOn(
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `data` | [`SketchData`](/docs/kcl/types/SketchData) | Data for start sketch on. You can start a sketch on a plane or an solid. | Yes |
|
| `planeOrSolid` | [`SketchData`](/docs/kcl/types/SketchData) | The plane or solid to sketch on | Yes |
|
||||||
| [`tag`](/docs/kcl/types/tag) | [`FaceTag`](/docs/kcl/types/FaceTag) | A tag for a face. | No |
|
| `face` | [`FaceTag`](/docs/kcl/types/FaceTag) | Identify a face of a solid if a solid is specified as the input argument (`plane_or_solid`) | No |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ exampleSketch = startSketchOn(XY)
|
|||||||
|
|
||||||
example = extrude(exampleSketch, length = 5)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|
|
||||||
exampleSketch002 = startSketchOn(example, 'end')
|
exampleSketch002 = startSketchOn(example, face = 'end')
|
||||||
|> startProfileAt([1, 1], %)
|
|> startProfileAt([1, 1], %)
|
||||||
|> line(end = [8, 0])
|
|> line(end = [8, 0])
|
||||||
|> line(end = [0, 8])
|
|> line(end = [0, 8])
|
||||||
@ -57,7 +57,7 @@ exampleSketch002 = startSketchOn(example, 'end')
|
|||||||
|
|
||||||
example002 = extrude(exampleSketch002, length = 5)
|
example002 = extrude(exampleSketch002, length = 5)
|
||||||
|
|
||||||
exampleSketch003 = startSketchOn(example002, 'end')
|
exampleSketch003 = startSketchOn(example002, face = 'end')
|
||||||
|> startProfileAt([2, 2], %)
|
|> startProfileAt([2, 2], %)
|
||||||
|> line(end = [6, 0])
|
|> line(end = [6, 0])
|
||||||
|> line(end = [0, 6])
|
|> line(end = [0, 6])
|
||||||
@ -82,7 +82,7 @@ exampleSketch = startSketchOn(XY)
|
|||||||
|
|
||||||
example = extrude(exampleSketch, length = 5, tagEnd = $end01)
|
example = extrude(exampleSketch, length = 5, tagEnd = $end01)
|
||||||
|
|
||||||
exampleSketch002 = startSketchOn(example, end01)
|
exampleSketch002 = startSketchOn(example, face = end01)
|
||||||
|> startProfileAt([1, 1], %)
|
|> startProfileAt([1, 1], %)
|
||||||
|> line(end = [8, 0])
|
|> line(end = [8, 0])
|
||||||
|> line(end = [0, 8])
|
|> line(end = [0, 8])
|
||||||
@ -91,7 +91,7 @@ exampleSketch002 = startSketchOn(example, end01)
|
|||||||
|
|
||||||
example002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)
|
example002 = extrude(exampleSketch002, length = 5, tagEnd = $end02)
|
||||||
|
|
||||||
exampleSketch003 = startSketchOn(example002, end02)
|
exampleSketch003 = startSketchOn(example002, face = end02)
|
||||||
|> startProfileAt([2, 2], %)
|
|> startProfileAt([2, 2], %)
|
||||||
|> line(end = [6, 0])
|
|> line(end = [6, 0])
|
||||||
|> line(end = [0, 6])
|
|> line(end = [0, 6])
|
||||||
@ -113,7 +113,7 @@ exampleSketch = startSketchOn(XY)
|
|||||||
|
|
||||||
example = extrude(exampleSketch, length = 10)
|
example = extrude(exampleSketch, length = 10)
|
||||||
|
|
||||||
exampleSketch002 = startSketchOn(example, sketchingFace)
|
exampleSketch002 = startSketchOn(example, face = sketchingFace)
|
||||||
|> startProfileAt([1, 1], %)
|
|> startProfileAt([1, 1], %)
|
||||||
|> line(end = [8, 0])
|
|> line(end = [8, 0])
|
||||||
|> line(end = [0, 8])
|
|> line(end = [0, 8])
|
||||||
@ -122,7 +122,7 @@ exampleSketch002 = startSketchOn(example, sketchingFace)
|
|||||||
|
|
||||||
example002 = extrude(exampleSketch002, length = 10)
|
example002 = extrude(exampleSketch002, length = 10)
|
||||||
|
|
||||||
exampleSketch003 = startSketchOn(example002, sketchingFace002)
|
exampleSketch003 = startSketchOn(example002, face = sketchingFace002)
|
||||||
|> startProfileAt([-8, 12], %)
|
|> startProfileAt([-8, 12], %)
|
||||||
|> line(end = [0, 6])
|
|> line(end = [0, 6])
|
||||||
|> line(end = [6, 0])
|
|> line(end = [6, 0])
|
||||||
@ -148,7 +148,7 @@ exampleSketch = startSketchOn(XY)
|
|||||||
|
|
||||||
example = revolve(exampleSketch, axis = Y, angle = 180)
|
example = revolve(exampleSketch, axis = Y, angle = 180)
|
||||||
|
|
||||||
exampleSketch002 = startSketchOn(example, 'end')
|
exampleSketch002 = startSketchOn(example, face = 'end')
|
||||||
|> startProfileAt([4.5, -5], %)
|
|> startProfileAt([4.5, -5], %)
|
||||||
|> line(end = [0, 5])
|
|> line(end = [0, 5])
|
||||||
|> line(end = [5, 0])
|
|> line(end = [5, 0])
|
||||||
@ -182,7 +182,7 @@ example = revolve(
|
|||||||
tagEnd = $end01,
|
tagEnd = $end01,
|
||||||
)
|
)
|
||||||
|
|
||||||
exampleSketch002 = startSketchOn(example, end01)
|
exampleSketch002 = startSketchOn(example, face = end01)
|
||||||
|> startProfileAt([4.5, -5], %)
|
|> startProfileAt([4.5, -5], %)
|
||||||
|> line(end = [0, 5])
|
|> line(end = [0, 5])
|
||||||
|> line(end = [5, 0])
|
|> line(end = [5, 0])
|
||||||
@ -196,12 +196,10 @@ example002 = extrude(exampleSketch002, length = 5)
|
|||||||
|
|
||||||
```js
|
```js
|
||||||
a1 = startSketchOn({
|
a1 = startSketchOn({
|
||||||
plane = {
|
origin = { x = 0, y = 0, z = 0 },
|
||||||
origin = { x = 0, y = 0, z = 0 },
|
xAxis = { x = 1, y = 0, z = 0 },
|
||||||
xAxis = { x = 1, y = 0, z = 0 },
|
yAxis = { x = 0, y = 1, z = 0 },
|
||||||
yAxis = { x = 0, y = 1, z = 0 },
|
zAxis = { x = 0, y = 0, z = 1 }
|
||||||
zAxis = { x = 0, y = 0, z = 1 }
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [100.0, 0])
|
|> line(end = [100.0, 0])
|
||||||
|
@ -9,7 +9,15 @@ Create a helix.
|
|||||||
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
helix(revolutions: number(_), angleStart: number(deg), ccw?: bool, radius?: number(mm), axis?: Axis3d | Edge, length?: number(mm), cylinder?: Solid): Helix
|
helix(
|
||||||
|
revolutions: number(_),
|
||||||
|
angleStart: number(Angle),
|
||||||
|
ccw?: bool,
|
||||||
|
radius?: number(Length),
|
||||||
|
axis?: Axis3d | Edge,
|
||||||
|
length?: number(Length),
|
||||||
|
cylinder?: Solid,
|
||||||
|
): Helix
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -18,11 +26,11 @@ helix(revolutions: number(_), angleStart: number(deg), ccw?: bool, radius?: numb
|
|||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `revolutions` | `number(_)` | Number of revolutions. | Yes |
|
| `revolutions` | `number(_)` | Number of revolutions. | Yes |
|
||||||
| `angleStart` | `number(deg)` | Start angle (in degrees). | Yes |
|
| `angleStart` | `number(Angle)` | Start angle (in degrees). | Yes |
|
||||||
| `ccw` | [`bool`](/docs/kcl/types/bool) | Is the helix rotation counter clockwise? The default is `false`. | No |
|
| `ccw` | [`bool`](/docs/kcl/types/bool) | Is the helix rotation counter clockwise? The default is `false`. | No |
|
||||||
| `radius` | `number(mm)` | Radius of the helix. | No |
|
| `radius` | `number(Length)` | Radius of the helix. | No |
|
||||||
| `axis` | `Axis3d | Edge` | Axis to use for the helix. | No |
|
| `axis` | `Axis3d | Edge` | Axis to use for the helix. | No |
|
||||||
| `length` | `number(mm)` | Length of the helix. This is not necessary if the helix is created around an edge. If not given the length of the edge is used. | No |
|
| `length` | `number(Length)` | Length of the helix. This is not necessary if the helix is created around an edge. If not given the length of the edge is used. | No |
|
||||||
| `cylinder` | [`Solid`](/docs/kcl/types/Solid) | Cylinder to create the helix on. | No |
|
| `cylinder` | [`Solid`](/docs/kcl/types/Solid) | Cylinder to create the helix on. | No |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
@ -9,7 +9,7 @@ Compute the cosine of a number (in radians).
|
|||||||
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
cos(@num: number(rad)): number(_)
|
cos(@num: number(Angle)): number(_)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ cos(@num: number(rad)): number(_)
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `num` | `number(rad)` | | Yes |
|
| `num` | `number(Angle)` | | Yes |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
@ -29,10 +29,10 @@ cos(@num: number(rad)): number(_)
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = 30,
|
angle = 30,
|
||||||
length = 3 / cos(toRadians(30)),
|
length = 3 / cos(toRadians(30)),
|
||||||
}, %)
|
)
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -6,10 +6,14 @@ layout: manual
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Convert polar/sphere (azimuth, elevation, distance) coordinates tocartesian (x/y/z grid) coordinates.
|
Convert polar/sphere (azimuth, elevation, distance) coordinates to
|
||||||
|
cartesian (x/y/z grid) coordinates.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
polar(angle: number(deg), length: number(mm)): [number(mm); 2]
|
polar(
|
||||||
|
angle: number(Angle),
|
||||||
|
length: number(Length),
|
||||||
|
): Point2d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -17,12 +21,12 @@ polar(angle: number(deg), length: number(mm)): [number(mm); 2]
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `angle` | `number(deg)` | | Yes |
|
| `angle` | `number(Angle)` | | Yes |
|
||||||
| `length` | `number(mm)` | | Yes |
|
| `length` | `number(Length)` | | Yes |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
`[number(mm); 2]`
|
[`Point2d`](/docs/kcl/types/Point2d)
|
||||||
|
|
||||||
|
|
||||||
### Examples
|
### Examples
|
||||||
|
File diff suppressed because one or more lines are too long
@ -9,7 +9,7 @@ Compute the tangent of a number (in radians).
|
|||||||
|
|
||||||
|
|
||||||
```js
|
```js
|
||||||
tan(@num: number(rad)): number(_)
|
tan(@num: number(Angle)): number(_)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -17,7 +17,7 @@ tan(@num: number(rad)): number(_)
|
|||||||
|
|
||||||
| Name | Type | Description | Required |
|
| Name | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `num` | `number(rad)` | | Yes |
|
| `num` | `number(Angle)` | | Yes |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
|
||||||
@ -29,10 +29,10 @@ tan(@num: number(rad)): number(_)
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = 50,
|
angle = 50,
|
||||||
length = 50 * tan(1/2),
|
length = 50 * tan(1/2),
|
||||||
}, %)
|
)
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -6,10 +6,16 @@ layout: manual
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
Construct a 2-dimensional circle, of the specified radius, centered atthe provided (x, y) origin point.
|
Construct a 2-dimensional circle, of the specified radius, centered at
|
||||||
|
the provided (x, y) origin point.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
circle(@sketch_or_surface: Sketch | Plane | Face, center: Point2d, radius: number, tag?: tag): Sketch
|
circle(
|
||||||
|
@sketch_or_surface: Sketch | Plane | Face,
|
||||||
|
center: Point2d,
|
||||||
|
radius: number(Length),
|
||||||
|
tag?: tag,
|
||||||
|
): Sketch
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -19,7 +25,7 @@ circle(@sketch_or_surface: Sketch | Plane | Face, center: Point2d, radius: numbe
|
|||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `sketch_or_surface` | [`Sketch`](/docs/kcl/types/Sketch) OR [`Plane`](/docs/kcl/types/Plane) OR [`Face`](/docs/kcl/types/Face) | Sketch to extend, or plane or surface to sketch on. | Yes |
|
| `sketch_or_surface` | [`Sketch`](/docs/kcl/types/Sketch) OR [`Plane`](/docs/kcl/types/Plane) OR [`Face`](/docs/kcl/types/Face) | Sketch to extend, or plane or surface to sketch on. | Yes |
|
||||||
| `center` | [`Point2d`](/docs/kcl/types/Point2d) | The center of the circle. | Yes |
|
| `center` | [`Point2d`](/docs/kcl/types/Point2d) | The center of the circle. | Yes |
|
||||||
| `radius` | [`number`](/docs/kcl/types/number) | The radius of the circle. | Yes |
|
| `radius` | `number(Length)` | The radius of the circle. | Yes |
|
||||||
| [`tag`](/docs/kcl/types/tag) | [`tag`](/docs/kcl/types/tag) | Create a new tag which refers to this circle. | No |
|
| [`tag`](/docs/kcl/types/tag) | [`tag`](/docs/kcl/types/tag) | Create a new tag which refers to this circle. | No |
|
||||||
|
|
||||||
### Returns
|
### Returns
|
||||||
|
@ -11,7 +11,10 @@ Only works on unclosed sketches for now.
|
|||||||
Mirror occurs around a local sketch axis rather than a global axis.
|
Mirror occurs around a local sketch axis rather than a global axis.
|
||||||
|
|
||||||
```js
|
```js
|
||||||
mirror2d(@sketches: [Sketch; 1+], axis: Axis2d | Edge): Sketch
|
mirror2d(
|
||||||
|
@sketches: [Sketch; 1+],
|
||||||
|
axis: Axis2d | Edge,
|
||||||
|
): Sketch
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
@ -107,7 +110,7 @@ sketch0011 = startSketchOn(XY)
|
|||||||
|> mirror2d( axis = X )
|
|> mirror2d( axis = X )
|
||||||
|> extrude(length = 10)
|
|> extrude(length = 10)
|
||||||
|
|
||||||
sketch002 = startSketchOn(sketch0011, 'END')
|
sketch002 = startSketchOn(sketch0011, face = 'END')
|
||||||
|> circle( center = [-0.01, 1.58], radius = 1.2 )
|
|> circle( center = [-0.01, 1.58], radius = 1.2 )
|
||||||
|> extrude(length = 1.2)
|
|> extrude(length = 1.2)
|
||||||
|
|
||||||
|
44615
docs/kcl/std.json
44615
docs/kcl/std.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -91,15 +91,9 @@ springSketch = startSketchOn(YZ)
|
|||||||
|
|
||||||
sketch001 = startSketchOn(XY)
|
sketch001 = startSketchOn(XY)
|
||||||
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
||||||
|> angledLine([0, 73.47], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
50.61
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -32,10 +32,7 @@ pillSketch = startSketchOn(XZ)
|
|||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [20, 0])
|
|> line(end = [20, 0])
|
||||||
|> tangentialArcToRelative([0, 10], %, $arc1)
|
|> tangentialArcToRelative([0, 10], %, $arc1)
|
||||||
|> angledLine({
|
|> angledLine(angle = tangentToEnd(arc1), length = 20)
|
||||||
angle = tangentToEnd(arc1),
|
|
||||||
length = 20
|
|
||||||
}, %)
|
|
||||||
|> tangentialArcToRelative([0, -10], %)
|
|> tangentialArcToRelative([0, -10], %)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
@ -50,10 +47,7 @@ pillSketch = startSketchOn(XZ)
|
|||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [0, 20])
|
|> line(end = [0, 20])
|
||||||
|> tangentialArcTo([10, 20], %, $arc1)
|
|> tangentialArcTo([10, 20], %, $arc1)
|
||||||
|> angledLine({
|
|> angledLine(angle = tangentToEnd(arc1), length = 20)
|
||||||
angle = tangentToEnd(arc1),
|
|
||||||
length = 20
|
|
||||||
}, %)
|
|
||||||
|> tangentialArcToRelative([-10, 0], %)
|
|> tangentialArcToRelative([-10, 0], %)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
@ -66,10 +60,7 @@ pillExtrude = extrude(pillSketch, length = 10)
|
|||||||
rectangleSketch = startSketchOn(XZ)
|
rectangleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line(end = [10, 0], tag = $seg1)
|
|> line(end = [10, 0], tag = $seg1)
|
||||||
|> angledLine({
|
|> angledLine(angle = tangentToEnd(seg1), length = 10)
|
||||||
angle = tangentToEnd(seg1),
|
|
||||||
length = 10
|
|
||||||
}, %)
|
|
||||||
|> line(end = [0, 10])
|
|> line(end = [0, 10])
|
||||||
|> line(end = [-20, 0])
|
|> line(end = [-20, 0])
|
||||||
|> close()
|
|> close()
|
||||||
@ -83,7 +74,7 @@ rectangleExtrude = extrude(rectangleSketch, length = 10)
|
|||||||
bottom = startSketchOn(XY)
|
bottom = startSketchOn(XY)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> arcTo({ end = [10, 10], interior = [5, 1] }, %, $arc1)
|
|> arcTo({ end = [10, 10], interior = [5, 1] }, %, $arc1)
|
||||||
|> angledLine([tangentToEnd(arc1), 20], %)
|
|> angledLine(angle = tangentToEnd(arc1), length = 20)
|
||||||
|> close()
|
|> close()
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -95,7 +86,7 @@ circSketch = startSketchOn(XY)
|
|||||||
|
|
||||||
triangleSketch = startSketchOn(XY)
|
triangleSketch = startSketchOn(XY)
|
||||||
|> startProfileAt([-5, 0], %)
|
|> startProfileAt([-5, 0], %)
|
||||||
|> angledLine([tangentToEnd(circ), 10], %)
|
|> angledLine(angle = tangentToEnd(circ), length = 10)
|
||||||
|> line(end = [-15, 0])
|
|> line(end = [-15, 0])
|
||||||
|> close()
|
|> close()
|
||||||
```
|
```
|
||||||
|
@ -35,9 +35,9 @@ tangentialArc(
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine(angle = 60, length = 10)
|
||||||
|> tangentialArc({ radius = 10, offset = -120 }, %)
|
|> tangentialArc({ radius = 10, offset = -120 }, %)
|
||||||
|> angledLine({ angle = -60, length = 10 }, %)
|
|> angledLine(angle = -60, length = 10)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
example = extrude(exampleSketch, length = 10)
|
example = extrude(exampleSketch, length = 10)
|
||||||
|
@ -35,7 +35,7 @@ tangentialArcTo(
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine(angle = 60, length = 10)
|
||||||
|> tangentialArcTo([15, 15], %)
|
|> tangentialArcTo([15, 15], %)
|
||||||
|> line(end = [10, -15])
|
|> line(end = [10, -15])
|
||||||
|> close()
|
|> close()
|
||||||
|
@ -35,7 +35,7 @@ tangentialArcToRelative(
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 45, length = 10 }, %)
|
|> angledLine(angle = 45, length = 10)
|
||||||
|> tangentialArcToRelative([0, -10], %)
|
|> tangentialArcToRelative([0, -10], %)
|
||||||
|> line(end = [-10, 0])
|
|> line(end = [-10, 0])
|
||||||
|> close()
|
|> close()
|
||||||
|
@ -30,7 +30,7 @@ tau(): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle = 50, length = 10 * tau() }, %)
|
|> angledLine(angle = 50, length = 10 * tau())
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -33,10 +33,7 @@ toDegrees(num: number): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = 50, length = 70 * cos(toDegrees(pi() / 4)))
|
||||||
angle = 50,
|
|
||||||
length = 70 * cos(toDegrees(pi() / 4))
|
|
||||||
}, %)
|
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -33,10 +33,7 @@ toRadians(num: number): number
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({
|
|> angledLine(angle = 50, length = 70 * cos(toRadians(45)))
|
||||||
angle = 50,
|
|
||||||
length = 70 * cos(toRadians(45))
|
|
||||||
}, %)
|
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -86,15 +86,9 @@ cube
|
|||||||
|
|
||||||
sketch001 = startSketchOn(XY)
|
sketch001 = startSketchOn(XY)
|
||||||
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
rectangleSketch = startProfileAt([-200, 23.86], sketch001)
|
||||||
|> angledLine([0, 73.47], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 73.47, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 50.61)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
50.61
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -184,15 +184,17 @@ way:
|
|||||||
```norun
|
```norun
|
||||||
startSketchOn('XZ')
|
startSketchOn('XZ')
|
||||||
|> startProfileAt(origin, %)
|
|> startProfileAt(origin, %)
|
||||||
|> angledLine({angle = 0, length = 191.26}, %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
length = 196.99,
|
length = 196.99,
|
||||||
}, %, $rectangleSegmentB001)
|
tag = $rectangleSegmentB001,
|
||||||
|> angledLine({
|
)
|
||||||
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001),
|
angle = segAng(rectangleSegmentA001),
|
||||||
length = -segLen(rectangleSegmentA001),
|
length = -segLen(rectangleSegmentA001),
|
||||||
}, %, $rectangleSegmentC001)
|
tag = $rectangleSegmentC001,
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
```
|
```
|
||||||
@ -217,15 +219,17 @@ However if the code was written like this:
|
|||||||
fn rect(origin) {
|
fn rect(origin) {
|
||||||
return startSketchOn('XZ')
|
return startSketchOn('XZ')
|
||||||
|> startProfileAt(origin, %)
|
|> startProfileAt(origin, %)
|
||||||
|> angledLine({angle = 0, length = 191.26}, %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
length = 196.99
|
length = 196.99,
|
||||||
}, %, $rectangleSegmentB001)
|
tag = $rectangleSegmentB001,
|
||||||
|> angledLine({
|
)
|
||||||
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001),
|
angle = segAng(rectangleSegmentA001),
|
||||||
length = -segLen(rectangleSegmentA001)
|
length = -segLen(rectangleSegmentA001)
|
||||||
}, %, $rectangleSegmentC001)
|
tag = $rectangleSegmentC001,
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
}
|
}
|
||||||
@ -245,15 +249,17 @@ For example the following code works.
|
|||||||
fn rect(origin) {
|
fn rect(origin) {
|
||||||
return startSketchOn('XZ')
|
return startSketchOn('XZ')
|
||||||
|> startProfileAt(origin, %)
|
|> startProfileAt(origin, %)
|
||||||
|> angledLine({angle = 0, length = 191.26}, %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
length = 196.99
|
length = 196.99,
|
||||||
}, %, $rectangleSegmentB001)
|
tag = $rectangleSegmentB001,
|
||||||
|> angledLine({
|
)
|
||||||
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001),
|
angle = segAng(rectangleSegmentA001),
|
||||||
length = -segLen(rectangleSegmentA001)
|
length = -segLen(rectangleSegmentA001)
|
||||||
}, %, $rectangleSegmentC001)
|
tag = $rectangleSegmentC001,
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
}
|
}
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
title: "AngledLineData"
|
|
||||||
excerpt: "Data to draw an angled line."
|
|
||||||
layout: manual
|
|
||||||
---
|
|
||||||
|
|
||||||
Data to draw an angled line.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
**This schema accepts any of the following:**
|
|
||||||
|
|
||||||
An angle and length with explicitly named parameters
|
|
||||||
|
|
||||||
**Type:** `object`
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Properties
|
|
||||||
|
|
||||||
| Property | Type | Description | Required |
|
|
||||||
|----------|------|-------------|----------|
|
|
||||||
| `angle` |[`number`](/docs/kcl/types/number)| The angle of the line (in degrees). | No |
|
|
||||||
| `length` |[`number`](/docs/kcl/types/number)| The length of the line. | No |
|
|
||||||
|
|
||||||
|
|
||||||
----
|
|
||||||
An angle and length given as a pair
|
|
||||||
|
|
||||||
**Type:** `array`
|
|
||||||
|
|
||||||
`[number, number]`
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
----
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -16,8 +16,8 @@ Data for drawing an angled line that intersects with a given line.
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `angle` |[`number`](/docs/kcl/types/number)| The angle of the line. | No |
|
| `angle` |`TyF64`| The angle of the line. | No |
|
||||||
| `intersectTag` |[`TagIdentifier`](/docs/kcl/types#tag-identifier)| The tag of the line to intersect with. | No |
|
| `intersectTag` |[`TagIdentifier`](/docs/kcl/types#tag-identifier)| The tag of the line to intersect with. | No |
|
||||||
| `offset` |[`number`](/docs/kcl/types/number)| The offset from the intersecting line. | No |
|
| `offset` |`TyF64`| The offset from the intersecting line. | No |
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
title: "AngledLineToData"
|
|
||||||
excerpt: "Data to draw an angled line to a point."
|
|
||||||
layout: manual
|
|
||||||
---
|
|
||||||
|
|
||||||
Data to draw an angled line to a point.
|
|
||||||
|
|
||||||
**Type:** `object`
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Properties
|
|
||||||
|
|
||||||
| Property | Type | Description | Required |
|
|
||||||
|----------|------|-------------|----------|
|
|
||||||
| `angle` |[`number`](/docs/kcl/types/number)| The angle of the line. | No |
|
|
||||||
| `to` |[`number`](/docs/kcl/types/number)| The point to draw to. | No |
|
|
||||||
|
|
||||||
|
|
@ -23,9 +23,9 @@ Angles and radius with an optional tag.
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `angleStart` |[`number`](/docs/kcl/types/number) (**maximum:** 360.0) (**minimum:** -360.0)| The start angle. | No |
|
| `angleStart` |`TyF64`| The start angle. | No |
|
||||||
| `angleEnd` |[`number`](/docs/kcl/types/number) (**maximum:** 360.0) (**minimum:** -360.0)| The end angle. | No |
|
| `angleEnd` |`TyF64`| The end angle. | No |
|
||||||
| `radius` |[`number`](/docs/kcl/types/number)| The radius. | No |
|
| `radius` |`TyF64`| The radius. | No |
|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
@ -41,9 +41,9 @@ Center, to and radius with an optional tag.
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `center` |`[number, number]`| The center. | No |
|
| `center` |`[, `TyF64`, `TyF64`]`| The center. | No |
|
||||||
| `to` |`[number, number]`| The to point. | No |
|
| `to` |`[, `TyF64`, `TyF64`]`| The to point. | No |
|
||||||
| `radius` |[`number`](/docs/kcl/types/number)| The radius. | No |
|
| `radius` |`TyF64`| The radius. | No |
|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
@ -16,7 +16,7 @@ Data to draw a three point arc (arcTo).
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `end` |`[number, number]`| End point of the arc. A point in 3D space | No |
|
| `end` |`[, `TyF64`, `TyF64`]`| End point of the arc. A point in 3D space | No |
|
||||||
| `interior` |`[number, number]`| Interior point of the arc. A point in 3D space | No |
|
| `interior` |`[, `TyF64`, `TyF64`]`| Interior point of the arc. A point in 3D space | No |
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@ Data to draw a bezier curve.
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `to` |`[number, number]`| The to point. | No |
|
| `to` |`[, `TyF64`, `TyF64`]`| The to point. | No |
|
||||||
| `control1` |`[number, number]`| The first control point. | No |
|
| `control1` |`[, `TyF64`, `TyF64`]`| The first control point. | No |
|
||||||
| `control2` |`[number, number]`| The second control point. | No |
|
| `control2` |`[, `TyF64`, `TyF64`]`| The second control point. | No |
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ A fillet.
|
|||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `type` |enum: `fillet`| | No |
|
| `type` |enum: `fillet`| | No |
|
||||||
| `id` |[`string`](/docs/kcl/types/string)| The id of the engine command that called this fillet. | No |
|
| `id` |[`string`](/docs/kcl/types/string)| The id of the engine command that called this fillet. | No |
|
||||||
| `radius` |[`number`](/docs/kcl/types/number)| | No |
|
| `radius` |`TyF64`| | No |
|
||||||
| `edgeId` |[`string`](/docs/kcl/types/string)| The engine id of the edge to fillet. | No |
|
| `edgeId` |[`string`](/docs/kcl/types/string)| The engine id of the edge to fillet. | No |
|
||||||
| [`tag`](/docs/kcl/types/tag) |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No |
|
| [`tag`](/docs/kcl/types/tag) |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No |
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ A chamfer.
|
|||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `type` |enum: `chamfer`| | No |
|
| `type` |enum: `chamfer`| | No |
|
||||||
| `id` |[`string`](/docs/kcl/types/string)| The id of the engine command that called this chamfer. | No |
|
| `id` |[`string`](/docs/kcl/types/string)| The id of the engine command that called this chamfer. | No |
|
||||||
| `length` |[`number`](/docs/kcl/types/number)| | No |
|
| `length` |`TyF64`| | No |
|
||||||
| `edgeId` |[`string`](/docs/kcl/types/string)| The engine id of the edge to chamfer. | No |
|
| `edgeId` |[`string`](/docs/kcl/types/string)| The engine id of the edge to chamfer. | No |
|
||||||
| [`tag`](/docs/kcl/types/tag) |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No |
|
| [`tag`](/docs/kcl/types/tag) |[`TagDeclarator`](/docs/kcl/types#tag-declaration)| | No |
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ Data for an imported geometry.
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `type` |enum: [`ImportedGeometry`](/docs/kcl/types/ImportedGeometry)| | No |
|
| `type` |enum: `ImportedGeometry`| | No |
|
||||||
| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No |
|
| `id` |[`string`](/docs/kcl/types/string)| The ID of the imported geometry. | No |
|
||||||
| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No |
|
| `value` |`[` [`string`](/docs/kcl/types/string) `]`| The original file paths. | No |
|
||||||
|
|
||||||
|
@ -130,6 +130,21 @@ A unit of length.
|
|||||||
| `type` |enum: `Yards`| | No |
|
| `type` |enum: `Yards`| | No |
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
**Type:** `object`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
| Property | Type | Description | Required |
|
||||||
|
|----------|------|-------------|----------|
|
||||||
|
| `type` |enum: `Unknown`| | No |
|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
@ -178,6 +193,21 @@ A unit of angle.
|
|||||||
| `type` |enum: `Radians`| | No |
|
| `type` |enum: `Radians`| | No |
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
**Type:** `object`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
| Property | Type | Description | Required |
|
||||||
|
|----------|------|-------------|----------|
|
||||||
|
| `type` |enum: `Unknown`| | No |
|
||||||
|
|
||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ layout: manual
|
|||||||
A point in two dimensional space.
|
A point in two dimensional space.
|
||||||
|
|
||||||
```kcl
|
```kcl
|
||||||
type Point2d = [number; 2]
|
type Point2d = [number(Length); 2]
|
||||||
```
|
```
|
||||||
|
|
||||||
[`Point2d`](/docs/kcl/types/Point2d) is an alias for a two-element array of [number](/docs/kcl/types/number)s. To write a value
|
[`Point2d`](/docs/kcl/types/Point2d) is an alias for a two-element array of [number](/docs/kcl/types/number)s. To write a value
|
||||||
|
@ -7,7 +7,7 @@ layout: manual
|
|||||||
A point in three dimensional space.
|
A point in three dimensional space.
|
||||||
|
|
||||||
```kcl
|
```kcl
|
||||||
type Point3d = [number; 3]
|
type Point3d = [number(Length); 3]
|
||||||
```
|
```
|
||||||
|
|
||||||
[`Point3d`](/docs/kcl/types/Point3d) is an alias for a three-element array of [number](/docs/kcl/types/number)s. To write a value
|
[`Point3d`](/docs/kcl/types/Point3d) is an alias for a three-element array of [number](/docs/kcl/types/number)s. To write a value
|
||||||
|
@ -16,9 +16,9 @@ Data for drawing a polygon
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `radius` |[`number`](/docs/kcl/types/number)| The radius of the polygon | No |
|
| `radius` |`TyF64`| The radius of the polygon | No |
|
||||||
| `numSides` |`integer`| The number of sides in the polygon | No |
|
| `numSides` |`integer`| The number of sides in the polygon | No |
|
||||||
| `center` |`[number, number]`| The center point of the polygon | No |
|
| `center` |`[, `TyF64`, `TyF64`]`| The center point of the polygon | No |
|
||||||
| `inscribed` |`boolean`| Whether the polygon is inscribed (true) or circumscribed (false) about a circle with the specified radius | No |
|
| `inscribed` |`boolean`| Whether the polygon is inscribed (true) or circumscribed (false) about a circle with the specified radius | No |
|
||||||
|
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Data to draw a tangential arc.
|
|||||||
|
|
||||||
| Property | Type | Description | Required |
|
| Property | Type | Description | Required |
|
||||||
|----------|------|-------------|----------|
|
|----------|------|-------------|----------|
|
||||||
| `radius` |[`number`](/docs/kcl/types/number)| Radius of the arc. Not to be confused with Raiders of the Lost Ark. | No |
|
| `radius` |`TyF64`| Radius of the arc. Not to be confused with Raiders of the Lost Ark. | No |
|
||||||
| `offset` |[`number`](/docs/kcl/types/number)| Offset of the arc, in degrees. | No |
|
| `offset` |`TyF64`| Offset of the arc, in degrees. | No |
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,6 +43,21 @@ A unit of angle.
|
|||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
**Type:** `object`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
| Property | Type | Description | Required |
|
||||||
|
|----------|------|-------------|----------|
|
||||||
|
| `type` |enum: `Unknown`| | No |
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,6 +103,21 @@ A unit of length.
|
|||||||
|
|
||||||
----
|
----
|
||||||
|
|
||||||
|
**Type:** `object`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Properties
|
||||||
|
|
||||||
|
| Property | Type | Description | Required |
|
||||||
|
|----------|------|-------------|----------|
|
||||||
|
| `type` |enum: `Unknown`| | No |
|
||||||
|
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,15 +14,17 @@ way:
|
|||||||
```js
|
```js
|
||||||
startSketchOn('XZ')
|
startSketchOn('XZ')
|
||||||
|> startProfileAt(origin, %)
|
|> startProfileAt(origin, %)
|
||||||
|> angledLine({angle = 0, length = 191.26}, %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
length = 196.99,
|
length = 196.99,
|
||||||
}, %, $rectangleSegmentB001)
|
tag = $rectangleSegmentB001,
|
||||||
|> angledLine({
|
)
|
||||||
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001),
|
angle = segAng(rectangleSegmentA001),
|
||||||
length = -segLen(rectangleSegmentA001),
|
length = -segLen(rectangleSegmentA001),
|
||||||
}, %, $rectangleSegmentC001)
|
tag = $rectangleSegmentC001,
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
```
|
```
|
||||||
@ -46,15 +48,16 @@ However if the code was written like this:
|
|||||||
fn rect(origin) {
|
fn rect(origin) {
|
||||||
return startSketchOn('XZ')
|
return startSketchOn('XZ')
|
||||||
|> startProfileAt(origin, %)
|
|> startProfileAt(origin, %)
|
||||||
|> angledLine({angle = 0, length = 191.26}, %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
length = 196.99
|
length = 196.99,
|
||||||
}, %, $rectangleSegmentB001)
|
tag = $rectangleSegmentB001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001),
|
angle = segAng(rectangleSegmentA001),
|
||||||
length = -segLen(rectangleSegmentA001)
|
length = -segLen(rectangleSegmentA001),
|
||||||
}, %, $rectangleSegmentC001)
|
tag = $rectangleSegmentC001
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
}
|
}
|
||||||
@ -74,15 +77,15 @@ For example the following code works.
|
|||||||
fn rect(origin) {
|
fn rect(origin) {
|
||||||
return startSketchOn('XZ')
|
return startSketchOn('XZ')
|
||||||
|> startProfileAt(origin, %)
|
|> startProfileAt(origin, %)
|
||||||
|> angledLine({angle = 0, length = 191.26}, %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 191.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
length = 196.99
|
length = 196.99
|
||||||
}, %, $rectangleSegmentB001)
|
, %, $rectangleSegmentB001)
|
||||||
|> angledLine({
|
|> angledLine(
|
||||||
angle = segAng(rectangleSegmentA001),
|
angle = segAng(rectangleSegmentA001),
|
||||||
length = -segLen(rectangleSegmentA001)
|
length = -segLen(rectangleSegmentA001)
|
||||||
}, %, $rectangleSegmentC001)
|
, %, $rectangleSegmentC001)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -38,10 +38,10 @@ xLine(
|
|||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> xLine(length = 15)
|
|> xLine(length = 15)
|
||||||
|> angledLine({ angle = 80, length = 15 }, %)
|
|> angledLine(angle = 80, length = 15)
|
||||||
|> line(end = [8, -10])
|
|> line(end = [8, -10])
|
||||||
|> xLine(length = 10)
|
|> xLine(length = 10)
|
||||||
|> angledLine({ angle = 120, length = 30 }, %)
|
|> angledLine(angle = 120, length = 30)
|
||||||
|> xLine(length = -15)
|
|> xLine(length = -15)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ yLine(
|
|||||||
exampleSketch = startSketchOn(XZ)
|
exampleSketch = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> yLine(length = 15)
|
|> yLine(length = 15)
|
||||||
|> angledLine({ angle = 30, length = 15 }, %)
|
|> angledLine(angle = 30, length = 15)
|
||||||
|> line(end = [8, -10])
|
|> line(end = [8, -10])
|
||||||
|> yLine(length = -5)
|
|> yLine(length = -5)
|
||||||
|> close()
|
|> close()
|
||||||
|
@ -137,7 +137,7 @@ async function doBasicSketch(
|
|||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
}
|
}
|
||||||
|
|
||||||
await page.getByRole('button', { name: 'Length: open menu' }).click()
|
await page.getByRole('button', { name: 'constraints: open menu' }).click()
|
||||||
await page.getByRole('button', { name: 'Equal Length' }).click()
|
await page.getByRole('button', { name: 'Equal Length' }).click()
|
||||||
|
|
||||||
// Open the code pane.
|
// Open the code pane.
|
||||||
|
@ -731,7 +731,7 @@ sketch_001 = startSketchOn(XY)
|
|||||||
|> close()
|
|> close()
|
||||||
|> extrude(length = 10)
|
|> extrude(length = 10)
|
||||||
|
|
||||||
sketch001 = startSketchOn(box, revolveAxis)
|
sketch001 = startSketchOn(box, face = revolveAxis)
|
||||||
|> startProfileAt([5, 10], %)
|
|> startProfileAt([5, 10], %)
|
||||||
|> line(end = [0, -10])
|
|> line(end = [0, -10])
|
||||||
|> line(end = [2, 0])
|
|> line(end = [2, 0])
|
||||||
@ -1144,7 +1144,7 @@ sketch001 = startSketchOn(XZ)
|
|||||||
)
|
)
|
||||||
|
|
||||||
test(
|
test(
|
||||||
`Can use the import stdlib function on a local OBJ file`,
|
`Can import a local OBJ file`,
|
||||||
{ tag: '@electron' },
|
{ tag: '@electron' },
|
||||||
async ({ page, context }, testInfo) => {
|
async ({ page, context }, testInfo) => {
|
||||||
test.fixme(orRunWhenFullSuiteEnabled())
|
test.fixme(orRunWhenFullSuiteEnabled())
|
||||||
@ -1194,7 +1194,7 @@ sketch001 = startSketchOn(XZ)
|
|||||||
.toBeLessThan(15)
|
.toBeLessThan(15)
|
||||||
})
|
})
|
||||||
await test.step(`Write the import function line`, async () => {
|
await test.step(`Write the import function line`, async () => {
|
||||||
await u.codeLocator.fill(`import('cube.obj')`)
|
await u.codeLocator.fill(`import 'cube.obj'\ncube`)
|
||||||
await page.waitForTimeout(800)
|
await page.waitForTimeout(800)
|
||||||
})
|
})
|
||||||
await test.step(`Reset the camera before checking`, async () => {
|
await test.step(`Reset the camera before checking`, async () => {
|
||||||
@ -1353,4 +1353,51 @@ sketch001 = startSketchOn(XZ)
|
|||||||
15
|
15
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test(`test-toolbar-buttons`, async ({
|
||||||
|
page,
|
||||||
|
homePage,
|
||||||
|
toolbar,
|
||||||
|
scene,
|
||||||
|
cmdBar,
|
||||||
|
}) => {
|
||||||
|
await test.step('Load an empty file', async () => {
|
||||||
|
await page.addInitScript(async () => {
|
||||||
|
localStorage.setItem('persistCode', '')
|
||||||
|
})
|
||||||
|
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||||
|
await homePage.goToModelingScene()
|
||||||
|
|
||||||
|
// wait until scene is ready to be interacted with
|
||||||
|
await scene.connectionEstablished()
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
})
|
||||||
|
|
||||||
|
await test.step('Test toolbar button correct selection', async () => {
|
||||||
|
await toolbar.expectToolbarMode.toBe('modeling')
|
||||||
|
|
||||||
|
await toolbar.startSketchPlaneSelection()
|
||||||
|
|
||||||
|
// Click on a default plane
|
||||||
|
await page.mouse.click(700, 200)
|
||||||
|
|
||||||
|
// tools cannot be selected immediately, couldn't find an event to await instead.
|
||||||
|
await page.waitForTimeout(1000)
|
||||||
|
|
||||||
|
await toolbar.selectCenterRectangle()
|
||||||
|
|
||||||
|
await expect(page.getByTestId('center-rectangle')).toHaveAttribute(
|
||||||
|
'aria-pressed',
|
||||||
|
'true'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
await test.step('Test Toolbar dropdown remembering last selection', async () => {
|
||||||
|
// Select another tool
|
||||||
|
await page.getByTestId('circle-center').click()
|
||||||
|
|
||||||
|
// center-rectangle should still be the active option in the rectangle dropdown
|
||||||
|
await expect(page.getByTestId('center-rectangle')).toBeVisible()
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -19,7 +19,7 @@ length001 = timesFive(1) * 5
|
|||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([20, 10], %)
|
|> startProfileAt([20, 10], %)
|
||||||
|> line(end = [10, 10])
|
|> line(end = [10, 10])
|
||||||
|> angledLine([-45, length001], %)
|
|> angledLine(angle = -45, length = length001)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
revolve001 = revolve(sketch001, axis = X)
|
revolve001 = revolve(sketch001, axis = X)
|
||||||
@ -38,19 +38,13 @@ extrude001 = extrude(sketch002, length = 10)
|
|||||||
|
|
||||||
const FEATURE_TREE_SKETCH_CODE = `sketch001 = startSketchOn(XZ)
|
const FEATURE_TREE_SKETCH_CODE = `sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine([0, 4], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 4, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2, tag = $rectangleSegmentB001)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|
||||||
2
|
|
||||||
], %, $rectangleSegmentB001)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $rectangleSegmentC001)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close(%)
|
|> close(%)
|
||||||
extrude001 = extrude(sketch001, length = 10)
|
extrude001 = extrude(sketch001, length = 10)
|
||||||
sketch002 = startSketchOn(extrude001, rectangleSegmentB001)
|
sketch002 = startSketchOn(extrude001, face = rectangleSegmentB001)
|
||||||
|> circle(
|
|> circle(
|
||||||
center = [-1, 2],
|
center = [-1, 2],
|
||||||
radius = .5
|
radius = .5
|
||||||
@ -200,7 +194,7 @@ test.describe('Feature Tree pane', () => {
|
|||||||
highlightedCode: '',
|
highlightedCode: '',
|
||||||
diagnostics: [],
|
diagnostics: [],
|
||||||
activeLines: [
|
activeLines: [
|
||||||
'sketch002=startSketchOn(extrude001,rectangleSegmentB001)',
|
'sketch002=startSketchOn(extrude001,face=rectangleSegmentB001)',
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
await toolbar.exitSketchBtn.click()
|
await toolbar.exitSketchBtn.click()
|
||||||
|
@ -99,7 +99,6 @@ export class HomePageFixture {
|
|||||||
createAndGoToProject = async (projectTitle = 'untitled') => {
|
createAndGoToProject = async (projectTitle = 'untitled') => {
|
||||||
await this.projectsLoaded()
|
await this.projectsLoaded()
|
||||||
await this.projectButtonNew.click()
|
await this.projectButtonNew.click()
|
||||||
await this.projectTextName.click()
|
|
||||||
await this.projectTextName.fill(projectTitle)
|
await this.projectTextName.fill(projectTitle)
|
||||||
await this.projectButtonContinue.click()
|
await this.projectButtonContinue.click()
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,9 @@ export class SceneFixture {
|
|||||||
constructor(page: Page) {
|
constructor(page: Page) {
|
||||||
this.page = page
|
this.page = page
|
||||||
this.streamWrapper = page.getByTestId('stream')
|
this.streamWrapper = page.getByTestId('stream')
|
||||||
this.networkToggleConnected = page.getByTestId('network-toggle-ok')
|
this.networkToggleConnected = page
|
||||||
|
.getByTestId('network-toggle-ok')
|
||||||
|
.or(page.getByTestId('network-toggle-other'))
|
||||||
this.startEditSketchBtn = page
|
this.startEditSketchBtn = page
|
||||||
.getByRole('button', { name: 'Start Sketch' })
|
.getByRole('button', { name: 'Start Sketch' })
|
||||||
.or(page.getByRole('button', { name: 'Edit Sketch' }))
|
.or(page.getByRole('button', { name: 'Edit Sketch' }))
|
||||||
@ -231,7 +233,7 @@ export class SceneFixture {
|
|||||||
settled = async (cmdBar: CmdBarFixture) => {
|
settled = async (cmdBar: CmdBarFixture) => {
|
||||||
const u = await getUtils(this.page)
|
const u = await getUtils(this.page)
|
||||||
|
|
||||||
await expect(this.startEditSketchBtn).not.toBeDisabled()
|
await expect(this.startEditSketchBtn).not.toBeDisabled({ timeout: 15_000 })
|
||||||
await expect(this.startEditSketchBtn).toBeVisible()
|
await expect(this.startEditSketchBtn).toBeVisible()
|
||||||
|
|
||||||
await cmdBar.openCmdBar()
|
await cmdBar.openCmdBar()
|
||||||
|
@ -169,7 +169,7 @@ export class ToolbarFixture {
|
|||||||
}
|
}
|
||||||
selectCenterRectangle = async () => {
|
selectCenterRectangle = async () => {
|
||||||
await this.page
|
await this.page
|
||||||
.getByRole('button', { name: 'caret down Corner rectangle:' })
|
.getByRole('button', { name: 'caret down rectangles:' })
|
||||||
.click()
|
.click()
|
||||||
await expect(
|
await expect(
|
||||||
this.page.getByTestId('dropdown-center-rectangle')
|
this.page.getByTestId('dropdown-center-rectangle')
|
||||||
@ -178,7 +178,7 @@ export class ToolbarFixture {
|
|||||||
}
|
}
|
||||||
selectBoolean = async (operation: 'union' | 'subtract' | 'intersect') => {
|
selectBoolean = async (operation: 'union' | 'subtract' | 'intersect') => {
|
||||||
await this.page
|
await this.page
|
||||||
.getByRole('button', { name: 'caret down Union: open menu' })
|
.getByRole('button', { name: 'caret down booleans: open menu' })
|
||||||
.click()
|
.click()
|
||||||
const operationTestId = `dropdown-boolean-${operation}`
|
const operationTestId = `dropdown-boolean-${operation}`
|
||||||
await expect(this.page.getByTestId(operationTestId)).toBeVisible()
|
await expect(this.page.getByTestId(operationTestId)).toBeVisible()
|
||||||
@ -186,25 +186,19 @@ export class ToolbarFixture {
|
|||||||
}
|
}
|
||||||
|
|
||||||
selectCircleThreePoint = async () => {
|
selectCircleThreePoint = async () => {
|
||||||
await this.page
|
await this.page.getByRole('button', { name: 'caret down circles:' }).click()
|
||||||
.getByRole('button', { name: 'caret down Center circle:' })
|
|
||||||
.click()
|
|
||||||
await expect(
|
await expect(
|
||||||
this.page.getByTestId('dropdown-circle-three-points')
|
this.page.getByTestId('dropdown-circle-three-points')
|
||||||
).toBeVisible()
|
).toBeVisible()
|
||||||
await this.page.getByTestId('dropdown-circle-three-points').click()
|
await this.page.getByTestId('dropdown-circle-three-points').click()
|
||||||
}
|
}
|
||||||
selectArc = async () => {
|
selectArc = async () => {
|
||||||
await this.page
|
await this.page.getByRole('button', { name: 'caret down arcs:' }).click()
|
||||||
.getByRole('button', { name: 'caret down Tangential Arc:' })
|
|
||||||
.click()
|
|
||||||
await expect(this.page.getByTestId('dropdown-arc')).toBeVisible()
|
await expect(this.page.getByTestId('dropdown-arc')).toBeVisible()
|
||||||
await this.page.getByTestId('dropdown-arc').click()
|
await this.page.getByTestId('dropdown-arc').click()
|
||||||
}
|
}
|
||||||
selectThreePointArc = async () => {
|
selectThreePointArc = async () => {
|
||||||
await this.page
|
await this.page.getByRole('button', { name: 'caret down arcs:' }).click()
|
||||||
.getByRole('button', { name: 'caret down Tangential Arc:' })
|
|
||||||
.click()
|
|
||||||
await expect(
|
await expect(
|
||||||
this.page.getByTestId('dropdown-three-point-arc')
|
this.page.getByTestId('dropdown-three-point-arc')
|
||||||
).toBeVisible()
|
).toBeVisible()
|
||||||
|
@ -21,15 +21,9 @@ test.describe('Import UI tests', () => {
|
|||||||
path.join(projectDir, 'toBeImported.kcl'),
|
path.join(projectDir, 'toBeImported.kcl'),
|
||||||
`sketch001 = startSketchOn(XZ)
|
`sketch001 = startSketchOn(XZ)
|
||||||
profile001 = startProfileAt([281.54, 305.81], sketch001)
|
profile001 = startProfileAt([281.54, 305.81], sketch001)
|
||||||
|> angledLine([0, 123.43], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 123.43, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 85.99)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
85.99
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude(profile001, length = 100)`
|
extrude(profile001, length = 100)`
|
||||||
@ -44,20 +38,14 @@ importedCube
|
|||||||
|
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
profile001 = startProfileAt([-134.53, -56.17], sketch001)
|
profile001 = startProfileAt([-134.53, -56.17], sketch001)
|
||||||
|> angledLine([0, 79.05], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 79.05, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 76.28)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $seg01)
|
||||||
76.28
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $seg01)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(profile001, length = 100)
|
extrude001 = extrude(profile001, length = 100)
|
||||||
sketch003 = startSketchOn(extrude001, seg02)
|
sketch003 = startSketchOn(extrude001, face = seg02)
|
||||||
sketch002 = startSketchOn(extrude001, seg01)`
|
sketch002 = startSketchOn(extrude001, face = seg01)`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@ function tomlStringOverWriteNamedViewUuids(toml: string): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
test.describe('Named view tests', () => {
|
test.describe('Named view tests', () => {
|
||||||
|
test.skip() // TODO: Jace is working on these
|
||||||
test('Verify project.toml is not created', async ({ page }, testInfo) => {
|
test('Verify project.toml is not created', async ({ page }, testInfo) => {
|
||||||
// Create project and load it
|
// Create project and load it
|
||||||
const projectName = 'named-views'
|
const projectName = 'named-views'
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
[settings]
|
||||||
|
modeling = { }
|
||||||
|
text_editor = { }
|
||||||
|
command_bar = { }
|
||||||
|
|
||||||
|
[settings.app.named_views.0656fb1a-9640-473e-b334-591dc70c0138]
|
||||||
|
name = "uuid1"
|
||||||
|
eye_offset = 1_378.0059
|
||||||
|
fov_y = 45
|
||||||
|
is_ortho = false
|
||||||
|
ortho_scale_enabled = true
|
||||||
|
ortho_scale_factor = 1.6
|
||||||
|
pivot_position = [ 0, 0, 0 ]
|
||||||
|
pivot_rotation = [ 0.5380994, 0.0, 0.0, 0.8428814 ]
|
||||||
|
world_coord_system = "right_handed_up_z"
|
||||||
|
version = 1
|
@ -0,0 +1,28 @@
|
|||||||
|
[settings]
|
||||||
|
modeling = { }
|
||||||
|
text_editor = { }
|
||||||
|
command_bar = { }
|
||||||
|
|
||||||
|
[settings.app.named_views.0656fb1a-9640-473e-b334-591dc70c0138]
|
||||||
|
name = "uuid1"
|
||||||
|
eye_offset = 1_378.0059
|
||||||
|
fov_y = 45
|
||||||
|
is_ortho = false
|
||||||
|
ortho_scale_enabled = true
|
||||||
|
ortho_scale_factor = 1.6
|
||||||
|
pivot_position = [ 0, 0, 0 ]
|
||||||
|
pivot_rotation = [ 0.5380994, 0.0, 0.0, 0.8428814 ]
|
||||||
|
world_coord_system = "right_handed_up_z"
|
||||||
|
version = 1
|
||||||
|
|
||||||
|
[settings.app.named_views.c810cf04-c6cc-4a4a-8b11-17bf445dcab7]
|
||||||
|
name = "uuid2"
|
||||||
|
eye_offset = 1_378.0059
|
||||||
|
fov_y = 45
|
||||||
|
is_ortho = false
|
||||||
|
ortho_scale_enabled = true
|
||||||
|
ortho_scale_factor = 1.6
|
||||||
|
pivot_position = [ 1_826.5239, 0.0, 0.0 ]
|
||||||
|
pivot_rotation = [ 0.5380994, 0.0, 0.0, 0.8428814 ]
|
||||||
|
world_coord_system = "right_handed_up_z"
|
||||||
|
version = 1
|
@ -7,6 +7,7 @@ import { expect, test } from '@e2e/playwright/zoo-test'
|
|||||||
* Test file menu actions that trigger something in the frontend
|
* Test file menu actions that trigger something in the frontend
|
||||||
*/
|
*/
|
||||||
test.describe('Native file menu', { tag: ['@electron'] }, () => {
|
test.describe('Native file menu', { tag: ['@electron'] }, () => {
|
||||||
|
test.skip() // TODO: Reimplement native file menu tests
|
||||||
test.describe('Home page', () => {
|
test.describe('Home page', () => {
|
||||||
test.describe('File role', () => {
|
test.describe('File role', () => {
|
||||||
test('Home.File.Create project', async ({ tronApp, cmdBar, page }) => {
|
test('Home.File.Create project', async ({ tronApp, cmdBar, page }) => {
|
||||||
|
@ -1,13 +1,47 @@
|
|||||||
import * as fsp from 'fs/promises'
|
import * as fsp from 'fs/promises'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
|
||||||
import { executorInputPath } from '@e2e/playwright/test-utils'
|
import type { CmdBarFixture } from '@e2e/playwright/fixtures/cmdBarFixture'
|
||||||
import { test } from '@e2e/playwright/zoo-test'
|
import type { ToolbarFixture } from '@e2e/playwright/fixtures/toolbarFixture'
|
||||||
|
import {
|
||||||
|
executorInputPath,
|
||||||
|
getUtils,
|
||||||
|
testsInputPath,
|
||||||
|
} from '@e2e/playwright/test-utils'
|
||||||
|
import { expect, test } from '@e2e/playwright/zoo-test'
|
||||||
|
import type { Page } from '@playwright/test'
|
||||||
|
|
||||||
|
async function insertPartIntoAssembly(
|
||||||
|
path: string,
|
||||||
|
alias: string,
|
||||||
|
toolbar: ToolbarFixture,
|
||||||
|
cmdBar: CmdBarFixture,
|
||||||
|
page: Page
|
||||||
|
) {
|
||||||
|
await toolbar.insertButton.click()
|
||||||
|
await cmdBar.selectOption({ name: path }).click()
|
||||||
|
await cmdBar.expectState({
|
||||||
|
stage: 'arguments',
|
||||||
|
currentArgKey: 'localName',
|
||||||
|
currentArgValue: '',
|
||||||
|
headerArguments: { Path: path, LocalName: '' },
|
||||||
|
highlightedHeaderArg: 'localName',
|
||||||
|
commandName: 'Insert',
|
||||||
|
})
|
||||||
|
await page.keyboard.insertText(alias)
|
||||||
|
await cmdBar.progressCmdBar()
|
||||||
|
await cmdBar.expectState({
|
||||||
|
stage: 'review',
|
||||||
|
headerArguments: { Path: path, LocalName: alias },
|
||||||
|
commandName: 'Insert',
|
||||||
|
})
|
||||||
|
await cmdBar.progressCmdBar()
|
||||||
|
}
|
||||||
|
|
||||||
// test file is for testing point an click code gen functionality that's assemblies related
|
// test file is for testing point an click code gen functionality that's assemblies related
|
||||||
test.describe('Point-and-click assemblies tests', () => {
|
test.describe('Point-and-click assemblies tests', () => {
|
||||||
test(
|
test(
|
||||||
`Insert kcl part into assembly as whole module import`,
|
`Insert kcl parts into assembly as whole module import`,
|
||||||
{ tag: ['@electron'] },
|
{ tag: ['@electron'] },
|
||||||
async ({
|
async ({
|
||||||
context,
|
context,
|
||||||
@ -23,11 +57,14 @@ test.describe('Point-and-click assemblies tests', () => {
|
|||||||
fail()
|
fail()
|
||||||
}
|
}
|
||||||
|
|
||||||
// One dumb hardcoded screen pixel value
|
const midPoint = { x: 500, y: 250 }
|
||||||
const testPoint = { x: 575, y: 200 }
|
const partPoint = { x: midPoint.x + 30, y: midPoint.y - 30 } // mid point, just off top right
|
||||||
const initialColor: [number, number, number] = [50, 50, 50]
|
const defaultPlanesColor: [number, number, number] = [180, 220, 180]
|
||||||
const partColor: [number, number, number] = [150, 150, 150]
|
const partColor: [number, number, number] = [100, 100, 100]
|
||||||
const tolerance = 50
|
const tolerance = 50
|
||||||
|
const u = await getUtils(page)
|
||||||
|
const gizmo = page.locator('[aria-label*=gizmo]')
|
||||||
|
const resetCameraButton = page.getByRole('button', { name: 'Reset view' })
|
||||||
|
|
||||||
await test.step('Setup parts and expect empty assembly scene', async () => {
|
await test.step('Setup parts and expect empty assembly scene', async () => {
|
||||||
const projectName = 'assembly'
|
const projectName = 'assembly'
|
||||||
@ -36,41 +73,36 @@ test.describe('Point-and-click assemblies tests', () => {
|
|||||||
await fsp.mkdir(bracketDir, { recursive: true })
|
await fsp.mkdir(bracketDir, { recursive: true })
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
fsp.copyFile(
|
fsp.copyFile(
|
||||||
executorInputPath('cylinder-inches.kcl'),
|
executorInputPath('cylinder.kcl'),
|
||||||
path.join(bracketDir, 'cylinder.kcl')
|
path.join(bracketDir, 'cylinder.kcl')
|
||||||
),
|
),
|
||||||
fsp.copyFile(
|
fsp.copyFile(
|
||||||
executorInputPath('e2e-can-sketch-on-chamfer.kcl'),
|
executorInputPath('e2e-can-sketch-on-chamfer.kcl'),
|
||||||
path.join(bracketDir, 'bracket.kcl')
|
path.join(bracketDir, 'bracket.kcl')
|
||||||
),
|
),
|
||||||
|
fsp.copyFile(
|
||||||
|
testsInputPath('cube.step'),
|
||||||
|
path.join(bracketDir, 'cube.step')
|
||||||
|
),
|
||||||
fsp.writeFile(path.join(bracketDir, 'main.kcl'), ''),
|
fsp.writeFile(path.join(bracketDir, 'main.kcl'), ''),
|
||||||
])
|
])
|
||||||
})
|
})
|
||||||
await page.setBodyDimensions({ width: 1000, height: 500 })
|
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||||
await homePage.openProject(projectName)
|
await homePage.openProject(projectName)
|
||||||
await scene.settled(cmdBar)
|
await scene.settled(cmdBar)
|
||||||
await scene.expectPixelColor(initialColor, testPoint, tolerance)
|
await toolbar.closePane('code')
|
||||||
|
await scene.expectPixelColor(defaultPlanesColor, midPoint, tolerance)
|
||||||
})
|
})
|
||||||
|
|
||||||
await test.step('Insert first part into the assembly', async () => {
|
await test.step('Insert kcl as first part as module', async () => {
|
||||||
await toolbar.insertButton.click()
|
await insertPartIntoAssembly(
|
||||||
await cmdBar.selectOption({ name: 'cylinder.kcl' }).click()
|
'cylinder.kcl',
|
||||||
await cmdBar.expectState({
|
'cylinder',
|
||||||
stage: 'arguments',
|
toolbar,
|
||||||
currentArgKey: 'localName',
|
cmdBar,
|
||||||
currentArgValue: '',
|
page
|
||||||
headerArguments: { Path: 'cylinder.kcl', LocalName: '' },
|
)
|
||||||
highlightedHeaderArg: 'localName',
|
await toolbar.openPane('code')
|
||||||
commandName: 'Insert',
|
|
||||||
})
|
|
||||||
await page.keyboard.insertText('cylinder')
|
|
||||||
await cmdBar.progressCmdBar()
|
|
||||||
await cmdBar.expectState({
|
|
||||||
stage: 'review',
|
|
||||||
headerArguments: { Path: 'cylinder.kcl', LocalName: 'cylinder' },
|
|
||||||
commandName: 'Insert',
|
|
||||||
})
|
|
||||||
await cmdBar.progressCmdBar()
|
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`
|
`
|
||||||
import "cylinder.kcl" as cylinder
|
import "cylinder.kcl" as cylinder
|
||||||
@ -78,28 +110,27 @@ test.describe('Point-and-click assemblies tests', () => {
|
|||||||
`,
|
`,
|
||||||
{ shouldNormalise: true }
|
{ shouldNormalise: true }
|
||||||
)
|
)
|
||||||
await scene.expectPixelColor(partColor, testPoint, tolerance)
|
await scene.settled(cmdBar)
|
||||||
|
|
||||||
|
// Check scene for changes
|
||||||
|
await toolbar.closePane('code')
|
||||||
|
await u.doAndWaitForCmd(async () => {
|
||||||
|
await gizmo.click({ button: 'right' })
|
||||||
|
await resetCameraButton.click()
|
||||||
|
}, 'zoom_to_fit')
|
||||||
|
await toolbar.closePane('debug')
|
||||||
|
await scene.expectPixelColor(partColor, partPoint, tolerance)
|
||||||
|
await toolbar.openPane('code')
|
||||||
})
|
})
|
||||||
|
|
||||||
await test.step('Insert second part into the assembly', async () => {
|
await test.step('Insert kcl second part as module', async () => {
|
||||||
await toolbar.insertButton.click()
|
await insertPartIntoAssembly(
|
||||||
await cmdBar.selectOption({ name: 'bracket.kcl' }).click()
|
'bracket.kcl',
|
||||||
await cmdBar.expectState({
|
'bracket',
|
||||||
stage: 'arguments',
|
toolbar,
|
||||||
currentArgKey: 'localName',
|
cmdBar,
|
||||||
currentArgValue: '',
|
page
|
||||||
headerArguments: { Path: 'bracket.kcl', LocalName: '' },
|
)
|
||||||
highlightedHeaderArg: 'localName',
|
|
||||||
commandName: 'Insert',
|
|
||||||
})
|
|
||||||
await page.keyboard.insertText('bracket')
|
|
||||||
await cmdBar.progressCmdBar()
|
|
||||||
await cmdBar.expectState({
|
|
||||||
stage: 'review',
|
|
||||||
headerArguments: { Path: 'bracket.kcl', LocalName: 'bracket' },
|
|
||||||
commandName: 'Insert',
|
|
||||||
})
|
|
||||||
await cmdBar.progressCmdBar()
|
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`
|
`
|
||||||
import "cylinder.kcl" as cylinder
|
import "cylinder.kcl" as cylinder
|
||||||
@ -109,6 +140,152 @@ test.describe('Point-and-click assemblies tests', () => {
|
|||||||
`,
|
`,
|
||||||
{ shouldNormalise: true }
|
{ shouldNormalise: true }
|
||||||
)
|
)
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
})
|
||||||
|
|
||||||
|
await test.step('Insert a second time and expect error', async () => {
|
||||||
|
// TODO: revisit once we have clone with #6209
|
||||||
|
await insertPartIntoAssembly(
|
||||||
|
'bracket.kcl',
|
||||||
|
'bracket',
|
||||||
|
toolbar,
|
||||||
|
cmdBar,
|
||||||
|
page
|
||||||
|
)
|
||||||
|
await editor.expectEditor.toContain(
|
||||||
|
`
|
||||||
|
import "cylinder.kcl" as cylinder
|
||||||
|
import "bracket.kcl" as bracket
|
||||||
|
import "bracket.kcl" as bracket
|
||||||
|
cylinder
|
||||||
|
bracket
|
||||||
|
bracket
|
||||||
|
`,
|
||||||
|
{ shouldNormalise: true }
|
||||||
|
)
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).toBeVisible()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
test(
|
||||||
|
`Insert foreign parts into assembly as whole module import`,
|
||||||
|
{ tag: ['@electron'] },
|
||||||
|
async ({
|
||||||
|
context,
|
||||||
|
page,
|
||||||
|
homePage,
|
||||||
|
scene,
|
||||||
|
editor,
|
||||||
|
toolbar,
|
||||||
|
cmdBar,
|
||||||
|
tronApp,
|
||||||
|
}) => {
|
||||||
|
if (!tronApp) {
|
||||||
|
fail()
|
||||||
|
}
|
||||||
|
|
||||||
|
const midPoint = { x: 500, y: 250 }
|
||||||
|
const partPoint = { x: midPoint.x + 30, y: midPoint.y - 30 } // mid point, just off top right
|
||||||
|
const defaultPlanesColor: [number, number, number] = [180, 220, 180]
|
||||||
|
const partColor: [number, number, number] = [150, 150, 150]
|
||||||
|
const tolerance = 50
|
||||||
|
|
||||||
|
const complexPlmFileName = 'cube_Complex-PLM_Name_-001.sldprt'
|
||||||
|
const camelCasedSolidworksFileName = 'cubeComplexPLMName001'
|
||||||
|
|
||||||
|
await test.step('Setup parts and expect empty assembly scene', async () => {
|
||||||
|
const projectName = 'assembly'
|
||||||
|
await context.folderSetupFn(async (dir) => {
|
||||||
|
const bracketDir = path.join(dir, projectName)
|
||||||
|
await fsp.mkdir(bracketDir, { recursive: true })
|
||||||
|
await Promise.all([
|
||||||
|
fsp.copyFile(
|
||||||
|
testsInputPath('cube.step'),
|
||||||
|
path.join(bracketDir, 'cube.step')
|
||||||
|
),
|
||||||
|
fsp.copyFile(
|
||||||
|
testsInputPath('cube.sldprt'),
|
||||||
|
path.join(bracketDir, complexPlmFileName)
|
||||||
|
),
|
||||||
|
fsp.writeFile(path.join(bracketDir, 'main.kcl'), ''),
|
||||||
|
])
|
||||||
|
})
|
||||||
|
await page.setBodyDimensions({ width: 1000, height: 500 })
|
||||||
|
await homePage.openProject(projectName)
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
await toolbar.closePane('code')
|
||||||
|
await scene.expectPixelColor(defaultPlanesColor, midPoint, tolerance)
|
||||||
|
})
|
||||||
|
|
||||||
|
await test.step('Insert step part as module', async () => {
|
||||||
|
await insertPartIntoAssembly('cube.step', 'cube', toolbar, cmdBar, page)
|
||||||
|
await toolbar.openPane('code')
|
||||||
|
await editor.expectEditor.toContain(
|
||||||
|
`
|
||||||
|
import "cube.step" as cube
|
||||||
|
cube
|
||||||
|
`,
|
||||||
|
{ shouldNormalise: true }
|
||||||
|
)
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
|
||||||
|
// TODO: remove this once #5780 is fixed
|
||||||
|
await page.reload()
|
||||||
|
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||||
|
await toolbar.closePane('code')
|
||||||
|
await scene.expectPixelColor(partColor, partPoint, tolerance)
|
||||||
|
})
|
||||||
|
|
||||||
|
await test.step('Insert second step part by clicking', async () => {
|
||||||
|
await toolbar.openPane('files')
|
||||||
|
await toolbar.expectFileTreeState([
|
||||||
|
complexPlmFileName,
|
||||||
|
'cube.step',
|
||||||
|
'main.kcl',
|
||||||
|
])
|
||||||
|
await toolbar.openFile(complexPlmFileName)
|
||||||
|
|
||||||
|
// Go through the ToastInsert prompt
|
||||||
|
await page.getByText('Insert into my current file').click()
|
||||||
|
|
||||||
|
// Check getPathFilenameInVariableCase output
|
||||||
|
const parsedValueFromFile =
|
||||||
|
await cmdBar.currentArgumentInput.inputValue()
|
||||||
|
expect(parsedValueFromFile).toEqual(camelCasedSolidworksFileName)
|
||||||
|
|
||||||
|
// Continue on with the flow
|
||||||
|
await page.keyboard.insertText('cubeSw')
|
||||||
|
await cmdBar.progressCmdBar()
|
||||||
|
await cmdBar.expectState({
|
||||||
|
stage: 'review',
|
||||||
|
headerArguments: { Path: complexPlmFileName, LocalName: 'cubeSw' },
|
||||||
|
commandName: 'Insert',
|
||||||
|
})
|
||||||
|
await cmdBar.progressCmdBar()
|
||||||
|
await toolbar.closePane('files')
|
||||||
|
await toolbar.openPane('code')
|
||||||
|
await editor.expectEditor.toContain(
|
||||||
|
`
|
||||||
|
import "cube.step" as cube
|
||||||
|
import "${complexPlmFileName}" as cubeSw
|
||||||
|
cube
|
||||||
|
cubeSw
|
||||||
|
`,
|
||||||
|
{ shouldNormalise: true }
|
||||||
|
)
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
|
||||||
|
// TODO: remove this once #5780 is fixed
|
||||||
|
await page.reload()
|
||||||
|
await scene.settled(cmdBar)
|
||||||
|
|
||||||
|
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||||
|
await toolbar.closePane('code')
|
||||||
|
await scene.expectPixelColor(partColor, partPoint, tolerance)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -210,7 +210,7 @@ test.describe('Point-and-click tests', () => {
|
|||||||
clickCoords: { x: 570, y: 220 },
|
clickCoords: { x: 570, y: 220 },
|
||||||
cameraPos: { x: 16020, y: -2000, z: 10500 },
|
cameraPos: { x: 16020, y: -2000, z: 10500 },
|
||||||
cameraTarget: { x: -150, y: -4500, z: -80 },
|
cameraTarget: { x: -150, y: -4500, z: -80 },
|
||||||
beforeChamferSnippet: `angledLine([segAng(rectangleSegmentA001)-90,217.26],%,$seg01)
|
beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90,length=217.26,tag=$seg01)
|
||||||
chamfer(length = 30,tags = [
|
chamfer(length = 30,tags = [
|
||||||
seg01,
|
seg01,
|
||||||
getNextAdjacentEdge(yo),
|
getNextAdjacentEdge(yo),
|
||||||
@ -220,12 +220,12 @@ test.describe('Point-and-click tests', () => {
|
|||||||
)`,
|
)`,
|
||||||
|
|
||||||
afterChamferSelectSnippet:
|
afterChamferSelectSnippet:
|
||||||
'sketch002 = startSketchOn(extrude001, seg03)',
|
'sketch002 = startSketchOn(extrude001, face = seg03)',
|
||||||
afterRectangle1stClickSnippet:
|
afterRectangle1stClickSnippet:
|
||||||
'startProfileAt([205.96, 254.59], sketch002)',
|
'startProfileAt([205.96, 254.59], sketch002)',
|
||||||
afterRectangle2ndClickSnippet: `angledLine([0,11.39],%,$rectangleSegmentA002)
|
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002)
|
||||||
|>angledLine([segAng(rectangleSegmentA002)-90,105.26],%)
|
|>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26)
|
||||||
|>angledLine([segAng(rectangleSegmentA002),-segLen(rectangleSegmentA002)],%)
|
|>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002))
|
||||||
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
||||||
|>close()`,
|
|>close()`,
|
||||||
})
|
})
|
||||||
@ -234,10 +234,7 @@ test.describe('Point-and-click tests', () => {
|
|||||||
clickCoords: { x: 690, y: 250 },
|
clickCoords: { x: 690, y: 250 },
|
||||||
cameraPos: { x: 16020, y: -2000, z: 10500 },
|
cameraPos: { x: 16020, y: -2000, z: 10500 },
|
||||||
cameraTarget: { x: -150, y: -4500, z: -80 },
|
cameraTarget: { x: -150, y: -4500, z: -80 },
|
||||||
beforeChamferSnippet: `angledLine([
|
beforeChamferSnippet: `angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01)chamfer(
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|
||||||
217.26
|
|
||||||
], %, $seg01)chamfer(
|
|
||||||
length = 30,
|
length = 30,
|
||||||
tags = [
|
tags = [
|
||||||
seg01,
|
seg01,
|
||||||
@ -247,12 +244,12 @@ test.describe('Point-and-click tests', () => {
|
|||||||
)`,
|
)`,
|
||||||
|
|
||||||
afterChamferSelectSnippet:
|
afterChamferSelectSnippet:
|
||||||
'sketch003 = startSketchOn(extrude001, seg04)',
|
'sketch003 = startSketchOn(extrude001, face = seg04)',
|
||||||
afterRectangle1stClickSnippet:
|
afterRectangle1stClickSnippet:
|
||||||
'startProfileAt([-209.64, 255.28], sketch003)',
|
'startProfileAt([-209.64, 255.28], sketch003)',
|
||||||
afterRectangle2ndClickSnippet: `angledLine([0,11.56],%,$rectangleSegmentA003)
|
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.56,tag=$rectangleSegmentA003)
|
||||||
|>angledLine([segAng(rectangleSegmentA003)-90,106.84],%)
|
|>angledLine(angle=segAng(rectangleSegmentA003)-90,length=106.84)
|
||||||
|>angledLine([segAng(rectangleSegmentA003),-segLen(rectangleSegmentA003)],%)
|
|>angledLine(angle=segAng(rectangleSegmentA003),length=-segLen(rectangleSegmentA003))
|
||||||
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
||||||
|>close()`,
|
|>close()`,
|
||||||
})
|
})
|
||||||
@ -261,7 +258,7 @@ test.describe('Point-and-click tests', () => {
|
|||||||
clickCoords: { x: 677, y: 87 },
|
clickCoords: { x: 677, y: 87 },
|
||||||
cameraPos: { x: -6200, y: 1500, z: 6200 },
|
cameraPos: { x: -6200, y: 1500, z: 6200 },
|
||||||
cameraTarget: { x: 8300, y: 1100, z: 4800 },
|
cameraTarget: { x: 8300, y: 1100, z: 4800 },
|
||||||
beforeChamferSnippet: `angledLine([0, 268.43], %, $rectangleSegmentA001)chamfer(
|
beforeChamferSnippet: `angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001)chamfer(
|
||||||
length = 30,
|
length = 30,
|
||||||
tags = [
|
tags = [
|
||||||
getNextAdjacentEdge(yo),
|
getNextAdjacentEdge(yo),
|
||||||
@ -269,12 +266,12 @@ test.describe('Point-and-click tests', () => {
|
|||||||
]
|
]
|
||||||
)`,
|
)`,
|
||||||
afterChamferSelectSnippet:
|
afterChamferSelectSnippet:
|
||||||
'sketch004 = startSketchOn(extrude001, seg05)',
|
'sketch004 = startSketchOn(extrude001, face = seg05)',
|
||||||
afterRectangle1stClickSnippet:
|
afterRectangle1stClickSnippet:
|
||||||
'startProfileAt([82.57, 322.96], sketch004)',
|
'startProfileAt([82.57, 322.96], sketch004)',
|
||||||
afterRectangle2ndClickSnippet: `angledLine([0,11.16],%,$rectangleSegmentA004)
|
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.16,tag=$rectangleSegmentA004)
|
||||||
|>angledLine([segAng(rectangleSegmentA004)-90,103.07],%)
|
|>angledLine(angle=segAng(rectangleSegmentA004)-90,length=103.07)
|
||||||
|>angledLine([segAng(rectangleSegmentA004),-segLen(rectangleSegmentA004)],%)
|
|>angledLine(angle=segAng(rectangleSegmentA004),length=-segLen(rectangleSegmentA004))
|
||||||
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
||||||
|>close()`,
|
|>close()`,
|
||||||
})
|
})
|
||||||
@ -287,12 +284,12 @@ test.describe('Point-and-click tests', () => {
|
|||||||
beforeChamferSnippetEnd:
|
beforeChamferSnippetEnd:
|
||||||
'|> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)])',
|
'|> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)])',
|
||||||
afterChamferSelectSnippet:
|
afterChamferSelectSnippet:
|
||||||
'sketch005 = startSketchOn(extrude001, seg06)',
|
'sketch005 = startSketchOn(extrude001, face = seg06)',
|
||||||
afterRectangle1stClickSnippet:
|
afterRectangle1stClickSnippet:
|
||||||
'startProfileAt([-23.43, 19.69], sketch005)',
|
'startProfileAt([-23.43, 19.69], sketch005)',
|
||||||
afterRectangle2ndClickSnippet: `angledLine([0,9.1],%,$rectangleSegmentA005)
|
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=9.1,tag=$rectangleSegmentA005)
|
||||||
|>angledLine([segAng(rectangleSegmentA005)-90,84.07],%)
|
|>angledLine(angle=segAng(rectangleSegmentA005)-90,length=84.07)
|
||||||
|>angledLine([segAng(rectangleSegmentA005),-segLen(rectangleSegmentA005)],%)
|
|>angledLine(angle=segAng(rectangleSegmentA005),length=-segLen(rectangleSegmentA005))
|
||||||
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
||||||
|>close()`,
|
|>close()`,
|
||||||
})
|
})
|
||||||
@ -302,15 +299,9 @@ test.describe('Point-and-click tests', () => {
|
|||||||
`@settings(defaultLengthUnit = in)
|
`@settings(defaultLengthUnit = in)
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag]
|
|> startProfileAt([75.8, 317.2], %) // [$startCapTag, $EndCapTag]
|
||||||
|> angledLine([0, 268.43], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo)
|
||||||
217.26
|
|
||||||
], %, $seg01)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $yo)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(sketch001, length = 100)
|
extrude001 = extrude(sketch001, length = 100)
|
||||||
@ -318,50 +309,32 @@ extrude001 = extrude(sketch001, length = 100)
|
|||||||
|> chamfer(length = 30, tags = [seg01], tag = $seg04)
|
|> chamfer(length = 30, tags = [seg01], tag = $seg04)
|
||||||
|> chamfer(length = 30, tags = [getNextAdjacentEdge(seg02)], tag = $seg05)
|
|> chamfer(length = 30, tags = [getNextAdjacentEdge(seg02)], tag = $seg05)
|
||||||
|> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06)
|
|> chamfer(length = 30, tags = [getNextAdjacentEdge(yo)], tag = $seg06)
|
||||||
sketch005 = startSketchOn(extrude001, seg06)
|
sketch005 = startSketchOn(extrude001, face = seg06)
|
||||||
profile004=startProfileAt([-23.43,19.69], sketch005)
|
profile004=startProfileAt([-23.43,19.69], sketch005)
|
||||||
|> angledLine([0, 9.1], %, $rectangleSegmentA005)
|
|> angledLine(angle = 0, length = 9.1, tag = $rectangleSegmentA005)
|
||||||
|> angledLine([segAng(rectangleSegmentA005) - 90, 84.07], %)
|
|> angledLine(angle = segAng(rectangleSegmentA005) - 90, length = 84.07)
|
||||||
|> angledLine([segAng(rectangleSegmentA005), -segLen(rectangleSegmentA005)], %)
|
|> angledLine(angle = segAng(rectangleSegmentA005), length = -segLen(rectangleSegmentA005))
|
||||||
|> line(endAbsolute=[profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute=[profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
sketch004 = startSketchOn(extrude001, seg05)
|
sketch004 = startSketchOn(extrude001, face = seg05)
|
||||||
profile003 = startProfileAt([82.57, 322.96], sketch004)
|
profile003 = startProfileAt([82.57, 322.96], sketch004)
|
||||||
|> angledLine([0, 11.16], %, $rectangleSegmentA004)
|
|> angledLine(angle = 0, length = 11.16, tag = $rectangleSegmentA004)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA004) - 90, length = 103.07)
|
||||||
segAng(rectangleSegmentA004) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004))
|
||||||
103.07
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA004),
|
|
||||||
-segLen(rectangleSegmentA004)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
sketch003 = startSketchOn(extrude001, seg04)
|
sketch003 = startSketchOn(extrude001, face = seg04)
|
||||||
profile002 = startProfileAt([-209.64, 255.28], sketch003)
|
profile002 = startProfileAt([-209.64, 255.28], sketch003)
|
||||||
|> angledLine([0, 11.56], %, $rectangleSegmentA003)
|
|> angledLine(angle = 0, length = 11.56, tag = $rectangleSegmentA003)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA003) - 90, length = 106.84)
|
||||||
segAng(rectangleSegmentA003) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003))
|
||||||
106.84
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA003),
|
|
||||||
-segLen(rectangleSegmentA003)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
sketch002 = startSketchOn(extrude001, seg03)
|
sketch002 = startSketchOn(extrude001, face = seg03)
|
||||||
profile001 = startProfileAt([205.96, 254.59], sketch002)
|
profile001 = startProfileAt([205.96, 254.59], sketch002)
|
||||||
|> angledLine([0, 11.39], %, $rectangleSegmentA002)
|
|> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26)
|
||||||
segAng(rectangleSegmentA002) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|
||||||
105.26
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA002),
|
|
||||||
-segLen(rectangleSegmentA002)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
`,
|
`,
|
||||||
@ -401,7 +374,7 @@ profile001 = startProfileAt([205.96, 254.59], sketch002)
|
|||||||
clickCoords: { x: 570, y: 220 },
|
clickCoords: { x: 570, y: 220 },
|
||||||
cameraPos: { x: 16020, y: -2000, z: 10500 },
|
cameraPos: { x: 16020, y: -2000, z: 10500 },
|
||||||
cameraTarget: { x: -150, y: -4500, z: -80 },
|
cameraTarget: { x: -150, y: -4500, z: -80 },
|
||||||
beforeChamferSnippet: `angledLine([segAng(rectangleSegmentA001)-90,217.26],%,$seg01)
|
beforeChamferSnippet: `angledLine(angle=segAng(rectangleSegmentA001)-90,length=217.26,tag=$seg01)
|
||||||
chamfer(extrude001,length=30,tags=[
|
chamfer(extrude001,length=30,tags=[
|
||||||
seg01,
|
seg01,
|
||||||
getNextAdjacentEdge(yo),
|
getNextAdjacentEdge(yo),
|
||||||
@ -410,12 +383,12 @@ profile001 = startProfileAt([205.96, 254.59], sketch002)
|
|||||||
])`,
|
])`,
|
||||||
beforeChamferSnippetEnd: ')',
|
beforeChamferSnippetEnd: ')',
|
||||||
afterChamferSelectSnippet:
|
afterChamferSelectSnippet:
|
||||||
'sketch002 = startSketchOn(extrude001, seg03)',
|
'sketch002 = startSketchOn(extrude001, face = seg03)',
|
||||||
afterRectangle1stClickSnippet:
|
afterRectangle1stClickSnippet:
|
||||||
'startProfileAt([205.96, 254.59], sketch002)',
|
'startProfileAt([205.96, 254.59], sketch002)',
|
||||||
afterRectangle2ndClickSnippet: `angledLine([0,11.39],%,$rectangleSegmentA002)
|
afterRectangle2ndClickSnippet: `angledLine(angle=0,length=11.39,tag=$rectangleSegmentA002)
|
||||||
|>angledLine([segAng(rectangleSegmentA002)-90,105.26],%)
|
|>angledLine(angle=segAng(rectangleSegmentA002)-90,length=105.26)
|
||||||
|>angledLine([segAng(rectangleSegmentA002),-segLen(rectangleSegmentA002)],%)
|
|>angledLine(angle=segAng(rectangleSegmentA002),length=-segLen(rectangleSegmentA002))
|
||||||
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
|>line(endAbsolute=[profileStartX(%),profileStartY(%)])
|
||||||
|>close()`,
|
|>close()`,
|
||||||
})
|
})
|
||||||
@ -423,15 +396,9 @@ profile001 = startProfileAt([205.96, 254.59], sketch002)
|
|||||||
`@settings(defaultLengthUnit = in)
|
`@settings(defaultLengthUnit = in)
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([75.8, 317.2], %)
|
|> startProfileAt([75.8, 317.2], %)
|
||||||
|> angledLine([0, 268.43], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 268.43, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 217.26, tag = $seg01)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $yo)
|
||||||
217.26
|
|
||||||
], %, $seg01)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $yo)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg02)
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(sketch001, length = 100)
|
extrude001 = extrude(sketch001, length = 100)
|
||||||
@ -449,17 +416,11 @@ chamf = chamfer(
|
|||||||
getNextAdjacentEdge(seg02)
|
getNextAdjacentEdge(seg02)
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
sketch002 = startSketchOn(extrude001, seg03)
|
sketch002 = startSketchOn(extrude001, face = seg03)
|
||||||
profile001 = startProfileAt([205.96, 254.59], sketch002)
|
profile001 = startProfileAt([205.96, 254.59], sketch002)
|
||||||
|> angledLine([0, 11.39], %, $rectangleSegmentA002)
|
|> angledLine(angle = 0, length = 11.39, tag = $rectangleSegmentA002)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 105.26)
|
||||||
segAng(rectangleSegmentA002) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|
||||||
105.26
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA002),
|
|
||||||
-segLen(rectangleSegmentA002)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
`,
|
`,
|
||||||
@ -1671,15 +1632,9 @@ sketch002 = startSketchOn(XZ)
|
|||||||
initialCode: `@settings(defaultLengthUnit = in)
|
initialCode: `@settings(defaultLengthUnit = in)
|
||||||
sketch001 = startSketchOn(YZ)
|
sketch001 = startSketchOn(YZ)
|
||||||
profile001 = startProfileAt([-400, -400], sketch001)
|
profile001 = startProfileAt([-400, -400], sketch001)
|
||||||
|> angledLine([0, 800], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 800, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = 800)
|
||||||
segAng(rectangleSegmentA001) + 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
800
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
sketch002 = startSketchOn(XZ)
|
sketch002 = startSketchOn(XZ)
|
||||||
@ -3233,7 +3188,7 @@ sketch001 = startSketchOn(XZ)
|
|||||||
|> circle(center = [0, 0], radius = 100)
|
|> circle(center = [0, 0], radius = 100)
|
||||||
|> extrude(length = 100)
|
|> extrude(length = 100)
|
||||||
|
|
||||||
sketch002 = startSketchOn(sketch001, 'END')
|
sketch002 = startSketchOn(sketch001, face = 'END')
|
||||||
|> circle(center = [0, 0], radius = 50)
|
|> circle(center = [0, 0], radius = 50)
|
||||||
|> extrude(length = 50)
|
|> extrude(length = 50)
|
||||||
`,
|
`,
|
||||||
@ -3242,7 +3197,7 @@ sketch001 = startSketchOn(XZ)
|
|||||||
|> circle(center = [0, 0], radius = 100)
|
|> circle(center = [0, 0], radius = 100)
|
||||||
extrude001 = extrude(sketch001, length = 100)
|
extrude001 = extrude(sketch001, length = 100)
|
||||||
|
|
||||||
sketch002 = startSketchOn(extrude001, 'END')
|
sketch002 = startSketchOn(extrude001, face = 'END')
|
||||||
|> circle(center = [0, 0], radius = 50)
|
|> circle(center = [0, 0], radius = 50)
|
||||||
extrude002 = extrude(sketch002, length = 50)
|
extrude002 = extrude(sketch002, length = 50)
|
||||||
`,
|
`,
|
||||||
@ -3482,26 +3437,29 @@ sweep001 = sweep(sketch001, path = sketch002)
|
|||||||
const initialCode = `
|
const initialCode = `
|
||||||
sketch001 = startSketchOn(XZ)
|
sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([-100.0, 100.0], %)
|
|> startProfileAt([-100.0, 100.0], %)
|
||||||
|> angledLine([0, 200.0], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 200.0, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([segAng(rectangleSegmentA001) - 90, 200], %, $rectangleSegmentB001)
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 200, tag = $rectangleSegmentB001)
|
||||||
|> angledLine([
|
|> angledLine(
|
||||||
segAng(rectangleSegmentA001),
|
angle=segAng(rectangleSegmentA001),
|
||||||
-segLen(rectangleSegmentA001)
|
length=-segLen(rectangleSegmentA001),
|
||||||
], %, $rectangleSegmentC001)
|
tag=$rectangleSegmentC001,
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(sketch001, length = 200)
|
extrude001 = extrude(sketch001, length = 200)
|
||||||
sketch002 = startSketchOn(extrude001, rectangleSegmentA001)
|
sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
|
||||||
|> startProfileAt([-66.77, 84.81], %)
|
|> startProfileAt([-66.77, 84.81], %)
|
||||||
|> angledLine([180, 27.08], %, $rectangleSegmentA002)
|
|> angledLine(angle = 180, length = 27.08, tag = $rectangleSegmentA002)
|
||||||
|> angledLine([
|
|> angledLine(
|
||||||
segAng(rectangleSegmentA002) - 90,
|
angle=segAng(rectangleSegmentA002) - 90,
|
||||||
27.8
|
length=27.8,
|
||||||
], %, $rectangleSegmentB002)
|
tag=$rectangleSegmentB002,
|
||||||
|> angledLine([
|
)
|
||||||
segAng(rectangleSegmentA002),
|
|> angledLine(
|
||||||
-segLen(rectangleSegmentA002)
|
angle=segAng(rectangleSegmentA002),
|
||||||
], %, $rectangleSegmentC002)
|
length=-segLen(rectangleSegmentA002),
|
||||||
|
tag=$rectangleSegmentC002,
|
||||||
|
)
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
`
|
`
|
||||||
@ -3571,20 +3529,15 @@ segAng(rectangleSegmentA002),
|
|||||||
}) => {
|
}) => {
|
||||||
const initialCode = `sketch001 = startSketchOn(XZ)
|
const initialCode = `sketch001 = startSketchOn(XZ)
|
||||||
|> startProfileAt([-102.57, 101.72], %)
|
|> startProfileAt([-102.57, 101.72], %)
|
||||||
|> angledLine([0, 202.6], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 202.6, tag = $rectangleSegmentB001)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|
||||||
202.6
|
|
||||||
], %, $rectangleSegmentB001)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $rectangleSegmentC001)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(sketch001, length = 50)
|
extrude001 = extrude(sketch001, length = 50)
|
||||||
sketch002 = startSketchOn(extrude001, rectangleSegmentA001)
|
sketch002 = startSketchOn(extrude001, face = rectangleSegmentA001)
|
||||||
|> circle(center = [-11.34, 10.0], radius = 8.69)
|
|> circle(center = [-11.34, 10.0], radius = 8.69)
|
||||||
|
|
||||||
`
|
`
|
||||||
await context.addInitScript((initialCode) => {
|
await context.addInitScript((initialCode) => {
|
||||||
localStorage.setItem('persistCode', initialCode)
|
localStorage.setItem('persistCode', initialCode)
|
||||||
@ -3601,7 +3554,7 @@ sketch002 = startSketchOn(extrude001, rectangleSegmentA001)
|
|||||||
await page.getByText(codeToSelection).click()
|
await page.getByText(codeToSelection).click()
|
||||||
await toolbar.revolveButton.click()
|
await toolbar.revolveButton.click()
|
||||||
await page.getByText('Edge', { exact: true }).click()
|
await page.getByText('Edge', { exact: true }).click()
|
||||||
const lineCodeToSelection = `angledLine([0, 202.6], %, $rectangleSegmentA001)`
|
const lineCodeToSelection = `angledLine(angle = 0, length = 202.6, tag = $rectangleSegmentA001)`
|
||||||
await page.getByText(lineCodeToSelection).click()
|
await page.getByText(lineCodeToSelection).click()
|
||||||
await cmdBar.progressCmdBar()
|
await cmdBar.progressCmdBar()
|
||||||
await cmdBar.progressCmdBar()
|
await cmdBar.progressCmdBar()
|
||||||
@ -3658,22 +3611,23 @@ sketch002 = startSketchOn(extrude001, rectangleSegmentA001)
|
|||||||
toolbar,
|
toolbar,
|
||||||
cmdBar,
|
cmdBar,
|
||||||
}) => {
|
}) => {
|
||||||
const initialCode = `sketch002 = startSketchOn(XY)
|
const initialCode = `
|
||||||
|> startProfileAt([-2.02, 1.79], %)
|
sketch002 = startSketchOn(XY)
|
||||||
|> xLine(length = 2.6)
|
|> startProfileAt([-2.02, 1.79], %)
|
||||||
sketch001 = startSketchOn(-XY)
|
|> xLine(length = 2.6)
|
||||||
|> startProfileAt([-0.48, 1.25], %)
|
sketch001 = startSketchOn('-XY')
|
||||||
|> angledLine([0, 2.38], %, $rectangleSegmentA001)
|
|> startProfileAt([-0.48, 1.25], %)
|
||||||
|> angledLine([segAng(rectangleSegmentA001) - 90, 2.4], %, $rectangleSegmentB001)
|
|> angledLine(angle = 0, length = 2.38, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.4, tag = $rectangleSegmentB001)
|
||||||
segAng(rectangleSegmentA001),
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|
||||||
-segLen(rectangleSegmentA001)
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
], %, $rectangleSegmentC001)
|
|> close()
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
extrude001 = extrude(sketch001, length = 5)
|
||||||
|> close()
|
sketch003 = startSketchOn(extrude001, face = 'START')
|
||||||
extrude001 = extrude(sketch001, length = 5)
|
|> circle(
|
||||||
sketch003 = startSketchOn(extrude001, 'START')
|
center = [-0.69, 0.56],
|
||||||
|> circle(center = [-0.69, 0.56], radius = 0.28)
|
radius = 0.28
|
||||||
|
)
|
||||||
`
|
`
|
||||||
|
|
||||||
await context.addInitScript((initialCode) => {
|
await context.addInitScript((initialCode) => {
|
||||||
|
@ -41,15 +41,13 @@ sketch002 = startSketchOn(XZ)
|
|||||||
extrude002 = extrude(sketch002, length = 50)
|
extrude002 = extrude(sketch002, length = 50)
|
||||||
sketch003 = startSketchOn(XY)
|
sketch003 = startSketchOn(XY)
|
||||||
|> startProfileAt([52.92, 157.81], %)
|
|> startProfileAt([52.92, 157.81], %)
|
||||||
|> angledLine([0, 176.4], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(
|
||||||
segAng(rectangleSegmentA001) - 90,
|
angle = segAng(rectangleSegmentA001) - 90,
|
||||||
53.4
|
length = 53.4,
|
||||||
], %, $rectangleSegmentB001)
|
tag = $rectangleSegmentB001,
|
||||||
|> angledLine([
|
)
|
||||||
segAng(rectangleSegmentA001),
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $rectangleSegmentC001)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude003 = extrude(sketch003, length = 20)
|
extrude003 = extrude(sketch003, length = 20)
|
||||||
@ -70,13 +68,10 @@ test.describe('edit with AI example snapshots', () => {
|
|||||||
body1CapCoords.x,
|
body1CapCoords.x,
|
||||||
body1CapCoords.y
|
body1CapCoords.y
|
||||||
)
|
)
|
||||||
const yellow: [number, number, number] = [179, 179, 131]
|
|
||||||
const submittingToast = page.getByText('Submitting to Text-to-CAD API...')
|
const submittingToast = page.getByText('Submitting to Text-to-CAD API...')
|
||||||
|
|
||||||
await test.step('wait for scene to load select body and check selection came through', async () => {
|
await test.step('wait for scene to load select body and check selection came through', async () => {
|
||||||
await scene.expectPixelColor([134, 134, 134], body1CapCoords, 15)
|
|
||||||
await clickBody1Cap()
|
await clickBody1Cap()
|
||||||
await scene.expectPixelColor(yellow, body1CapCoords, 20)
|
|
||||||
await editor.expectState({
|
await editor.expectState({
|
||||||
highlightedCode: '',
|
highlightedCode: '',
|
||||||
activeLines: ['|>startProfileAt([-73.64,-42.89],%)'],
|
activeLines: ['|>startProfileAt([-73.64,-42.89],%)'],
|
||||||
|
@ -22,15 +22,9 @@ sketch002 = startSketchOn(XZ)
|
|||||||
extrude002 = extrude(sketch002, length = 50)
|
extrude002 = extrude(sketch002, length = 50)
|
||||||
sketch003 = startSketchOn(XY)
|
sketch003 = startSketchOn(XY)
|
||||||
|> startProfileAt([52.92, 157.81], %)
|
|> startProfileAt([52.92, 157.81], %)
|
||||||
|> angledLine([0, 176.4], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 176.4, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 53.4, tag = $rectangleSegmentB001)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|
||||||
53.4
|
|
||||||
], %, $rectangleSegmentB001)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $rectangleSegmentC001)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude003 = extrude(sketch003, length = 20)
|
extrude003 = extrude(sketch003, length = 20)
|
||||||
@ -57,6 +51,7 @@ test.describe('Prompt-to-edit tests', { tag: '@skipWin' }, () => {
|
|||||||
page,
|
page,
|
||||||
scene,
|
scene,
|
||||||
}) => {
|
}) => {
|
||||||
|
test.fixme(orRunWhenFullSuiteEnabled())
|
||||||
await context.addInitScript((file) => {
|
await context.addInitScript((file) => {
|
||||||
localStorage.setItem('persistCode', file)
|
localStorage.setItem('persistCode', file)
|
||||||
}, file)
|
}, file)
|
||||||
@ -265,6 +260,7 @@ test.describe('Prompt-to-edit tests', { tag: '@skipWin' }, () => {
|
|||||||
page,
|
page,
|
||||||
scene,
|
scene,
|
||||||
}) => {
|
}) => {
|
||||||
|
test.fixme(orRunWhenFullSuiteEnabled())
|
||||||
const body1CapCoords = { x: 571, y: 311 }
|
const body1CapCoords = { x: 571, y: 311 }
|
||||||
const body2WallCoords = { x: 620, y: 152 }
|
const body2WallCoords = { x: 620, y: 152 }
|
||||||
const [clickBody1Cap] = scene.makeMouseHelpers(
|
const [clickBody1Cap] = scene.makeMouseHelpers(
|
||||||
|
@ -68,15 +68,9 @@ test.describe('Regression tests', { tag: ['@skipWin'] }, () => {
|
|||||||
'persistCode',
|
'persistCode',
|
||||||
`sketch001 = startSketchOn(XY)
|
`sketch001 = startSketchOn(XY)
|
||||||
|> startProfileAt([82.33, 238.21], %)
|
|> startProfileAt([82.33, 238.21], %)
|
||||||
|> angledLine([0, 288.63], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 288.63, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 197.97, tag = $rectangleSegmentB001)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|
||||||
197.97
|
|
||||||
], %, $rectangleSegmentB001)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %, $rectangleSegmentC001)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(sketch001, length = 50)
|
extrude001 = extrude(sketch001, length = 50)
|
||||||
@ -257,7 +251,7 @@ extrude001 = extrude(sketch001, length = 50)
|
|||||||
'persistCode',
|
'persistCode',
|
||||||
`exampleSketch = startSketchOn("XZ")
|
`exampleSketch = startSketchOn("XZ")
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle: 50, length: 45 }, %)
|
|> angledLine(angle = 50, length = 45 )
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|>
|
|>
|
||||||
@ -313,7 +307,7 @@ extrude001 = extrude(sketch001, length = 50)
|
|||||||
await expect(page.locator('.cm-content'))
|
await expect(page.locator('.cm-content'))
|
||||||
.toContainText(`exampleSketch = startSketchOn("XZ")
|
.toContainText(`exampleSketch = startSketchOn("XZ")
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> angledLine({ angle: 50, length: 45 }, %)
|
|> angledLine(angle = 50, length = 45 )
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
|
|
||||||
@ -334,15 +328,9 @@ extrude001 = extrude(sketch001, length = 50)
|
|||||||
`@settings(defaultLengthUnit = mm)
|
`@settings(defaultLengthUnit = mm)
|
||||||
sketch002 = startSketchOn(XY)
|
sketch002 = startSketchOn(XY)
|
||||||
profile002 = startProfileAt([72.24, -52.05], sketch002)
|
profile002 = startProfileAt([72.24, -52.05], sketch002)
|
||||||
|> angledLine([0, 181.26], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 181.26, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 21.54)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
21.54
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude002 = extrude(profile002, length = 150)
|
extrude002 = extrude(profile002, length = 150)
|
||||||
|
@ -1099,7 +1099,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
|
|||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(sketch001, length = 5)
|
extrude001 = extrude(sketch001, length = 5)
|
||||||
sketch002 = startSketchOn(extrude001, 'END')
|
sketch002 = startSketchOn(extrude001, face = 'END')
|
||||||
|>
|
|>
|
||||||
`.replace(/\s/g, '')
|
`.replace(/\s/g, '')
|
||||||
)
|
)
|
||||||
@ -1222,7 +1222,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
|
|||||||
fn lug = (origin, length, diameter, plane) => {
|
fn lug = (origin, length, diameter, plane) => {
|
||||||
lugSketch = startSketchOn(plane)
|
lugSketch = startSketchOn(plane)
|
||||||
|> startProfileAt([origin[0] + lugDiameter / 2, origin[1]], %)
|
|> startProfileAt([origin[0] + lugDiameter / 2, origin[1]], %)
|
||||||
|> angledLineOfYLength({ angle = 60, length = lugHeadLength }, %)
|
|> angledLine(angle = 60, lengthY = lugHeadLength)
|
||||||
|> xLine(endAbsolute = 0 + .001)
|
|> xLine(endAbsolute = 0 + .001)
|
||||||
|> yLine(endAbsolute = 0)
|
|> yLine(endAbsolute = 0)
|
||||||
|> close()
|
|> close()
|
||||||
@ -1977,12 +1977,9 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
|
|||||||
)
|
)
|
||||||
await crnRect1point2()
|
await crnRect1point2()
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`|> angledLine([0, 2.37], %, $rectangleSegmentA001)
|
`|> angledLine(angle = 0, length = 2.37, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([segAng(rectangleSegmentA001) - 90, 7.8], %)
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 7.8)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()`.replaceAll('\n', '')
|
|> close()`.replaceAll('\n', '')
|
||||||
)
|
)
|
||||||
@ -1995,15 +1992,9 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
|
|||||||
await crnRect2point2()
|
await crnRect2point2()
|
||||||
await page.waitForTimeout(300)
|
await page.waitForTimeout(300)
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`|> angledLine([0, 5.49], %, $rectangleSegmentA002)
|
`|> angledLine(angle = 0, length = 5.49, tag = $rectangleSegmentA002)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.14)
|
||||||
segAng(rectangleSegmentA002) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|
||||||
4.14
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA002),
|
|
||||||
-segLen(rectangleSegmentA002)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()`.replaceAll('\n', '')
|
|> close()`.replaceAll('\n', '')
|
||||||
)
|
)
|
||||||
@ -2020,15 +2011,9 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
|
|||||||
await cntrRect1point2()
|
await cntrRect1point2()
|
||||||
await page.waitForTimeout(300)
|
await page.waitForTimeout(300)
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`|> angledLine([0, 7.06], %, $rectangleSegmentA003)
|
`|> angledLine(angle = 0, length = 7.06, tag = $rectangleSegmentA003)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA003) + 90, length = 4.34)
|
||||||
segAng(rectangleSegmentA003) + 90,
|
|> angledLine(angle = segAng(rectangleSegmentA003), length = -segLen(rectangleSegmentA003))
|
||||||
4.34
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA003),
|
|
||||||
-segLen(rectangleSegmentA003)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()`.replaceAll('\n', '')
|
|> close()`.replaceAll('\n', '')
|
||||||
)
|
)
|
||||||
@ -2042,15 +2027,9 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
|
|||||||
await cntrRect2point2()
|
await cntrRect2point2()
|
||||||
await page.waitForTimeout(300)
|
await page.waitForTimeout(300)
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`|> angledLine([0, 3.12], %, $rectangleSegmentA004)
|
`|> angledLine(angle = 0, length = 3.12, tag = $rectangleSegmentA004)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA004) + 90, length = 6.24)
|
||||||
segAng(rectangleSegmentA004) + 90,
|
|> angledLine(angle = segAng(rectangleSegmentA004), length = -segLen(rectangleSegmentA004))
|
||||||
6.24
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA004),
|
|
||||||
-segLen(rectangleSegmentA004)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()`.replaceAll('\n', '')
|
|> close()`.replaceAll('\n', '')
|
||||||
)
|
)
|
||||||
@ -2204,15 +2183,9 @@ profile001 = startProfileAt([6.24, 4.54], sketch001)
|
|||||||
|> line(end = [8.61, 0.74])
|
|> line(end = [8.61, 0.74])
|
||||||
|> line(end = [10.99, -5.22])
|
|> line(end = [10.99, -5.22])
|
||||||
profile002 = startProfileAt([11.19, 5.02], sketch001)
|
profile002 = startProfileAt([11.19, 5.02], sketch001)
|
||||||
|> angledLine([0, 10.78], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
4.14
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
profile003 = circle(sketch001, center = [6.92, -4.2], radius = 3.16)
|
profile003 = circle(sketch001, center = [6.92, -4.2], radius = 3.16)
|
||||||
@ -2282,7 +2255,7 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07]
|
|||||||
await rectDragTo()
|
await rectDragTo()
|
||||||
await page.mouse.up()
|
await page.mouse.up()
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`angledLine([-7, 10.27], %, $rectangleSegmentA001)`
|
`angledLine(angle = -7, length = 10.27, tag = $rectangleSegmentA001)`
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -2322,15 +2295,9 @@ profile004 = circleThreePoint(sketch001, p1 = [13.44, -6.8], p2 = [13.39, -2.07]
|
|||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
await rectEnd()
|
await rectEnd()
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`|> angledLine([180, 1.97], %, $rectangleSegmentA002)
|
`|> angledLine(angle = 180, length = 1.97, tag = $rectangleSegmentA002)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA002) + 90, length = 3.89)
|
||||||
segAng(rectangleSegmentA002) + 90,
|
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|
||||||
3.89
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA002),
|
|
||||||
-segLen(rectangleSegmentA002)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()`.replaceAll('\n', '')
|
|> close()`.replaceAll('\n', '')
|
||||||
)
|
)
|
||||||
@ -2351,15 +2318,9 @@ profile001 = startProfileAt([6.24, 4.54], sketch001)
|
|||||||
|> line(end = [8.61, 0.74])
|
|> line(end = [8.61, 0.74])
|
||||||
|> line(end = [10.99, -5.22])
|
|> line(end = [10.99, -5.22])
|
||||||
profile002 = startProfileAt([11.19, 5.02], sketch001)
|
profile002 = startProfileAt([11.19, 5.02], sketch001)
|
||||||
|> angledLine([0, 10.78], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 10.78, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 4.14)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
4.14
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
profile003 = circle(sketch001, center = [6.92, -4.2], radius = 3.16)
|
profile003 = circle(sketch001, center = [6.92, -4.2], radius = 3.16)
|
||||||
@ -2460,15 +2421,9 @@ profile001 = startProfileAt([-63.43, 193.08], sketch001)
|
|||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
profile003 = startProfileAt([16.79, 38.24], sketch001)
|
profile003 = startProfileAt([16.79, 38.24], sketch001)
|
||||||
|> angledLine([0, 182.82], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 182.82, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 105.71)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
105.71
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
profile004 = circle(
|
profile004 = circle(
|
||||||
@ -2679,20 +2634,14 @@ profile001 = startProfileAt([6.71, -3.66], sketch001)
|
|||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude001 = extrude(profile001, length = 20)
|
extrude001 = extrude(profile001, length = 20)
|
||||||
sketch002 = startSketchOn(extrude001, seg01)
|
sketch002 = startSketchOn(extrude001, face = seg01)
|
||||||
profile002 = startProfileAt([0.75, 13.46], sketch002)
|
profile002 = startProfileAt([0.75, 13.46], sketch002)
|
||||||
|> line(end = [4.52, 3.79])
|
|> line(end = [4.52, 3.79])
|
||||||
|> line(end = [5.98, -2.81])
|
|> line(end = [5.98, -2.81])
|
||||||
profile003 = startProfileAt([3.19, 13.3], sketch002)
|
profile003 = startProfileAt([3.19, 13.3], sketch002)
|
||||||
|> angledLine([0, 6.64], %, $rectangleSegmentA001)
|
|> angledLine(angle = 0, length = 6.64, tag = $rectangleSegmentA001)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA001) - 90, length = 2.81)
|
||||||
segAng(rectangleSegmentA001) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001))
|
||||||
2.81
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA001),
|
|
||||||
-segLen(rectangleSegmentA001)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
profile004 = startProfileAt([3.15, 9.39], sketch002)
|
profile004 = startProfileAt([3.15, 9.39], sketch002)
|
||||||
@ -2732,15 +2681,9 @@ profile010 = circle(
|
|||||||
radius = 2.67
|
radius = 2.67
|
||||||
)
|
)
|
||||||
profile011 = startProfileAt([5.07, -6.39], sketch003)
|
profile011 = startProfileAt([5.07, -6.39], sketch003)
|
||||||
|> angledLine([0, 4.54], %, $rectangleSegmentA002)
|
|> angledLine(angle = 0, length = 4.54, tag = $rectangleSegmentA002)
|
||||||
|> angledLine([
|
|> angledLine(angle = segAng(rectangleSegmentA002) - 90, length = 4.17)
|
||||||
segAng(rectangleSegmentA002) - 90,
|
|> angledLine(angle = segAng(rectangleSegmentA002), length = -segLen(rectangleSegmentA002))
|
||||||
4.17
|
|
||||||
], %)
|
|
||||||
|> angledLine([
|
|
||||||
segAng(rectangleSegmentA002),
|
|
||||||
-segLen(rectangleSegmentA002)
|
|
||||||
], %)
|
|
||||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||||
|> close()
|
|> close()
|
||||||
extrude003 = extrude(profile011, length = 2.5)
|
extrude003 = extrude(profile011, length = 2.5)
|
||||||
@ -2889,7 +2832,7 @@ loft([profile001, profile002])
|
|||||||
)
|
)
|
||||||
await rect1Crn2()
|
await rect1Crn2()
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`angledLine([0, 113.01], %, $rectangleSegmentA001)`
|
`angledLine(angle = 0, length = 113.01, tag = $rectangleSegmentA001)`
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -2960,7 +2903,7 @@ loft([profile001, profile002])
|
|||||||
)
|
)
|
||||||
await rect1Crn2()
|
await rect1Crn2()
|
||||||
await editor.expectEditor.toContain(
|
await editor.expectEditor.toContain(
|
||||||
`angledLine([0, 106.42], %, $rectangleSegmentA001)`
|
`angledLine(angle = 0, length = 106.42], tag = $rectangleSegmentA001)`
|
||||||
)
|
)
|
||||||
await page.waitForTimeout(100)
|
await page.waitForTimeout(100)
|
||||||
})
|
})
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user