Compare commits

...

10 Commits

Author SHA1 Message Date
d6ad4b6e66 KCL: Fix cryptic error in type mismatch (#5735)
Previous error message:
"Expected a kcl_lib::execution::geometry::SolidSet but found Sketch"

New error message:
"Expected a SolidSet but found Sketch. You can convert a sketch (2D) into a Solid (3D) by calling a function like `extrude` or `revolve`"

Two improvements:
 - Don't print the fully-qualified Rust name (e.g. kcl_lib::executor::Solid) instead use the last part of that (e.g. just Solid)
 - Allow specific suggestions for combinations of got/want (e.g. "You can convert a sketch (2D) into a Solid (3D) by calling a function like `extrude` or `revolve`")

Closes #5616
2025-03-10 22:53:16 -05:00
546b4ea3b8 generate the settings docs (#5740)
* generate the settings docs

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fmt

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* Update docs/kcl/settings.md

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-03-10 18:59:10 -07:00
310932dc5a run rust benchmarks and compare on prs (#5734)
* run benchmarks and compare on prs

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* run benchmarks and compare on prs

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fixes

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* fixes

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* benchmark kcl-samples

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-03-10 18:04:16 -07:00
51459bb413 turn on insta snapshot for step file output (#5732)
* turn on insta snapshot for step file output

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* use a macro for the kcl-samples

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* Update rust/kcl-directory-test-macro/src/lib.rs

Co-authored-by: Jonathan Tran <jonnytran@gmail.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* control the order

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* engine

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* update steps

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
Co-authored-by: Jonathan Tran <jonnytran@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-10 15:35:45 -07:00
e00dae11ba Fix cryptic parser error (#5731)
# Problem

Before: "unexpected token |>", highlights the |>

After: "This argument needs a label, but it doesn't have one", highlights the argument with no label

Closes #5724 

# Discussion

I am trying a new approach to the parser: instead of parsing the specific correct thing we need, parse a more general form, then later, narrow it down to specifics and return a nice error if it's wrong. For example, instead of parsing labeled arguments, parse labeled OR unlabeled arguments. Then later check that the only unlabeled arg is the first one, and return a nice error if there's any other. This worked nicely for this PR, hopefully the approach will work for other "cryptic error" issues.
2025-03-10 17:09:54 -05:00
831c7f764a cargo publish was too big (#5699)
* cargo publish too big

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* cargo publish too big

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* updates

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* bunmp again

Signed-off-by: Jess Frazelle <github@jessfraz.com>

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

* A snapshot a day keeps the bugs away! 📷🐛 (OS: namespace-profile-ubuntu-8-cores)

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2025-03-10 14:29:04 -07:00
ec4ad268f7 Fix toolchain file copy to work on all platforms (#5733) 2025-03-10 16:44:44 -04:00
be640ea0bd ci: Fix e2e workflow to install rust toolchain when needed (#5728)
* ci: Fix e2e workflow to install rust toolchain when needed

* Unify conditions

* Pull out condition to variable

* Add echo so that debuggin is easier
2025-03-10 14:53:43 -04:00
f8ceab2233 Fix a recast bug and don't delete the user's code if parsing fails (#5663)
Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-03-08 09:33:45 -05:00
aea82e004a KCL: Convert x/y lines to use keyword arguments (#5615)
Previously, `xLine`, `xLineTo`, `yLine` and `yLineTo` used positional arguments. Now:

- `xLineTo` and `yLineTo` have been removed
- `xLine` and `yLine` both use keyword arguments:
  - `length`, optional (i.e. a relative distance along the X or Y axis)
  - `endAbsolute` optional (i.e. an absolute point along the X or Y axis)
  - `tag` optional
- Exactly one of `length` or `endAbsolute` must be given. Not both, not neither.

For example:

```
// Old way
|> xLine(6.04, %)
|> yLineTo(20, %, $base)

// New way
|> xLine(length = 6.04)
|> yLine(endAbsolute = 20, tag = $base)
```

This also improves some of the general-purpose keyword arguments code in modeling app's TS codebase.
2025-03-07 22:07:16 -06:00
455 changed files with 268060 additions and 73226 deletions

View File

@ -16,15 +16,21 @@ jobs:
cache: 'yarn'
- name: Install dependencies
run: yarn
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache wasm
uses: Swatinem/rust-cache@v2
- name: Use correct Rust toolchain
shell: bash
run: |
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
workspaces: './rust'
cache: false # Configured below.
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
- name: build wasm
run: yarn build:wasm

View File

@ -33,18 +33,25 @@ jobs:
- run: yarn install
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Use correct Rust toolchain
shell: bash
run: |
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
workspaces: './rust'
cache: false # Configured below.
# TODO: see if we can fetch from main instead if no diff at rust
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
with:
tool: wasm-pack
- name: Rust Cache
uses: Swatinem/rust-cache@v2
with:
workspaces: rust
- name: Run build:wasm
run: "yarn build:wasm"

52
.github/workflows/cargo-bench.yml vendored Normal file
View File

@ -0,0 +1,52 @@
on:
push:
branches:
- main
paths:
- '**.rs'
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- .github/workflows/cargo-bench.yml
pull_request:
paths:
- '**.rs'
- '**/Cargo.toml'
- '**/Cargo.lock'
- '**/rust-toolchain.toml'
- .github/workflows/cargo-bench.yml
workflow_dispatch:
permissions:
contents: read
pull-requests: write
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
name: cargo bench
jobs:
cargo-bench:
name: cargo bench
runs-on: ubuntu-latest-8-cores
steps:
- uses: actions/checkout@v4
- name: Use correct Rust toolchain
shell: bash
run: |
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache: rust
- name: Install dependencies
run: |
cargo install cargo-criterion
sudo apt update
sudo apt install -y valgrind
- uses: boa-dev/criterion-compare-action@v3
with:
cwd: "rust"
defaultFeatures: true
# Needed. The name of the branch to compare with. This default uses the branch which is being pulled against
branchName: ${{ github.base_ref }}
env:
KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}}

View File

@ -22,7 +22,7 @@ jobs:
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:

View File

@ -29,7 +29,7 @@ jobs:
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:

View File

@ -31,7 +31,7 @@ jobs:
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:

View File

@ -29,7 +29,7 @@ jobs:
- name: Use correct Rust toolchain
shell: bash
run: |
cp --update=none rust/rust-toolchain.toml ./ || true
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
uses: actions-rust-lang/setup-rust-toolchain@v1
with:

View File

@ -135,19 +135,35 @@ jobs:
shell: bash
run: cp rust/kcl-wasm-lib/pkg/kcl_wasm_lib_bg.wasm public
continue-on-error: true
- name: Setup Rust
if: ${{ needs.conditions.outputs.should-run == 'true' }}
uses: dtolnay/rust-toolchain@stable
- name: Build WASM condition
id: wasm
if: needs.conditions.outputs.should-run == 'true'
shell: bash
run: |
set -euox pipefail
# Build wasm if this is a scheduled run, there are Rust changes, or
# downloading from the wasm cache failed.
if [[ ${{github.event_name}} == 'schedule' || ${{steps.filter.outputs.rust}} == 'true' || ${{steps.download-wasm.outcome}} == 'failure' ]]; then
echo "should-build-wasm=true" >> $GITHUB_OUTPUT
else
echo "should-build-wasm=false" >> $GITHUB_OUTPUT
fi
- name: Use correct Rust toolchain
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.wasm.outputs.should-build-wasm == 'true' }}
shell: bash
run: |
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
- name: Install rust
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.wasm.outputs.should-build-wasm == 'true' }}
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
cache: false # Configured below.
- uses: taiki-e/install-action@955a6ff1416eae278c9f833008a9beb4b7f9afe3
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.wasm.outputs.should-build-wasm == 'true' }}
with:
tool: wasm-pack
- name: Cache Wasm (because rust diff)
if: ${{ needs.conditions.outputs.should-run == 'true' && (github.event_name == 'schedule' || steps.filter.outputs.rust == 'true') }}
uses: Swatinem/rust-cache@v2
with:
workspaces: './rust'
- name: OR Cache Wasm (because wasm cache failed)
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.download-wasm.outcome == 'failure' }}
- name: Rust Cache
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.wasm.outputs.should-build-wasm == 'true' }}
uses: Swatinem/rust-cache@v2
with:
workspaces: './rust'
@ -174,12 +190,8 @@ jobs:
sed -i "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml
cat /tmp/vector.toml
${HOME}/.vector/bin/vector --config /tmp/vector.toml &
- name: Build Wasm (because rust diff)
if: ${{ needs.conditions.outputs.should-run == 'true' && (github.event_name == 'schedule' || steps.filter.outputs.rust == 'true') }}
shell: bash
run: yarn build:wasm
- name: OR Build Wasm (because wasm cache failed)
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.download-wasm.outcome == 'failure' }}
- name: Build Wasm
if: ${{ needs.conditions.outputs.should-run == 'true' && steps.wasm.outputs.should-build-wasm == 'true' }}
shell: bash
run: yarn build:wasm
- name: build web

View File

@ -159,10 +159,11 @@ jobs:
if: startsWith(github.ref, 'refs/tags/')
needs: [linux-x86_64, windows, macos, sdist]
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
- name: Install the latest version of uv
uses: astral-sh/setup-uv@v5
- name: Install codespell
- name: do uv things
run: |
cd rust/kcl-python-bindings
uv venv .venv

View File

@ -40,7 +40,7 @@ sketch001 = startSketchOn('XZ')
angle = angleToMatchLengthY(seg01, 15, %),
length = 5
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrusion = extrude(sketch001, length = 5)

View File

@ -35,10 +35,10 @@ angledLine(
```js
exampleSketch = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> yLineTo(15, %)
|> yLine(endAbsolute = 15)
|> angledLine({ angle = 30, length = 15 }, %)
|> line(end = [8, -10])
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 10)

View File

@ -37,7 +37,7 @@ sketch001 = startSketchOn('XZ')
angle = toDegrees(asin(0.5)),
length = 20
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrude001 = extrude(sketch001, length = 5)

View File

@ -37,7 +37,7 @@ sketch001 = startSketchOn('XZ')
angle = toDegrees(atan(1.25)),
length = 20
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrude001 = extrude(sketch001, length = 5)

View File

@ -41,7 +41,7 @@ sketch001 = startSketchOn('XZ')
angle = toDegrees(atan2(1.25, 2)),
length = 20
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrude001 = extrude(sketch001, length = 5)

View File

@ -35,7 +35,7 @@ sketch001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> line(endAbsolute = [12, 10])
|> line(end = [ceil(7.02986), 0])
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrude001 = extrude(sketch001, length = 5)

View File

@ -21,7 +21,7 @@ exampleSketch = startSketchOn("XZ")
angle = 30,
length = 2 * E ^ 2,
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 10)

View File

@ -21,7 +21,7 @@ exampleSketch = startSketchOn("XZ")
angle = 50,
length = 10 * TAU,
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -31,7 +31,7 @@ e(): number
exampleSketch = startSketchOn("XZ")
|> startProfileAt([0, 0], %)
|> angledLine({ angle = 30, length = 2 * e() ^ 2 }, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 10)

View File

@ -35,7 +35,7 @@ sketch001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> line(endAbsolute = [12, 10])
|> line(end = [floor(7.02986), 0])
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrude001 = extrude(sketch001, length = 5)

View File

@ -131,9 +131,7 @@ layout: manual
* [`toRadians`](kcl/toRadians)
* [`translate`](kcl/translate)
* [`xLine`](kcl/xLine)
* [`xLineTo`](kcl/xLineTo)
* [`yLine`](kcl/yLine)
* [`yLineTo`](kcl/yLineTo)
* [`yd`](kcl/yd)
* **std::math**
* [`E`](kcl/const_std-math-E)

View File

@ -38,7 +38,7 @@ pow(
exampleSketch = startSketchOn("XZ")
|> startProfileAt([0, 0], %)
|> angledLine({ angle = 50, length = pow(5, 2) }, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -35,7 +35,7 @@ sketch001 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> line(endAbsolute = [12, 10])
|> line(end = [round(7.02986), 0])
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
extrude001 = extrude(sketch001, length = 5)

View File

@ -4,13 +4,28 @@ excerpt: "Documentation of settings for the KCL language and Zoo Modeling App."
layout: manual
---
# Per-file settings
# KCL Settings
There are three levels of settings available in the KittyCAD modeling application:
1. [User Settings](/docs/kcl/settings/user.toml): Global settings that apply to all projects, stored in `user.toml`
2. [Project Settings](/docs/kcl/settings/project.toml): Settings specific to a project, stored in `project.toml`
3. Per-file Settings: Settings that apply to a single KCL file, specified using the `@settings` attribute
## Configuration Files
The KittyCAD modeling app uses TOML files for configuration:
* **User Settings**: `user.toml` - See [complete documentation](/docs/kcl/settings/user.toml)
* **Project Settings**: `project.toml` - See [complete documentation](/docs/kcl/settings/project.toml)
## Per-file settings
Settings which affect a single file are configured using the settings attribute.
This must be at the top of the KCL file (comments before the attribute are permitted).
E.g.,
For example:
```
```js
// The settings attribute.
@settings(defaultLengthUnit = in)

View File

@ -0,0 +1,208 @@
---
title: "Project Settings"
excerpt: "Project specific settings for the app. These live in `project.toml` in the base of the project directory. Updating the settings for the project in the app will update this file automatically. Do not edit this file manually, as it may be overwritten by the app. Manual edits can cause corruption of the settings file."
layout: manual
---
# Project Settings
Project specific settings for the app. These live in `project.toml` in the base of the project directory. Updating the settings for the project in the app will update this file automatically. Do not edit this file manually, as it may be overwritten by the app. Manual edits can cause corruption of the settings file.
## Project Configuration Structure
```toml
[settings.app]
# Set the appearance of the application
name = "My Awesome Project"
[settings.app.appearance]
# Use dark mode theme
theme = "dark"
# Set the app color to blue (240.0 = blue, 0.0 = red, 120.0 = green)
color = 240.0
[settings.modeling]
# Use inches as the default measurement unit
base_unit = "in"
```
## Available Settings
### settings
#### app
The settings for the modeling app.
**Default:** None
This setting has the following nested options:
##### appearance
The settings for the appearance of the app.
**Default:** None
This setting has further nested options. See the schema for full details.
##### onboarding_status
The onboarding status of the app.
**Default:** None
##### theme_color
The hue of the primary theme color for the app.
**Default:** None
##### enable_ssao
Whether or not Screen Space Ambient Occlusion (SSAO) is enabled.
**Default:** None
##### dismiss_web_banner
Permanently dismiss the banner warning to download the desktop app. This setting only applies to the web app. And is temporary until we have Linux support.
**Default:** None
##### stream_idle_mode
When the user is idle, and this is true, the stream will be torn down.
**Default:** None
##### allow_orbit_in_sketch_mode
When the user is idle, and this is true, the stream will be torn down.
**Default:** None
##### show_debug_panel
Whether to show the debug panel, which lets you see various states of the app to aid in development.
**Default:** None
##### named_views
Settings that affect the behavior of the command bar.
**Default:** None
#### modeling
Settings that affect the behavior while modeling.
**Default:** None
This setting has the following nested options:
##### base_unit
The default unit to use in modeling dimensions.
**Default:** None
##### highlight_edges
Highlight edges of 3D objects?
**Default:** None
##### show_debug_panel
Whether to show the debug panel, which lets you see various states of the app to aid in development. Remove this when we remove backwards compatibility with the old settings file.
**Default:** None
##### enable_ssao
Whether or not Screen Space Ambient Occlusion (SSAO) is enabled.
**Default:** None
#### text_editor
Settings that affect the behavior of the KCL text editor.
**Default:** None
This setting has the following nested options:
##### text_wrapping
Whether to wrap text in the editor or overflow with scroll.
**Default:** None
##### blinking_cursor
Whether to make the cursor blink in the editor.
**Default:** None
#### command_bar
Settings that affect the behavior of the command bar.
**Default:** None
This setting has the following nested options:
##### include_settings
Whether to include settings in the command bar.
**Default:** None
## Complete Example
```toml
[settings.app]
# Set the appearance of the application
name = "My Awesome Project"
[settings.app.appearance]
# Use dark mode theme
theme = "dark"
# Set the app color to blue (240.0 = blue, 0.0 = red, 120.0 = green)
color = 240.0
[settings.modeling]
# Use inches as the default measurement unit
base_unit = "in"
```

View File

@ -0,0 +1,272 @@
---
title: "User Settings"
excerpt: "User specific settings for the app. These live in `user.toml` in the app's configuration directory. Updating the settings in the app will update this file automatically. Do not edit this file manually, as it may be overwritten by the app. Manual edits can cause corruption of the settings file."
layout: manual
---
# User Settings
User specific settings for the app. These live in `user.toml` in the app's configuration directory. Updating the settings in the app will update this file automatically. Do not edit this file manually, as it may be overwritten by the app. Manual edits can cause corruption of the settings file.
## User Configuration Structure
```toml
[settings.app]
# Set the appearance of the application
[settings.app.appearance]
# Use dark mode theme
theme = "dark"
# Set the app color to blue (240.0 = blue, 0.0 = red, 120.0 = green)
color = 240.0
[settings.modeling]
# Use millimeters as the default measurement unit
base_unit = "mm"
[settings.text_editor]
# Disable text wrapping in the editor
text_wrapping = false
```
## Available Settings
### settings
#### app
The settings for the modeling app.
**Default:** None
This setting has the following nested options:
##### appearance
The settings for the appearance of the app.
**Default:** None
This setting has further nested options. See the schema for full details.
##### onboarding_status
The onboarding status of the app.
**Default:** None
##### project_directory
Backwards compatible project directory setting.
**Default:** None
##### theme
Backwards compatible theme setting.
**Default:** None
##### theme_color
The hue of the primary theme color for the app.
**Default:** None
##### enable_ssao
Whether or not Screen Space Ambient Occlusion (SSAO) is enabled.
**Default:** None
##### dismiss_web_banner
Permanently dismiss the banner warning to download the desktop app. This setting only applies to the web app. And is temporary until we have Linux support.
**Default:** None
##### stream_idle_mode
When the user is idle, and this is true, the stream will be torn down.
**Default:** None
##### allow_orbit_in_sketch_mode
When the user is idle, and this is true, the stream will be torn down.
**Default:** None
##### show_debug_panel
Whether to show the debug panel, which lets you see various states of the app to aid in development.
**Default:** None
#### modeling
Settings that affect the behavior while modeling.
**Default:** None
This setting has the following nested options:
##### base_unit
The default unit to use in modeling dimensions.
**Default:** None
##### camera_projection
The projection mode the camera should use while modeling.
**Default:** None
##### camera_orbit
The methodology the camera should use to orbit around the model.
**Default:** None
##### mouse_controls
The controls for how to navigate the 3D view.
**Possible values:** `zoo`, `onshape`, `trackpad_friendly`, `solidworks`, `nx`, `creo`, `autocad`
**Default:** None
##### highlight_edges
Highlight edges of 3D objects?
**Default:** None
##### show_debug_panel
Whether to show the debug panel, which lets you see various states of the app to aid in development. Remove this when we remove backwards compatibility with the old settings file.
**Default:** None
##### enable_ssao
Whether or not Screen Space Ambient Occlusion (SSAO) is enabled.
**Default:** None
##### show_scale_grid
Whether or not to show a scale grid in the 3D modeling view
**Default:** None
#### text_editor
Settings that affect the behavior of the KCL text editor.
**Default:** None
This setting has the following nested options:
##### text_wrapping
Whether to wrap text in the editor or overflow with scroll.
**Default:** None
##### blinking_cursor
Whether to make the cursor blink in the editor.
**Default:** None
#### project
Settings that affect the behavior of project management.
**Default:** None
This setting has the following nested options:
##### directory
The directory to save and load projects from.
**Default:** None
##### default_project_name
The default project name to use when creating a new project.
**Default:** None
#### command_bar
Settings that affect the behavior of the command bar.
**Default:** None
This setting has the following nested options:
##### include_settings
Whether to include settings in the command bar.
**Default:** None
## Complete Example
```toml
[settings.app]
# Set the appearance of the application
[settings.app.appearance]
# Use dark mode theme
theme = "dark"
# Set the app color to blue (240.0 = blue, 0.0 = red, 120.0 = green)
color = 240.0
[settings.modeling]
# Use millimeters as the default measurement unit
base_unit = "mm"
[settings.text_editor]
# Disable text wrapping in the editor
text_wrapping = false
```

View File

@ -34,7 +34,7 @@ sqrt(num: number): number
exampleSketch = startSketchOn("XZ")
|> startProfileAt([0, 0], %)
|> angledLine({ angle = 50, length = sqrt(2500) }, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -137,9 +137,9 @@ a1 = startSketchOn({
})
|> startProfileAt([0, 0], %)
|> line(end = [100.0, 0])
|> yLine(-100.0, %)
|> xLine(-100.0, %)
|> yLine(100.0, %)
|> yLine(length = -100.0)
|> xLine(length = -100.0)
|> yLine(length = 100.0)
|> close()
|> extrude(length = 3.14)
```

View File

@ -33,7 +33,7 @@ exampleSketch = startSketchOn("XZ")
angle = 30,
length = 3 / cos(toRadians(30)),
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -33,7 +33,7 @@ exampleSketch = startSketchOn("XZ")
angle = 50,
length = 15 / sin(toDegrees(135)),
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -33,7 +33,7 @@ exampleSketch = startSketchOn("XZ")
angle = 50,
length = 50 * tan(1/2),
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

File diff suppressed because it is too large Load Diff

View File

@ -31,7 +31,7 @@ tau(): number
exampleSketch = startSketchOn("XZ")
|> startProfileAt([0, 0], %)
|> angledLine({ angle = 50, length = 10 * tau() }, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -37,7 +37,7 @@ exampleSketch = startSketchOn("XZ")
angle = 50,
length = 70 * cos(toDegrees(pi() / 4))
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -37,7 +37,7 @@ exampleSketch = startSketchOn("XZ")
angle = 50,
length = 70 * cos(toRadians(45))
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
example = extrude(exampleSketch, length = 5)

View File

@ -10,8 +10,9 @@ Draw a line relative to the current origin to a specified distance away from the
```js
xLine(
length: number,
sketch: Sketch,
length?: number,
endAbsolute?: number,
tag?: TagDeclarator,
): Sketch
```
@ -21,9 +22,10 @@ xLine(
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `length` | [`number`](/docs/kcl/types/number) | | Yes |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes |
| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes |
| `length` | [`number`](/docs/kcl/types/number) | How far away along the X axis should this line go? Incompatible with `endAbsolute`. | No |
| `endAbsolute` | [`number`](/docs/kcl/types/number) | Which absolute X value should this line go to? Incompatible with `length`. | No |
| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No |
### Returns
@ -35,12 +37,12 @@ xLine(
```js
exampleSketch = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> xLine(15, %)
|> xLine(length = 15)
|> angledLine({ angle = 80, length = 15 }, %)
|> line(end = [8, -10])
|> xLine(10, %)
|> xLine(length = 10)
|> angledLine({ angle = 120, length = 30 }, %)
|> xLine(-15, %)
|> xLine(length = -15)
|> close()
example = extrude(exampleSketch, length = 10)

View File

@ -10,8 +10,9 @@ Draw a line relative to the current origin to a specified distance away from the
```js
yLine(
length: number,
sketch: Sketch,
length?: number,
endAbsolute?: number,
tag?: TagDeclarator,
): Sketch
```
@ -21,9 +22,10 @@ yLine(
| Name | Type | Description | Required |
|----------|------|-------------|----------|
| `length` | [`number`](/docs/kcl/types/number) | | Yes |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes |
| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No |
| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes |
| `length` | [`number`](/docs/kcl/types/number) | How far away along the Y axis should this line go? Incompatible with `endAbsolute`. | No |
| `endAbsolute` | [`number`](/docs/kcl/types/number) | Which absolute Y value should this line go to? Incompatible with `length`. | No |
| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No |
### Returns
@ -35,10 +37,10 @@ yLine(
```js
exampleSketch = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> yLine(15, %)
|> yLine(length = 15)
|> angledLine({ angle = 30, length = 15 }, %)
|> line(end = [8, -10])
|> yLine(-5, %)
|> yLine(length = -5)
|> close()
example = extrude(exampleSketch, length = 10)

View File

@ -65,7 +65,7 @@ async function doBasicSketch(
if (openPanes.includes('code')) {
await expect(u.codeLocator)
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${commonPoints.startAt}, sketch001)
|> xLine(${commonPoints.num1}, %)`)
|> xLine(length = ${commonPoints.num1})`)
}
await page.waitForTimeout(500)
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20)
@ -74,8 +74,8 @@ async function doBasicSketch(
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${
commonPoints.startAt
}, sketch001)
|> xLine(${commonPoints.num1}, %)
|> yLine(${commonPoints.num1 + 0.01}, %)`)
|> xLine(length = ${commonPoints.num1})
|> yLine(length = ${commonPoints.num1 + 0.01})`)
} else {
await page.waitForTimeout(500)
}
@ -86,9 +86,9 @@ async function doBasicSketch(
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${
commonPoints.startAt
}, sketch001)
|> xLine(${commonPoints.num1}, %)
|> yLine(${commonPoints.num1 + 0.01}, %)
|> xLine(${commonPoints.num2 * -1}, %)`)
|> xLine(length = ${commonPoints.num1})
|> yLine(length = ${commonPoints.num1 + 0.01})
|> xLine(length = ${commonPoints.num2 * -1})`)
}
// deselect line tool
@ -146,9 +146,9 @@ async function doBasicSketch(
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${
commonPoints.startAt
}, sketch001)
|> xLine(${commonPoints.num1}, %, $seg01)
|> yLine(${commonPoints.num1 + 0.01}, %)
|> xLine(-segLen(seg01), %)`)
|> xLine(length = ${commonPoints.num1}, tag = $seg01)
|> yLine(length = ${commonPoints.num1 + 0.01})
|> xLine(length = -segLen(seg01))`)
}
test.describe('Basic sketch', { tag: ['@skipWin'] }, () => {

View File

@ -16,7 +16,7 @@ test.describe('Command bar tests', { tag: ['@skipWin'] }, () => {
|> startProfileAt([-10, -10], %)
|> line(end = [20, 0])
|> line(end = [0, 20])
|> xLine(-20, %)
|> xLine(length = -20)
|> close()
`
)

View File

@ -800,10 +800,10 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
await page.keyboard.press('ArrowDown')
await page.keyboard.press('Enter')
// finish line with comment
await page.keyboard.type('5')
await page.waitForTimeout(100)
await page.keyboard.press('Tab')
await page.waitForTimeout(100)
await page.keyboard.type('5')
await page.waitForTimeout(100)
await page.keyboard.press('Tab')
await page.keyboard.type(' // ')
@ -817,7 +817,7 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
await expect(page.locator('.cm-content'))
.toHaveText(`sketch001 = startSketchOn('XZ')
|> startProfileAt([3.14, 12], %)
|> xLine(5, %) // lin`)
|> xLine(%, length = 5) // lin`)
// expect there to be no KCL errors
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(0)
@ -873,10 +873,10 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
await page.keyboard.press('ArrowDown')
await page.keyboard.press('Tab')
// finish line with comment
await page.keyboard.type('5')
await page.waitForTimeout(100)
await page.keyboard.press('Tab')
await page.waitForTimeout(100)
await page.keyboard.type('5')
await page.waitForTimeout(100)
await page.keyboard.press('Tab')
await page.keyboard.type(' // ')
@ -890,7 +890,7 @@ test.describe('Editor tests', { tag: ['@skipWin'] }, () => {
await expect(page.locator('.cm-content'))
.toHaveText(`sketch001 = startSketchOn('XZ')
|> startProfileAt([3.14, 12], %)
|> xLine(5, %) // lin`)
|> xLine(%, length = 5) // lin`)
})
})
test('Can undo a click and point extrude with ctrl+z', async ({

View File

@ -8,7 +8,7 @@ const FEATURE_TREE_EXAMPLE_CODE = `export fn timesFive(x) {
export fn triangle() {
return startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> xLine(10, %)
|> xLine(length = 10)
|> line(end = [-10, -5])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
@ -28,7 +28,7 @@ plane001 = offsetPlane('XY', offset = 10)
sketch002 = startSketchOn(plane001)
|> startProfileAt([-20, 0], %)
|> line(end = [5, -15])
|> xLine(-10, %)
|> xLine(length = -10)
|> line(endAbsolute = [-40, 0])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
@ -402,7 +402,7 @@ test.describe('Feature Tree pane', () => {
sketch001 = startSketchOn(plane001)
profile001 = circle(sketch001, center = [0, 20], radius = 12)
profile002 = startProfileAt([0, 7.25], sketch001)
|> xLine(13.3, %)
|> xLine(length = 13.3)
profile003 = startProfileAt([0, -4.93], sketch001)
|> line(endAbsolute = [-5.56, 0])`
await context.folderSetupFn(async (dir) => {

View File

@ -524,7 +524,7 @@ profile001 = startProfileAt([205.96, 254.59], sketch002)
const expectedCodeSnippets = {
sketchOnXzPlane: `sketch001 = startSketchOn('XZ')`,
pointAtOrigin: `startProfileAt([${originSloppy.kcl[0]}, ${originSloppy.kcl[1]}], sketch001)`,
segmentOnXAxis: `xLine(${xAxisSloppy.kcl[0]}, %)`,
segmentOnXAxis: `xLine(length = ${xAxisSloppy.kcl[0]})`,
afterSegmentDraggedOffYAxis: `startProfileAt([${offYAxis.kcl[0]}, ${offYAxis.kcl[1]}], sketch001)`,
afterSegmentDraggedOnYAxis: `startProfileAt([${yAxisSloppy.kcl[0]}, ${yAxisSloppy.kcl[1]}], sketch001)`,
}
@ -585,7 +585,7 @@ profile001 = startProfileAt([205.96, 254.59], sketch002)
openSketch = startSketchOn('XY')
|> startProfileAt([-5, 0], %)
|> line(endAbsolute = [0, 5])
|> xLine(5, %)
|> xLine(length = 5)
|> tangentialArcTo([10, 0], %)
`
const viewPortSize = { width: 1000, height: 500 }
@ -1350,7 +1350,7 @@ loft001 = loft([sketch001, sketch002])
)
sketch002 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> xLine(-500, %)
|> xLine(length = -500)
|> tangentialArcTo([-2000, 500], %)
`
await context.addInitScript((initialCode) => {
@ -1444,7 +1444,7 @@ sketch002 = startSketchOn('XZ')
)
sketch002 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> xLine(-500, %)
|> xLine(length = -500)
|> line(endAbsolute = [-2000, 500])
`
await context.addInitScript((initialCode) => {
@ -2365,9 +2365,9 @@ chamfer04 = chamfer(extrude001, length = 5, tags = [getOppositeEdge(seg02)])
}) => {
const initialCode = `sketch001 = startSketchOn('XY')
|> startProfileAt([-20, 20], %)
|> xLine(40, %)
|> yLine(-60, %)
|> xLine(-40, %)
|> xLine(length = 40)
|> yLine(length = -60)
|> xLine(length = -40)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude001 = extrude(sketch001, length = 40)
@ -2383,7 +2383,7 @@ extrude001 = extrude(sketch001, length = 40)
const testPoint = { x: 580, y: 180 }
const [clickOnCap] = scene.makeMouseHelpers(testPoint.x, testPoint.y)
const [clickOnWall] = scene.makeMouseHelpers(testPoint.x, testPoint.y + 70)
const mutatedCode = 'xLine(-40, %, $seg01)'
const mutatedCode = 'xLine(length = -40, tag = $seg01)'
const shellDeclaration =
"shell001 = shell(extrude001, faces = ['end', seg01], thickness = 5)"
@ -2549,9 +2549,9 @@ extrude002 = extrude(sketch002, length = 50)
}) => {
const sketchCode = `sketch001 = startSketchOn('XY')
profile001 = startProfileAt([-20, 20], sketch001)
|> xLine(40, %)
|> yLine(-60, %)
|> xLine(-40, %)
|> xLine(length = 40)
|> yLine(length = -60)
|> xLine(length = -40)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
`
@ -2637,7 +2637,7 @@ profile001 = startProfileAt([-20, 20], sketch001)
)
sketch002 = startSketchOn('XZ')
|> startProfileAt([0, 0], %)
|> xLine(-2000, %)
|> xLine(length = -2000)
sweep001 = sweep(sketch001, path = sketch002)
`
await context.addInitScript((initialCode) => {
@ -2798,7 +2798,7 @@ radius = 8.69
const initialCode = `
sketch002 = startSketchOn('XY')
|> startProfileAt([-2.02, 1.79], %)
|> xLine(2.6, %)
|> xLine(length = 2.6)
sketch001 = startSketchOn('-XY')
|> startProfileAt([-0.48, 1.25], %)
|> angledLine([0, 2.38], %, $rectangleSegmentA001)
@ -2830,7 +2830,7 @@ radius = 8.69
await page.getByText(codeToSelecton).click()
await toolbar.revolveButton.click()
await page.getByText('Edge', { exact: true }).click()
const lineCodeToSelection = `|> xLine(2.6, %)`
const lineCodeToSelection = `|> xLine(length = 2.6)`
await page.getByText(lineCodeToSelection).click()
await cmdBar.progressCmdBar()

View File

@ -32,9 +32,9 @@ profile001 = startProfileAt([57.81, 250.51], sketch001)
extrude001 = extrude(profile001, length = 200)
sketch002 = startSketchOn('XZ')
|> startProfileAt([-73.64, -42.89], %)
|> xLine(173.71, %)
|> xLine(length = 173.71)
|> line(end = [-22.12, -94.4])
|> xLine(-156.98, %)
|> xLine(length = -156.98)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude002 = extrude(sketch002, length = 50)

View File

@ -13,9 +13,9 @@ profile001 = startProfileAt([57.81, 250.51], sketch001)
extrude001 = extrude(profile001, length = 200)
sketch002 = startSketchOn('XZ')
|> startProfileAt([-114, 85.52], %)
|> xLine(265.36, %)
|> xLine(length = 265.36)
|> line(end = [33.17, -261.22])
|> xLine(-297.25, %)
|> xLine(length = -297.25)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude002 = extrude(sketch002, length = 50)

View File

@ -249,7 +249,7 @@ extrude001 = extrude(sketch001, length = 50)
`exampleSketch = startSketchOn("XZ")
|> startProfileAt([0, 0], %)
|> angledLine({ angle: 50, length: 45 }, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
|>
@ -305,7 +305,7 @@ extrude001 = extrude(sketch001, length = 50)
.toContainText(`exampleSketch = startSketchOn("XZ")
|> startProfileAt([0, 0], %)
|> angledLine({ angle: 50, length: 45 }, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close()
thing: "blah"`)

View File

@ -48,26 +48,26 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
part001 = startSketchOn('XY')
${startProfileAt2}
|> xLine(width * .5, %)
|> yLine(height, %)
|> xLine(-width * .5, %)
|> xLine(length = width * .5)
|> yLine(length = height)
|> xLine(length = -width * .5)
|> close()
|> hole(screwHole, %)
|> extrude(length = thickness)
part002 = startSketchOn('-XZ')
${startProfileAt3}
|> xLine(width / 4, %)
|> xLine(length = width / 4)
|> tangentialArcTo([width / 2, 0], %)
|> xLine(-width / 4 + wireRadius, %)
|> yLine(wireOffset, %)
|> xLine(length = -width / 4 + wireRadius)
|> yLine(length = wireOffset)
|> arc({
radius = wireRadius,
angleStart = 0,
angleEnd = 180
}, %)
|> yLine(-wireOffset, %)
|> xLine(-width / 4, %)
|> yLine(length = -wireOffset)
|> xLine(length = -width / 4)
|> close()
|> extrude(length = -height)
`
@ -111,7 +111,7 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
'persistCode',
`sketch001 = startSketchOn('XZ')
|> startProfileAt([2.61, -4.01], %)
|> xLine(8.73, %)
|> xLine(length = 8.73)
|> tangentialArcTo([8.33, -1.31], %)`
)
})
@ -157,7 +157,7 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
await expect.poll(u.normalisedEditorCode, { timeout: 1000 })
.toBe(`sketch002 = startSketchOn('XZ')
sketch001 = startProfileAt([12.34, -12.34], sketch002)
|> yLine(12.34, %)
|> yLine(length = 12.34)
`)
}).toPass({ timeout: 5_000, intervals: [1_000] })
@ -691,15 +691,15 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
await click00r(50, 0)
await page.waitForTimeout(100)
codeStr += ` |> xLine(${toU(50, 0)[0]}, %)`
codeStr += ` |> xLine(length = ${toU(50, 0)[0]})`
await expect(u.codeLocator).toHaveText(codeStr)
await click00r(0, 50)
codeStr += ` |> yLine(${toU(0, 50)[1]}, %)`
codeStr += ` |> yLine(length = ${toU(0, 50)[1]})`
await expect(u.codeLocator).toHaveText(codeStr)
await click00r(-50, 0)
codeStr += ` |> xLine(${toU(-50, 0)[0]}, %)`
codeStr += ` |> xLine(length = ${toU(-50, 0)[0]})`
await expect(u.codeLocator).toHaveText(codeStr)
// exit the sketch, reset relative clicker
@ -728,15 +728,15 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
// TODO: I couldn't use `toSU` here because of some rounding error causing
// it to be off by 0.01
await click00r(30, 0)
codeStr += ` |> xLine(2.04, %)`
codeStr += ` |> xLine(length = 2.04)`
await expect(u.codeLocator).toHaveText(codeStr)
await click00r(0, 30)
codeStr += ` |> yLine(-2.03, %)`
codeStr += ` |> yLine(length = -2.03)`
await expect(u.codeLocator).toHaveText(codeStr)
await click00r(-30, 0)
codeStr += ` |> xLine(-2.04, %)`
codeStr += ` |> xLine(length = -2.04)`
await expect(u.codeLocator).toHaveText(codeStr)
await click00r(undefined, undefined)
@ -761,8 +761,8 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
scale * 34.8
)}], sketch001)
|> xLine(${roundOff(scale * 139.19)}, %)
|> yLine(-${roundOff(scale * 139.2)}, %)
|> xLine(length = ${roundOff(scale * 139.19)})
|> yLine(length = -${roundOff(scale * 139.2)})
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()`
@ -1018,7 +1018,7 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
|> startProfileAt([-10, -10], %)
|> line(end = [20, 0])
|> line(end = [0, 20])
|> xLine(-20, %)
|> xLine(length = -20)
`)
await u.expectCmdLog('[data-message-type="execution-done"]')
@ -1094,8 +1094,8 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff(
lugSketch = startSketchOn(plane)
|> startProfileAt([origin[0] + lugDiameter / 2, origin[1]], %)
|> angledLineOfYLength({ angle = 60, length = lugHeadLength }, %)
|> xLineTo(0 + .001, %)
|> yLineTo(0, %)
|> xLine(endAbsolute = 0 + .001)
|> yLine(endAbsolute = 0)
|> close()
|> revolve({ axis = "Y" }, %)
@ -1368,7 +1368,7 @@ profile001 = startProfileAt([121.52, 168.25], sketch001)
|> close()
profile002 = startProfileAt([117.2, 56.08], sketch001)
|> line(end = [166.82, 25.89])
|> yLine(-107.86, %)
|> yLine(length = -107.86)
`
)
@ -1456,9 +1456,9 @@ profile002 = startProfileAt([117.2, 56.08], sketch001)
'persistCode',
`sketch001 = startSketchOn('XZ')
profile002 = startProfileAt([40.68, 87.67], sketch001)
|> xLine(239.17, %)
|> xLine(length = 239.17)
profile003 = startProfileAt([206.63, -56.73], sketch001)
|> xLine(-156.32, %)
|> xLine(length = -156.32)
`
)
})
@ -2318,7 +2318,7 @@ profile003 = startProfileAt([3.19, 13.3], sketch002)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
profile004 = startProfileAt([3.15, 9.39], sketch002)
|> xLine(6.92, %)
|> xLine(length = 6.92)
|> line(end = [-7.41, -2.85])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
@ -2556,7 +2556,7 @@ profile001 = startProfileAt([34, 42.66], sketch001)
plane001 = offsetPlane('XZ', offset = 50)
sketch002 = startSketchOn(plane001)
profile002 = startProfileAt([39.43, 172.21], sketch002)
|> xLine(183.99, %)
|> xLine(length = 183.99)
|> line(end = [-77.95, -145.93])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
@ -2609,7 +2609,7 @@ profile001 = startProfileAt([34, 42.66], sketch001)
plane001 = offsetPlane('XZ', offset = 50)
sketch002 = startSketchOn(plane001)
profile002 = startProfileAt([39.43, 172.21], sketch002)
|> xLine(183.99, %)
|> xLine(length = 183.99)
|> line(end = [-77.95, -145.93])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()

View File

@ -62,14 +62,14 @@ armThick = 0.5
totalLen = 9.5
part001 = startSketchOn('-XZ')
|> startProfileAt([0, 0], %)
|> yLine(baseHeight, %)
|> xLine(baseLen, %)
|> yLine(length = baseHeight)
|> xLine(length = baseLen)
|> angledLineToY({
angle = topAng,
to = totalHeightHalf,
}, %, $seg04)
|> xLineTo(totalLen, %, $seg03)
|> yLine(-armThick, %, $seg01)
|> xLine(endAbsolute = totalLen, tag = $seg03)
|> yLine(length = -armThick, tag = $seg01)
|> angledLineThatIntersects({
angle = HALF_TURN,
offset = -armThick,
@ -80,15 +80,15 @@ part001 = startSketchOn('-XZ')
angle = -bottomAng,
to = -totalHeightHalf - armThick,
}, %, $seg02)
|> xLineTo(segEndX(seg03, %) + 0, %)
|> yLine(-segLen(seg01, %), %)
|> xLine(length = endAbsolute = segEndX(seg03) + 0)
|> yLine(length = -segLen(seg01, %))
|> angledLineThatIntersects({
angle = HALF_TURN,
offset = -armThick,
intersectTag = seg02
}, %)
|> angledLineToY([segAng(seg02, %) + 180, -baseHeight], %)
|> xLineTo(ZERO, %)
|> xLine(endAbsolute = ZERO)
|> close()
|> extrude(length = 4)`
)
@ -443,7 +443,7 @@ test(
await page.waitForTimeout(500)
code += `
|> xLine(7.25, %)`
|> xLine(length = 7.25)`
await expect(page.locator('.cm-content')).toHaveText(code)
await page
@ -609,7 +609,7 @@ test.describe(
await page.waitForTimeout(100)
code += `
|> xLine(7.25, %)`
|> xLine(length = 7.25)`
await expect(u.codeLocator).toHaveText(code)
await page
@ -704,7 +704,7 @@ test.describe(
await page.waitForTimeout(100)
code += `
|> xLine(184.3, %)`
|> xLine(length = 184.3)`
await expect(u.codeLocator).toHaveText(code)
await page

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -1,5 +1,5 @@
{
"original_source_code": "sketch001 = startSketchOn('XZ')\nprofile001 = startProfileAt([57.81, 250.51], sketch001)\n |> line(end = [121.13, 56.63], tag = $seg02)\n |> line(end = [83.37, -34.61], tag = $seg01)\n |> line(end = [19.66, -116.4])\n |> line(end = [-221.8, -41.69])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude001 = extrude(profile001, length = 200)\nsketch002 = startSketchOn('XZ')\n |> startProfileAt([-73.64, -42.89], %)\n |> xLine(173.71, %)\n |> line(end = [-22.12, -94.4])\n |> xLine(-156.98, %)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude002 = extrude(sketch002, length = 50)\nsketch003 = startSketchOn('XY')\n |> startProfileAt([52.92, 157.81], %)\n |> angledLine([0, 176.4], %, $rectangleSegmentA001)\n |> angledLine([\n segAng(rectangleSegmentA001) - 90,\n 53.4\n ], %, $rectangleSegmentB001)\n |> angledLine([\n segAng(rectangleSegmentA001),\n -segLen(rectangleSegmentA001)\n ], %, $rectangleSegmentC001)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude003 = extrude(sketch003, length = 20)\n",
"original_source_code": "sketch001 = startSketchOn('XZ')\nprofile001 = startProfileAt([57.81, 250.51], sketch001)\n |> line(end = [121.13, 56.63], tag = $seg02)\n |> line(end = [83.37, -34.61], tag = $seg01)\n |> line(end = [19.66, -116.4])\n |> line(end = [-221.8, -41.69])\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude001 = extrude(profile001, length = 200)\nsketch002 = startSketchOn('XZ')\n |> startProfileAt([-73.64, -42.89], %)\n |> xLine(length = 173.71)\n |> line(end = [-22.12, -94.4])\n |> xLine(length = -156.98)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude002 = extrude(sketch002, length = 50)\nsketch003 = startSketchOn('XY')\n |> startProfileAt([52.92, 157.81], %)\n |> angledLine([0, 176.4], %, $rectangleSegmentA001)\n |> angledLine([\n segAng(rectangleSegmentA001) - 90,\n 53.4\n ], %, $rectangleSegmentB001)\n |> angledLine([\n segAng(rectangleSegmentA001),\n -segLen(rectangleSegmentA001)\n ], %, $rectangleSegmentC001)\n |> line(endAbsolute = [profileStartX(%), profileStartY(%)])\n |> close()\nextrude003 = extrude(sketch003, length = 20)\n",
"prompt": "make this neon green please, use #39FF14",
"source_ranges": [
{
@ -29,5 +29,5 @@
}
}
],
"kcl_version": "0.2.46"
"kcl_version": "0.2.47"
}

View File

@ -83,9 +83,9 @@ export const TEST_CODE_GIZMO = `part001 = startSketchOn('XZ')
|> line(end = [7.13, 4 + 0])
|> angledLine({ angle: 3 + 0, length: 3.14 + 0 }, %)
|> line(endAbsolute = [20.14 + 0, -0.14 + 0])
|> xLineTo(29 + 0, %)
|> yLine(-3.14 + 0, %, $a)
|> xLine(1.63, %)
|> xLine(endAbsolute = 29 + 0)
|> yLine(length = -3.14 + 0, tag = $a)
|> xLine(length = 1.63)
|> angledLineOfXLength({ angle: 3 + 0, length: 3.14 }, %)
|> angledLineOfYLength({ angle: 30, length: 3 + 0 }, %)
|> angledLineToX({ angle: 22.14 + 0, to: 12 }, %)
@ -150,7 +150,7 @@ sketch001 = startSketchOn(box, revolveAxis)
sketch001 = startSketchOn('XZ')
|> startProfileAt([0.0, 0.0], %)
|> xLine(0.0, %)
|> xLine(length = 0.0)
|> close()
`

View File

@ -122,7 +122,7 @@ test.describe('Test network and connection issues', () => {
await expect(page.locator('.cm-content'))
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${commonPoints.startAt}, sketch001)
|> xLine(${commonPoints.num1}, %)`)
|> xLine(length = ${commonPoints.num1})`)
// Expect the network to be up
await expect(networkToggle).toContainText('Connected')
@ -215,7 +215,7 @@ test.describe('Test network and connection issues', () => {
await expect.poll(u.normalisedEditorCode)
.toBe(`sketch001 = startSketchOn('XZ')
profile001 = startProfileAt([12.34, -12.34], sketch001)
|> xLine(12.34, %)
|> xLine(length = 12.34)
|> line(end = [-12.34, 12.34])
`)
@ -225,9 +225,9 @@ profile001 = startProfileAt([12.34, -12.34], sketch001)
await expect.poll(u.normalisedEditorCode)
.toBe(`sketch001 = startSketchOn('XZ')
profile001 = startProfileAt([12.34, -12.34], sketch001)
|> xLine(12.34, %)
|> xLine(length = 12.34)
|> line(end = [-12.34, 12.34])
|> xLine(-12.34, %)
|> xLine(length = -12.34)
`)

View File

@ -18,7 +18,7 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> startProfileAt([-10, -10], %)
|> line(end = [20, 0])
|> line(end = [0, 20])
|> xLine(-20, %)
|> xLine(length = -20)
`
)
})
@ -57,7 +57,7 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
.click()
await expect(page.locator('.cm-content')).toHaveText(
`length001 = 20sketch001 = startSketchOn('XY') |> startProfileAt([-10, -10], %) |> line(end = [20, 0]) |> angledLine([90, length001], %) |> xLine(-20, %)`
`length001 = 20sketch001 = startSketchOn('XY') |> startProfileAt([-10, -10], %) |> line(end = [20, 0]) |> angledLine([90, length001], %) |> xLine(length = -20)`
)
// Make sure we didn't pop out of sketch mode.
@ -89,9 +89,9 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> line(end = [41.19, 58.97 + 5])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 120], %)
|> xLine(-385.34, %, $seg_what)
|> yLine(-170.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -385.34, tag = $seg_what)
|> yLine(length = -170.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -153,9 +153,9 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
@ -285,9 +285,9 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -395,9 +395,9 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -508,9 +508,9 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -610,9 +610,9 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -696,9 +696,9 @@ part001 = startSketchOn('XZ')
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -748,16 +748,16 @@ part002 = startSketchOn('XZ')
{
constraintName: 'Vertical',
codeAfter: [
`|> yLine(130.4, %)`,
`|> yLine(77.79, %)`,
`|> yLine(48.97, %)`,
`|> yLine(length = 130.4)`,
`|> yLine(length = 77.79)`,
`|> yLine(length = 48.97)`,
],
},
{
codeAfter: [
`|> xLine(74.36, %)`,
`|> xLine(9.16, %)`,
`|> xLine(51.19, %)`,
`|> xLine(length = 74.36)`,
`|> xLine(length = 9.16)`,
`|> xLine(length = 51.19)`,
],
constraintName: 'Horizontal',
},
@ -776,9 +776,9 @@ part002 = startSketchOn('XZ')
|> line(end = [51.19, 48.97])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -876,9 +876,9 @@ part002 = startSketchOn('XZ')
|> line(end = [9.16, 77.79])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -957,9 +957,9 @@ part002 = startSketchOn('XZ')
|> line(end = [9.16, 77.79])
part002 = startSketchOn('XZ')
|> startProfileAt([299.05, 231.45], %)
|> xLine(-425.34, %, $seg_what)
|> yLine(-264.06, %)
|> xLine(segLen(seg_what), %)
|> xLine(length = -425.34, tag = $seg_what)
|> yLine(length = -264.06)
|> xLine(length = segLen(seg_what))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])`
)
})
@ -1061,7 +1061,7 @@ part002 = startSketchOn('XZ')
await pollEditorLinesSelectedLength(page, 1)
let activeLinesContent = await page.locator('.cm-activeLine').all()
await expect(activeLinesContent[0]).toHaveText(`|> xLine(3.13, %)`)
await expect(activeLinesContent[0]).toHaveText(`|> xLine(length = 3.13)`)
// Wait for code editor to settle.
await page.waitForTimeout(2000)
@ -1105,7 +1105,9 @@ part002 = startSketchOn('XZ')
await pollEditorLinesSelectedLength(page, 1)
activeLinesContent = await page.locator('.cm-activeLine').all()
await expect(activeLinesContent[0]).toHaveText(`|> xLine(length001, %)`)
await expect(activeLinesContent[0]).toHaveText(
`|> xLine(length = length001)`
)
// checking the count of the overlays is a good proxy check that the client sketch scene is in a good state
await expect(page.getByTestId('segment-overlay')).toHaveCount(2)

View File

@ -212,10 +212,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|> line(end = [0.5, -14 + 0])
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|> line(endAbsolute = [5 + 33, 20 + 11.5 + 0])
|> xLineTo(5 + 9 - 5, %)
|> yLineTo(20 + -10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> xLine(endAbsolute = 5 + 9 - 5)
|> yLine(endAbsolute = 20 + -10.77, tag = $a)
|> xLine(length = 26.04)
|> yLine(length = 21.14 + 0)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 5 + 26 }, %)
@ -239,7 +239,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await u.expectCmdLog('[data-message-type="execution-done"]')
await u.closeDebugPanel()
await page.getByText('xLineTo(5 + 9 - 5, %)').click()
await page.getByText('xLine(endAbsolute = 5 + 9 - 5)').click()
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(500)
@ -358,9 +358,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await clickConstrained({
hoverPos: { x: xLineTo.x, y: xLineTo.y },
constraintType: 'xAbsolute',
expectBeforeUnconstrained: 'xLineTo(5 + 9 - 5, %)',
expectAfterUnconstrained: 'xLineTo(9, %)',
expectFinal: 'xLineTo(xAbs002, %)',
expectBeforeUnconstrained: 'xLine(endAbsolute = 5 + 9 - 5)',
expectAfterUnconstrained: 'xLine(endAbsolute = 9)',
expectFinal: 'xLine(endAbsolute = xAbs002)',
ang: ang + 180,
steps: 8,
locator: '[data-overlay-toolbar-index="3"]',
@ -386,10 +386,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|> line(end = [0.5, yRel001])
|> angledLine({ angle = angle001, length = len001 }, %)
|> line(endAbsolute = [33, yAbs001])
|> xLineTo(xAbs002, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> xLine(endAbsolute = xAbs002)
|> yLine(endAbsolute = -10.77, tag = $a)
|> xLine(length = 26.04)
|> yLine(length = 21.14 + 0)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
`
)
@ -404,7 +404,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await u.expectCmdLog('[data-message-type="execution-done"]')
await u.closeDebugPanel()
await page.getByText('xLine(26.04, %)').click()
await page.getByText('xLine(length = 26.04)').click()
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(500)
@ -424,9 +424,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await clickUnconstrained({
hoverPos: { x: yLineTo.x, y: yLineTo.y - 200 },
constraintType: 'yAbsolute',
expectBeforeUnconstrained: 'yLineTo(-10.77, %, $a)',
expectAfterUnconstrained: 'yLineTo(yAbs002, %, $a)',
expectFinal: 'yLineTo(-10.77, %, $a)',
expectBeforeUnconstrained: 'yLine(endAbsolute = -10.77, tag = $a)',
expectAfterUnconstrained: 'yLine(endAbsolute = yAbs002, tag = $a)',
expectFinal: 'yLine(endAbsolute = -10.77, tag = $a)',
ang: ang + 180,
locator: '[data-overlay-toolbar-index="4"]',
})
@ -437,9 +437,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await clickUnconstrained({
hoverPos: { x: xLine.x, y: xLine.y },
constraintType: 'xRelative',
expectBeforeUnconstrained: 'xLine(26.04, %)',
expectAfterUnconstrained: 'xLine(xRel002, %)',
expectFinal: 'xLine(26.04, %)',
expectBeforeUnconstrained: 'xLine(length = 26.04)',
expectAfterUnconstrained: 'xLine(length = xRel002)',
expectFinal: 'xLine(length = 26.04)',
steps: 10,
ang: ang + 180,
locator: '[data-overlay-toolbar-index="5"]',
@ -459,10 +459,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|> line(end = [0.5, -14 + 0])
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|> line(endAbsolute = [33, 11.5 + 0])
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> xLine(endAbsolute = 9 - 5)
|> yLine(endAbsolute = -10.77, tag = $a)
|> xLine(length = 26.04)
|> yLine(length = 21.14 + 0)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
@ -488,7 +488,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await u.closeDebugPanel()
await page.waitForTimeout(500)
await page.getByText('xLineTo(9 - 5, %)').click()
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(500)
@ -506,9 +506,9 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await clickConstrained({
hoverPos: { x: yLine.x, y: yLine.y },
constraintType: 'yRelative',
expectBeforeUnconstrained: 'yLine(21.14 + 0, %)',
expectAfterUnconstrained: 'yLine(21.14, %)',
expectFinal: 'yLine(yRel001, %)',
expectBeforeUnconstrained: 'yLine(length = 21.14 + 0)',
expectAfterUnconstrained: 'yLine(length = 21.14)',
expectFinal: 'yLine(length = yRel001)',
ang: ang + 180,
locator: '[data-overlay-toolbar-index="6"]',
})
@ -591,10 +591,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|> line(end = [0.5, -14 + 0])
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|> line(endAbsolute = [33, 11.5 + 0])
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> xLine(endAbsolute = 9 - 5)
|> yLine(endAbsolute = -10.77, tag = $a)
|> xLine(length = 26.04)
|> yLine(length = 21.14 + 0)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
@ -619,7 +619,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await u.expectCmdLog('[data-message-type="execution-done"]')
await u.closeDebugPanel()
await page.getByText('xLineTo(9 - 5, %)').click()
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(500)
@ -755,10 +755,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|> line(end = [0.5, -14 + 0])
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|> line(endAbsolute = [33, 11.5 + 0])
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> xLine(endAbsolute = 9 - 5)
|> yLine(endAbsolute = -10.77, tag = $a)
|> xLine(length = 26.04)
|> yLine(length = 21.14 + 0)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
@ -783,7 +783,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await u.expectCmdLog('[data-message-type="execution-done"]')
await u.closeDebugPanel()
await page.getByText('xLineTo(9 - 5, %)').click()
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(500)
@ -943,10 +943,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
|> line(end = [0.5, -14 + 0])
|> angledLine({ angle = 3 + 0, length = 32 + 0 }, %)
|> line(endAbsolute = [33, 11.5 + 0])
|> xLineTo(9 - 5, %)
|> yLineTo(-10.77, %, $a)
|> xLine(26.04, %)
|> yLine(21.14 + 0, %)
|> xLine(endAbsolute = 9 - 5)
|> yLine(endAbsolute = -10.77, tag = $a)
|> xLine(length = 26.04)
|> yLine(length = 21.14 + 0)
|> angledLineOfXLength({ angle = 181 + 0, length = 23.14 }, %)
|> angledLineOfYLength({ angle = -91, length = 19 + 0 }, %)
|> angledLineToX({ angle = 3 + 0, to = 26 }, %)
@ -972,7 +972,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
await u.expectCmdLog('[data-message-type="execution-done"]')
await u.closeDebugPanel()
await page.getByText('xLineTo(9 - 5, %)').click()
await page.getByText('xLine(endAbsolute = 9 - 5)').click()
await page.waitForTimeout(100)
await page.getByRole('button', { name: 'Edit Sketch' }).click()
await page.waitForTimeout(500)
@ -1056,7 +1056,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
ang = await u.getAngle(`[data-overlay-index="${6}"]`)
await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'yLine(21.14 + 0, %)',
codeToBeDeleted: 'yLine(length = 21.14 + 0)',
stdLibFnName: 'yLine',
ang: ang + 180,
locator: '[data-overlay-toolbar-index="6"]',
@ -1066,7 +1066,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
ang = await u.getAngle(`[data-overlay-index="${5}"]`)
await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'xLine(26.04, %)',
codeToBeDeleted: 'xLine(length = 26.04)',
stdLibFnName: 'xLine',
ang: ang + 180,
locator: '[data-overlay-toolbar-index="5"]',
@ -1076,7 +1076,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
ang = await u.getAngle(`[data-overlay-index="${4}"]`)
await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'yLineTo(-10.77, %, $a)',
codeToBeDeleted: 'yLine(endAbsolute = -10.77, tag = $a)',
stdLibFnName: 'yLineTo',
ang: ang + 180,
locator: '[data-overlay-toolbar-index="4"]',
@ -1086,7 +1086,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
ang = await u.getAngle(`[data-overlay-index="${3}"]`)
await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'xLineTo(9 - 5, %)',
codeToBeDeleted: 'xLine(endAbsolute = 9 - 5)',
stdLibFnName: 'xLineTo',
ang: ang + 180,
locator: '[data-overlay-toolbar-index="3"]',
@ -1151,10 +1151,10 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
const cases = [
'line(end = [22, 2], tag = $seg01)',
'angledLine([5, 23.03], %, $seg01)',
'xLine(23, %, $seg01)',
'yLine(-8, %, $seg01)',
'xLineTo(30, %, $seg01)',
'yLineTo(-4, %, $seg01)',
'xLine(length = 23, tag = $seg01)',
'yLine(length = -8, tag = $seg01)',
'xLine(endAbsolute = 30, tag = $seg01)',
'yLine(endAbsolute = -4, tag = $seg01)',
'angledLineOfXLength([3, 30], %, $seg01)',
'angledLineOfXLength({ angle = 3, length = 30 }, %, $seg01)',
'angledLineOfYLength([3, 1.5], %, $seg01)',
@ -1167,7 +1167,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
for (const doesHaveTagOutsideSketch of [true, false]) {
for (const lineOfInterest of cases) {
const isObj = lineOfInterest.includes('{ angle = 3,')
test(`${lineOfInterest.split('(')[0]}${isObj ? '-[obj-input]' : ''}${
test(`${lineOfInterest.split('=')[0]}${isObj ? '-[obj-input]' : ''}${
doesHaveTagOutsideSketch ? '-[tagOutsideSketch]' : ''
}`, async ({ page, editor, homePage }) => {
await page.addInitScript(
@ -1294,19 +1294,19 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
after: `line(end = [22.94, 2.01], tag = $seg01)`,
},
{
before: `xLine(23 + 0, %, $seg01)`,
before: `xLine(length = 23 + 0, tag = $seg01)`,
after: `line(end = [23, 0], tag = $seg01)`,
},
{
before: `yLine(-8 + 0, %, $seg01)`,
before: `yLine(length = -8 + 0, tag = $seg01)`,
after: `line(end = [0, -8], tag = $seg01)`,
},
{
before: `xLineTo(30 + 0, %, $seg01)`,
before: `xLine(endAbsolute = 30 + 0, tag = $seg01)`,
after: `line(end = [25, 0], tag = $seg01)`,
},
{
before: `yLineTo(-4 + 0, %, $seg01)`,
before: `yLine(endAbsolute = -4 + 0, tag = $seg01)`,
after: `line(end = [0, -10], tag = $seg01)`,
},
{
@ -1329,7 +1329,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
for (const { before, after } of cases) {
const isObj = before.includes('{ angle = 3')
test(`${before.split('(')[0]}${isObj ? '-[obj-input]' : ''}`, async ({
test(`${before.split('=')[0]}${isObj ? '-[obj-input]' : ''}`, async ({
page,
editor,
homePage,

View File

@ -75,7 +75,7 @@ test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
await expect(page.locator('.cm-content'))
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${commonPoints.startAt}, sketch001)
|> xLine(${commonPoints.num1}, %)`)
|> xLine(length = ${commonPoints.num1})`)
await page.waitForTimeout(100)
await page.mouse.click(startXPx + PUR * 20, 500 - PUR * 20)
@ -83,17 +83,17 @@ test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${
commonPoints.startAt
}, sketch001)
|> xLine(${commonPoints.num1}, %)
|> yLine(${commonPoints.num1 + 0.01}, %)`)
|> xLine(length = ${commonPoints.num1})
|> yLine(length = ${commonPoints.num1 + 0.01})`)
await page.waitForTimeout(100)
await page.mouse.click(startXPx, 500 - PUR * 20)
await expect(page.locator('.cm-content'))
.toHaveText(`sketch001 = startSketchOn('XZ')profile001 = startProfileAt(${
commonPoints.startAt
}, sketch001)
|> xLine(${commonPoints.num1}, %)
|> yLine(${commonPoints.num1 + 0.01}, %)
|> xLine(${commonPoints.num2 * -1}, %)`)
|> xLine(length = ${commonPoints.num1})
|> yLine(length = ${commonPoints.num1 + 0.01})
|> xLine(length = ${commonPoints.num2 * -1})`)
// deselect line tool
await page.getByRole('button', { name: 'line Line', exact: true }).click()
@ -158,7 +158,9 @@ test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
// check the same selection again by putting cursor in code first then selecting axis
await test.step(`Same selection but code selection then axis`, async () => {
await page.getByText(` |> xLine(${commonPoints.num2 * -1}, %)`).click()
await page
.getByText(` |> xLine(length = ${commonPoints.num2 * -1})`)
.click()
await page.keyboard.down('Shift')
await constrainButton.click()
await expect(absXButton).toBeDisabled()
@ -182,7 +184,9 @@ test.describe('Testing selections', { tag: ['@skipWin'] }, () => {
process.platform === 'linux' ? 'Control' : 'Meta'
)
await page.waitForTimeout(100)
await page.getByText(` |> xLine(${commonPoints.num2 * -1}, %)`).click()
await page
.getByText(` |> xLine(length = ${commonPoints.num2 * -1})`)
.click()
await expect(page.locator('.cm-cursor')).toHaveCount(2)
await page.waitForTimeout(500)
@ -537,9 +541,9 @@ profile003 = startProfileAt([40.16, -120.48], sketch006)
|> line(end = [7.13, 4 + 0])
|> angledLine({ angle = 3 + 0, length = 3.14 + 0 }, %)
|> line(endAbsolute = [20.14 + 0, -0.14 + 0])
|> xLineTo(29 + 0, %)
|> yLine(-3.14 + 0, %, $a)
|> xLine(1.63, %)
|> xLine(endAbsolute = 29 + 0)
|> yLine(length = -3.14 + 0, tag = $a)
|> xLine(length = 1.63)
|> angledLineOfXLength({ angle = 3 + 0, length = 3.14 }, %)
|> angledLineOfYLength({ angle = 30, length = 3 + 0 }, %)
|> angledLineToX({ angle = 22.14 + 0, to = 12 }, %)

View File

@ -52,14 +52,14 @@ armThick = 0.5
totalLen = 9.5
part001 = startSketchOn('-XZ')
|> startProfileAt([0, 0], %)
|> yLine(baseHeight, %)
|> xLine(baseLen, %)
|> yLine(length = baseHeight)
|> xLine(length = baseLen)
|> angledLineToY({
angle = topAng,
to = totalHeightHalf,
}, %, $seg04)
|> xLineTo(totalLen, %, $seg03)
|> yLine(-armThick, %, $seg01)
|> xLine(endAbsolute = totalLen, tag = $seg03)
|> yLine(length = -armThick, tag = $seg01)
|> angledLineThatIntersects({
angle = HALF_TURN,
offset = -armThick,
@ -70,15 +70,15 @@ part001 = startSketchOn('-XZ')
angle = -bottomAng,
to = -totalHeightHalf - armThick,
}, %, $seg02)
|> xLineTo(segEndX(seg03) + 0, %)
|> yLine(-segLen(seg01), %)
|> xLine(endAbsolute = segEndX(seg03) + 0)
|> yLine(length = -segLen(seg01))
|> angledLineThatIntersects({
angle = HALF_TURN,
offset = -armThick,
intersectTag = seg02
}, %)
|> angledLineToY([segAng(seg02) + 180, -baseHeight], %)
|> xLineTo(ZERO, %)
|> xLine(endAbsolute = ZERO)
|> close()
|> extrude(length = 4)`
)

View File

@ -91,7 +91,7 @@
"fmt-check": "prettier --check ./src *.ts *.json *.js ./e2e ./packages ./rust/kcl-language-server",
"fetch:wasm": "./scripts/get-latest-wasm-bundle.sh",
"fetch:wasm:windows": "./scripts/get-latest-wasm-bundle.ps1",
"fetch:samples": "rm -rf public/kcl-samples* && curl -L -o public/kcl-samples.zip https://github.com/KittyCAD/kcl-samples/archive/refs/heads/next.zip && unzip -o public/kcl-samples.zip -d public && mv public/kcl-samples-* public/kcl-samples",
"fetch:samples": "rm -rf public/kcl-samples* && curl -L -o public/kcl-samples.zip https://github.com/KittyCAD/kcl-samples/archive/refs/heads/achalmers/kw-args-xylineto.zip && unzip -o public/kcl-samples.zip -d public && mv public/kcl-samples-* public/kcl-samples",
"build:wasm-dev": "yarn wasm-prep && (cd rust && wasm-pack build kcl-wasm-lib --dev --target web --out-dir pkg && cargo test -p kcl-lib export_bindings) && yarn isomorphic-copy-wasm && yarn fmt",
"build:wasm:nocopy": "yarn wasm-prep && cd rust && wasm-pack build kcl-wasm-lib --release --target web --out-dir pkg && cargo test -p kcl-lib export_bindings",
"build:wasm": "yarn build:wasm:nocopy && cp rust/kcl-wasm-lib/pkg/kcl_wasm_lib_bg.wasm public && yarn fmt",

View File

@ -14,11 +14,11 @@ fn dividerSketch(plane) {
|> tangentialArcTo([-16.6, profileStartY(%) - 15.52], %)
|> tangentialArcTo([-18.38, profileStartY(%) - 18.63], %)
|> line(end = [-1.25, -2.6])
|> xLine(6.04, %)
|> xLine(length = 6.04)
|> line(end = [6.68, 7.87])
|> tangentialArcTo([10.06, profileStartY(%) - 12.69], %)
|> line(end = [7.28, -8.47])
|> xLine(5.98, %)
|> xLine(length = 5.98)
|> line(end = [-1.3, 3.01])
|> tangentialArcTo([22.45, profileStartY(%) - 2.84], %)
|> tangentialArcTo([25.08, profileStartY(%) + 6.42], %)
@ -106,7 +106,7 @@ export fn backSlats(plane, length) {
fn armRestPath(plane) {
sketch005 = startSketchOn(plane)
|> startProfileAt([20, 33], %)
|> xLine(-20, %)
|> xLine(length = -20)
|> arc({
angleStart = 90,
angleEnd = 180,
@ -118,10 +118,10 @@ fn armRestPath(plane) {
fn armRestProfile(plane, offset) {
sketch006 = startSketchOn(plane)
|> startProfileAt([offset, 32.4], %)
|> xLine(1.3, %)
|> xLine(length = 1.3)
|> line(end = [0.3, 0.6])
|> line(end = [-0.3, 0.6])
|> xLine(-2.6, %)
|> xLine(length = -2.6)
|> line(end = [-0.3, -0.6])
|> line(end = [0.3, -0.6])
|> close()

View File

@ -22,33 +22,33 @@ fn rail8020(originStart, railHeight, railLength) {
angleEnd = 0,
radius = 0.072 / 4 * railHeight
}, %)
|> xLine(0.1 * railHeight, %)
|> xLine(length = 0.1 * railHeight)
|> arc({
angleStart = 180,
angleEnd = 0,
radius = 0.072 / 4 * railHeight
}, %)
|> xLine(0.06 * railHeight, %, $edge1)
|> yLine(0.087 * railHeight, %, $edge2)
|> xLine(-0.183 * railHeight, %, $edge3)
|> xLine(length = 0.06 * railHeight, tag = $edge1)
|> yLine(length = 0.087 * railHeight, tag = $edge2)
|> xLine(length = -0.183 * railHeight, tag = $edge3)
|> angledLineToY({
angle = 45,
to = (1 - 0.356) / 2 * railHeight + originStart[1]
}, %, $edge4)
|> xLine(0.232 * railHeight, %, $edge5)
|> xLine(length = 0.232 * railHeight, tag = $edge5)
|> angledLineToY({
angle = -45,
to = 0.087 * railHeight + originStart[1]
}, %, $edge6)
|> xLine(-0.183 * railHeight, %, $edge7)
|> yLine(-0.087 * railHeight, %, $edge8)
|> xLine(0.06 * railHeight, %)
|> xLine(length = -0.183 * railHeight, tag = $edge7)
|> yLine(length = -0.087 * railHeight, tag = $edge8)
|> xLine(length = 0.06 * railHeight)
|> arc({
angleStart = 180,
angleEnd = 0,
radius = 0.072 / 4 * railHeight
}, %)
|> xLine(0.1 * railHeight, %)
|> xLine(length = 0.1 * railHeight)
|> arc({
angleStart = 180,
angleEnd = 0,
@ -66,33 +66,33 @@ fn rail8020(originStart, railHeight, railLength) {
angleEnd = 90,
radius = 0.072 / 4 * railHeight
}, %)
|> yLine(0.1 * railHeight, %)
|> yLine(length = 0.1 * railHeight)
|> arc({
angleStart = 270,
angleEnd = 90,
radius = 0.072 / 4 * railHeight
}, %)
|> yLine(0.06 * railHeight, %, $edge9)
|> xLine(-0.087 * railHeight, %, $edge10)
|> yLine(-0.183 * railHeight, %, $edge11) // edge11
|> yLine(length = 0.06 * railHeight, tag = $edge9)
|> xLine(length = -0.087 * railHeight, tag = $edge10)
|> yLine(length = -0.183 * railHeight, tag = $edge11) // edge11
|> angledLineToX({
angle = 135,
to = ((1 - 0.356) / 2 + 0.356) * railHeight + originStart[0]
}, %, $edge12) // edge12
|> yLine(0.232 * railHeight, %, $edge13) // 13
|> yLine(length = 0.232 * railHeight, tag = $edge13) // 13
|> angledLineToX({
angle = 45,
to = (1 - 0.087) * railHeight + originStart[0]
}, %, $edge14) // 14
|> yLine(-0.183 * railHeight, %, $edge15) // 15
|> xLine(0.087 * railHeight, %, $edge16)
|> yLine(0.06 * railHeight, %)
|> yLine(length = -0.183 * railHeight, tag = $edge15) // 15
|> xLine(length = 0.087 * railHeight, tag = $edge16)
|> yLine(length = 0.06 * railHeight)
|> arc({
angleStart = 270,
angleEnd = 90,
radius = 0.072 / 4 * railHeight
}, %)
|> yLine(0.1 * railHeight, %)
|> yLine(length = 0.1 * railHeight)
|> arc({
angleStart = 270,
angleEnd = 90,
@ -110,33 +110,33 @@ fn rail8020(originStart, railHeight, railLength) {
angleEnd = -180,
radius = 0.072 / 4 * railHeight
}, %)
|> xLine(-0.1 * railHeight, %)
|> xLine(length = -0.1 * railHeight)
|> arc({
angleStart = 0,
angleEnd = -180,
radius = 0.072 / 4 * railHeight
}, %)
|> xLine(-0.06 * railHeight, %, $edge17)
|> yLine(-0.087 * railHeight, %, $edge18)
|> xLine(0.183 * railHeight, %, $edge19)
|> xLine(length = -0.06 * railHeight, tag = $edge17)
|> yLine(length = -0.087 * railHeight, tag = $edge18)
|> xLine(length = 0.183 * railHeight, tag = $edge19)
|> angledLineToY({
angle = 45,
to = ((1 - 0.356) / 2 + 0.356) * railHeight + originStart[1]
}, %, $edge20)
|> xLine(-0.232 * railHeight, %, $edge21)
|> xLine(length = -0.232 * railHeight, tag = $edge21)
|> angledLineToY({
angle = 135,
to = (1 - 0.087) * railHeight + originStart[1]
}, %, $edge22)
|> xLine(0.183 * railHeight, %, $edge23)
|> yLine(0.087 * railHeight, %, $edge24)
|> xLine(-0.06 * railHeight, %)
|> xLine(length = 0.183 * railHeight, tag = $edge23)
|> yLine(length = 0.087 * railHeight, tag = $edge24)
|> xLine(length = -0.06 * railHeight)
|> arc({
angleStart = 0,
angleEnd = -180,
radius = 0.072 / 4 * railHeight
}, %)
|> xLine(-0.1 * railHeight, %)
|> xLine(length = -0.1 * railHeight)
|> arc({
angleStart = 0,
angleEnd = -180,
@ -154,33 +154,33 @@ fn rail8020(originStart, railHeight, railLength) {
angleEnd = -90,
radius = 0.072 / 4 * railHeight
}, %)
|> yLine(-0.1 * railHeight, %)
|> yLine(length = -0.1 * railHeight)
|> arc({
angleStart = 90,
angleEnd = -90,
radius = 0.072 / 4 * railHeight
}, %)
|> yLine(-0.06 * railHeight, %, $edge25)
|> xLine(0.087 * railHeight, %, $edge26)
|> yLine(0.183 * railHeight, %, $edge27)
|> yLine(length = -0.06 * railHeight, tag = $edge25)
|> xLine(length = 0.087 * railHeight, tag = $edge26)
|> yLine(length = 0.183 * railHeight, tag = $edge27)
|> angledLineToX({
angle = 135,
to = (1 - 0.356) / 2 * railHeight + originStart[0]
}, %, $edge28)
|> yLine(-0.232 * railHeight, %, $edge29)
|> yLine(length = -0.232 * railHeight, tag = $edge29)
|> angledLineToX({
angle = 45,
to = 0.087 * railHeight + originStart[0]
}, %, $edge30)
|> yLine(0.183 * railHeight, %, $edge31)
|> xLine(-0.087 * railHeight, %, $edge32)
|> yLine(-0.06 * railHeight, %)
|> yLine(length = 0.183 * railHeight, tag = $edge31)
|> xLine(length = -0.087 * railHeight, tag = $edge32)
|> yLine(length = -0.06 * railHeight)
|> arc({
angleStart = 90,
angleEnd = -90,
radius = 0.072 / 4 * railHeight
}, %)
|> yLine(-0.1 * railHeight, %)
|> yLine(length = -0.1 * railHeight)
|> arc({
angleStart = 90,
angleEnd = -90,

View File

@ -81,9 +81,9 @@ spacers = extrude(spacerSketch, length = -spacerLength)
|> appearance(color = "#dbcd70", roughness = 90, metalness = 90)
rotorSlottedSketch = startSketchOn(rotor, 'START')
|> startProfileAt([2.17, 2.56], %)
|> xLine(0.12, %)
|> yLine(2.56, %)
|> xLine(-0.12, %)
|> xLine(length = 0.12)
|> yLine(length = 2.56)
|> xLine(length = -0.12)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternCircular2d(
@ -96,9 +96,9 @@ rotorSlotted = extrude(rotorSlottedSketch, length = -rotorSinglePlateThickness /
secondRotorSlottedSketch = startSketchOn(secondRotor, 'END')
|> startProfileAt([-2.17, 2.56], %)
|> xLine(-0.12, %)
|> yLine(2.56, %)
|> xLine(0.12, %)
|> xLine(length = -0.12)
|> yLine(length = 2.56)
|> xLine(length = 0.12)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternCircular2d(

View File

@ -65,13 +65,13 @@ lugHoles = startSketchOn(lugBase, 'END')
// Add detail to the wheel center by revolving curved edge profiles
wheelCenterInner = startSketchOn('XY')
|> startProfileAt([(lugSpacing - 1.5) / 2, 0], %)
|> yLine(-wheelWidth / 10 - (wheelWidth / 20), %)
|> yLine(length = -wheelWidth / 10 - (wheelWidth / 20))
|> bezierCurve({
to = [-0.4, 0.3],
control1 = [-0.3, 0],
control2 = [0, 0.3]
}, %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> revolve({ axis = 'y' }, %)
@ -79,13 +79,13 @@ wheelCenterInner = startSketchOn('XY')
wheelCenterOuter = startSketchOn('XY')
|> startProfileAt([(lugSpacing + 1.5) / 2, 0], %)
|> yLine(-wheelWidth / 10 - (wheelWidth / 20), %)
|> yLine(length = -wheelWidth / 10 - (wheelWidth / 20))
|> bezierCurve({
to = [0.4, -0.1],
control1 = [0.3, 0],
control2 = [0.2, -0.3]
}, %)
|> yLineTo(-wheelWidth / 20, %)
|> yLine(endAbsolute = -wheelWidth / 20)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> revolve({ axis = 'y' }, %)
@ -120,7 +120,7 @@ fn spoke(spokeGap, spokeAngle, spokeThickness) {
offset / 1.5
]
}, %)
|> yLine(-wheelWidth / 15, %)
|> yLine(length = -wheelWidth / 15)
|> bezierCurve({
to = [
-(wheelDiameter - lugSpacing - 2.9) / 2,
@ -160,38 +160,38 @@ startSketchOn('XY')
wheelDiameter / 2,
-wheelWidth + backSpacing + offset
], %)
|> yLine(wheelWidth * 0.25, %)
|> yLine(length = wheelWidth * 0.25)
|> line(end = [-wheelWidth * 0.02, wheelWidth * 0.02])
|> yLine(wheelWidth * 0.25, %)
|> yLine(length = wheelWidth * 0.25)
|> line(end = [wheelWidth * 0.02, wheelWidth * 0.02])
|> yLineTo(backSpacing + offset, %)
|> yLine(endAbsolute = backSpacing + offset)
|> line(end = [wheelWidth * 0.05, wheelWidth * .01])
|> yLine(wheelWidth * 0.05, %)
|> xLine(-wheelWidth * 0.03, %)
|> yLine(-wheelWidth * 0.02, %)
|> yLine(length = wheelWidth * 0.05)
|> xLine(length = -wheelWidth * 0.03)
|> yLine(length = -wheelWidth * 0.02)
|> line(end = [-wheelWidth * 0.05, -wheelWidth * 0.01])
|> yLine(-backSpacing * 0.7, %)
|> yLine(length = -backSpacing * 0.7)
|> line(end = [
-wheelDiameter * 0.01,
-wheelWidth * 0.02
])
|> yLineTo(offset - 0.2, %)
|> yLine(endAbsolute = offset - 0.2)
|> line(end = [
-wheelDiameter * 0.03,
-wheelWidth * 0.02
])
|> yLine(-wheelWidth * 0.02, %)
|> yLine(length = -wheelWidth * 0.02)
|> line(end = [
wheelDiameter * 0.03,
-wheelWidth * 0.1
])
|> yLine(-wheelWidth * 0.05, %)
|> yLine(length = -wheelWidth * 0.05)
|> line(end = [wheelWidth * 0.02, -wheelWidth * 0.02])
|> yLineTo(-wheelWidth + backSpacing + offset - 0.28, %)
|> yLine(endAbsolute = -wheelWidth + backSpacing + offset - 0.28)
|> line(end = [wheelWidth * 0.05, -wheelWidth * 0.01])
|> yLine(-wheelWidth * 0.02, %)
|> xLine(wheelWidth * 0.03, %)
|> yLine(wheelWidth * 0.05, %)
|> yLine(length = -wheelWidth * 0.02)
|> xLine(length = wheelWidth * 0.03)
|> yLine(length = wheelWidth * 0.05)
|> close()
|> revolve({ axis = 'y' }, %)
|> appearance(color = "#ffffff", metalness = 0, roughness = 0)

View File

@ -26,13 +26,13 @@ fn lug(plane, length, diameter) {
lugSketch = startSketchOn(customPlane)
|> startProfileAt([0 + diameter / 2, 0], %)
|> angledLineOfYLength({ angle = 70, length = lugHeadLength }, %)
|> xLineTo(lugDiameter / 2, %)
|> yLineTo(lugLength, %)
|> xLine(endAbsolute = lugDiameter / 2)
|> yLine(endAbsolute = lugLength)
|> tangentialArc({ offset = 90, radius = 3 * mm() }, %)
|> xLineTo(0 + .001, %, $c1)
|> yLineTo(lugThreadDepth, %)
|> xLineTo(lugThreadDiameter, %)
|> yLineTo(0, %)
|> xLine(endAbsolute = 0 + .001, tag = $c1)
|> yLine(endAbsolute = lugThreadDepth)
|> xLine(endAbsolute = lugThreadDiameter)
|> yLine(endAbsolute = 0)
|> close()
|> revolve({ axis = "Y" }, %)
|> appearance(color = "#dbcd70", roughness = 90, metalness = 90)

View File

@ -68,19 +68,19 @@ primaryTube(3, 25.2, 5, 5, 3)
// Create the mounting flange for the header
flangeSketch = startSketchOn('XY')
|> startProfileAt([3 + 1.3, -1.25], %)
|> xLine(-2.6, %, $seg01)
|> xLine(length = -2.6, tag = $seg01)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> tangentialArc({ radius = .9, offset = 80 }, %)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> xLine(-1.4, %, $seg03)
|> yLine(segLen(seg01), %, $seg04)
|> xLine(3.1, %, $seg05)
|> xLine(length = -1.4, tag = $seg03)
|> yLine(length = segLen(seg01), tag = $seg04)
|> xLine(length = 3.1, tag = $seg05)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> tangentialArc({ radius = 1.5, offset = 80 }, %)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> xLine(segLen(seg05), %, $seg07)
|> yLineTo(profileStartY(%), %, $seg08)
|> xLine(-segLen(seg03), %, $seg09)
|> xLine(length = segLen(seg05), tag = $seg07)
|> yLine(endAbsolute = profileStartY(%), tag = $seg08)
|> xLine(length = -segLen(seg03), tag = $seg09)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> tangentialArc({ radius = .9, offset = 80 }, %)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)

View File

@ -49,7 +49,7 @@ sketch000 = startSketchOn('XY')
// create a profile of the flipper
flipperProfile = startProfileAt([-flipperLength, -32.0], sketch000)
|> line(end = [flipperLength, 2.0])
|> yLine(60.0, %, $backEdge)
|> yLine(length = 60.0, tag = $backEdge)
|> line(end = [-flipperLength, 2.0])
|> arc({
angleEnd = 196.912390,
@ -96,7 +96,7 @@ handleProfile = startProfileAt([0.0, flipperThickness], sketch001)
|> line(end = [-1.710101, 4.698463])
|> line(end = [-141.995517, -51.682142], tag = $handleTopEdge)
|> line(end = [-36.139148, -36.139148])
|> xLine(7.071068, %)
|> xLine(length = 7.071068)
|> close()
// create an extrusion extrude001
@ -127,25 +127,25 @@ sketch002 = startSketchOn(handlePlane)
// create a profile of the grip
gripProfile = startProfileAt([-26.806746, -10.0], sketch002)
|> xLine(gripWidth - (2 * gripFilletRadius), %)
|> xLine(length = gripWidth - (2 * gripFilletRadius))
|> arc({
angleStart = -90.0,
angleEnd = 0.0,
radius = gripFilletRadius
}, %)
|> yLine(gripHeight - (2 * gripFilletRadius), %)
|> yLine(length = gripHeight - (2 * gripFilletRadius))
|> arc({
angleStart = 0.0,
angleEnd = 90.0,
radius = gripFilletRadius
}, %)
|> xLine(-(gripWidth - (2 * gripFilletRadius)), %)
|> xLine(length = -(gripWidth - (2 * gripFilletRadius)))
|> arc({
angleStart = 90.0,
angleEnd = 180.0,
radius = gripFilletRadius
}, %)
|> yLine(-(gripHeight - (2 * gripFilletRadius)), %, $gripEdgeTop)
|> yLine(length = -(gripHeight - (2 * gripFilletRadius)), tag = $gripEdgeTop)
|> arc({
angleStart = 180.0,
angleEnd = 270.0,

View File

@ -38,8 +38,8 @@ plane001 = {
// Cross section of the metal supports
sketch002 = startSketchOn(plane001)
|> startProfileAt([carafeDiameter / 2, 5.7], %)
|> xLine(0.1, %)
|> yLine(-5.2, %, $edge1)
|> xLine(length = 0.1)
|> yLine(length = -5.2, tag = $edge1)
|> arc({
angleStart = 180,
angleEnd = 205,
@ -57,9 +57,9 @@ sketch002 = startSketchOn(plane001)
angleEnd = 90,
radius = 0.5
}, %)
|> xLineTo(0.1, %, $edgeLen)
|> yLine(0.1, %)
|> xLine(segLen(edgeLen) + 0.035, %, $edge4)
|> xLine(endAbsolute = 0.1, tag = $edgeLen)
|> yLine(length = 0.1)
|> xLine(length = segLen(edgeLen) + 0.035, tag = $edge4)
|> arc({
angleStart = 90,
angleEnd = 60,
@ -105,7 +105,7 @@ extrude001 = extrude(sketch003, length = 0.050)
sketch004 = startSketchOn(extrude001, 'END')
|> startProfileAt([0.3, 0.17], %)
|> yLine(1.2, %)
|> yLine(length = 1.2)
|> arc({
angleStart = 90,
angleEnd = -30,
@ -125,14 +125,14 @@ extrude002 = extrude(sketch004, length = -0.050)
// Filter screen
sketch005 = startSketchOn('XZ')
|> startProfileAt([0.15, 1.11], %)
|> xLineTo(carafeDiameter / 2 - 0.2, %)
|> xLine(endAbsolute = carafeDiameter / 2 - 0.2)
|> angledLineToX({
angle = 30,
to = carafeDiameter / 2 - 0.07
}, %, $seg1)
|> angledLine({ angle = -60, length = 0.050 }, %)
|> angledLine({ angle = 30, length = -segLen(seg1) }, %)
|> xLineTo(0.15, %)
|> xLine(endAbsolute = 0.15)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> revolve({ axis = 'y' }, %)
@ -142,9 +142,9 @@ sketch006 = startSketchOn('XZ')
|> startProfileAt([0.1, 1], %)
|> line(end = [0.1, 0])
|> angledLineToX({ angle = 10, to = 0.05 }, %)
|> yLine(10, %)
|> yLine(length = 10)
|> line(end = [0.6, 0])
|> yLine(-.05, %)
|> yLine(length = -.05)
|> tangentialArc({ radius = 0.6, offset = -90 }, %)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
@ -198,10 +198,10 @@ extrude006 = extrude(sketch010, length = carafeHeight)
// Draw and revolve the lid
sketch011 = startSketchOn('XZ')
|> startProfileAt([0.2, carafeHeight - 0.7], %)
|> xLine(carafeDiameter / 2 - 0.3, %)
|> yLine(0.7, %)
|> xLine(0.3, %)
|> yLine(0.4, %)
|> xLine(length = carafeDiameter / 2 - 0.3)
|> yLine(length = 0.7)
|> xLine(length = 0.3)
|> yLine(length = 0.4)
|> line(end = [-0.02, 0.02])
|> bezierCurve({
to = [-carafeDiameter / 2 - 0.1, 1],

View File

@ -95,9 +95,9 @@ keyWay = startSketchOn(body, 'END')
holeRadius * cos(startAngle),
holeRadius * sin(startAngle)
], %)
|> xLine(keywayDepth, %)
|> yLine(-keywayWidth, %)
|> xLine(-keywayDepth, %)
|> xLine(length = keywayDepth)
|> yLine(length = -keywayWidth)
|> xLine(length = -keywayDepth)
|> arc({
angleEnd = 180,
angleStart = -1 * 180 / PI * startAngle + 360,

View File

@ -25,9 +25,9 @@ height = firstStep + secondStep + thirdStep
fn face(plane) {
faceSketch = startSketchOn(plane)
|> startProfileAt([0, 0], %)
|> yLine(height, %)
|> yLine(length = height)
|> angledLineOfYLength({ angle = -45, length = thirdStep }, %)
|> yLine(-secondStep, %)
|> yLine(length = -secondStep)
|> angledLineOfYLength({ angle = -45, length = firstStep }, %)
|> close()
return faceSketch
@ -100,38 +100,38 @@ fn magnetCenterCutout(plane) {
firstStep + thirdStep,
2 * magOuterDiam
], %)
|> xLine(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2), %)
|> xLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))
|> arc({
angleStart = 90.0,
angleEnd = 0.0,
radius = magOuterDiam / 2
}, %)
|> yLine(-(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)), %)
|> xLine(binLength - (4 * magOuterDiam), %)
|> yLine(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2), %)
|> yLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)))
|> xLine(length = binLength - (4 * magOuterDiam))
|> yLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))
|> arc({
angleStart = 180.0,
angleEnd = 90.0,
radius = magOuterDiam / 2
}, %)
|> xLine(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2), %)
|> yLine(binLength - (4 * magOuterDiam), %)
|> xLine(-(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)), %)
|> xLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))
|> yLine(length = binLength - (4 * magOuterDiam))
|> xLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)))
|> arc({
angleStart = 270.0,
angleEnd = 180.0,
radius = magOuterDiam / 2
}, %)
|> yLine(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2), %)
|> xLine(-(binLength - (4 * magOuterDiam)), %, $line012)
|> yLine(-(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)), %)
|> yLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))
|> xLine(length = -(binLength - (4 * magOuterDiam)), tag = $line012)
|> yLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)))
|> arc({
angleStart = 360.0,
angleEnd = 270.0,
radius = magOuterDiam / 2
}, %)
|> xLine(-(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)), %)
|> yLine(-(binLength - (4 * magOuterDiam)), %)
|> xLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)))
|> yLine(length = -(binLength - (4 * magOuterDiam)))
|> close()
return magnetSketch
}
@ -140,9 +140,9 @@ fn magnetCenterCutout(plane) {
fn magnetBase(plane) {
magnetBaseSketch = startSketchOn(plane)
|> startProfileAt([0, 0], %)
|> xLine(binLength, %, $line001)
|> yLine(binLength, %, $line002)
|> xLineTo(profileStartX(%), %, $line003)
|> xLine(length = binLength, tag = $line001)
|> yLine(length = binLength, tag = $line002)
|> xLine(endAbsolute = profileStartX(%), tag = $line003)
|> close(tag = $line004)
|> hole(magnetCenterCutout(plane), %)
return magnetBaseSketch

View File

@ -22,9 +22,9 @@ height = firstStep + secondStep + thirdStep
fn face(plane) {
faceSketch = startSketchOn(plane)
|> startProfileAt([0, 0], %)
|> yLine(height, %)
|> yLine(length = height)
|> angledLineOfYLength({ angle = -45, length = thirdStep }, %)
|> yLine(-secondStep, %)
|> yLine(length = -secondStep)
|> angledLineOfYLength({ angle = -45, length = firstStep }, %)
|> close()
return faceSketch

View File

@ -37,10 +37,10 @@ lipHeight = lipStep1 + lipStep2 + lipStep3 + lipStep4 + lipStep5
fn face(plane) {
faceSketch = startSketchOn(plane)
|> startProfileAt([binBaseLength + binTol, 0], %)
|> yLine(height, %)
|> xLine(-binBaseLength, %)
|> yLine(length = height)
|> xLine(length = -binBaseLength)
|> angledLineOfYLength({ angle = -45, length = thirdStep }, %)
|> yLine(-secondStep, %)
|> yLine(length = -secondStep)
|> angledLineOfYLength({ angle = -45, length = firstStep }, %)
|> close()
return faceSketch
@ -98,7 +98,7 @@ singleBinFill = startSketchOn("XY")
], %)
|> line(end = [binLength - (binBaseLength * 2), 0], tag = $line000)
|> line(end = [0, binLength - (binBaseLength * 2)], tag = $line001)
|> xLineTo(profileStartX(%), %, $line002)
|> xLine(endAbsolute = profileStartX(%), tag = $line002)
|> close(tag = $line003)
|> extrude(length = height)
|> fillet(
@ -172,9 +172,9 @@ binFill = patternLinear3d(
//
binTop = startSketchOn(offsetPlane("XY", offset = height))
|> startProfileAt([0, 0], %)
|> xLine((binLength + 2 * binTol) * countBinWidth, %, $line010)
|> yLine((binLength + 2 * binTol) * countBinLength, %, $line011)
|> xLineTo(profileStartX(%), %, $line012)
|> xLine(length = (binLength + 2 * binTol) * countBinWidth, tag = $line010)
|> yLine(length = (binLength + 2 * binTol) * countBinLength, tag = $line011)
|> xLine(endAbsolute = profileStartX(%), tag = $line012)
|> close(tag = $line013)
|> extrude(length = binHeight * countBinHeight)
|> fillet(
@ -192,7 +192,7 @@ binTop = startSketchOn(offsetPlane("XY", offset = height))
fn lipFace(plane) {
faceSketch = startSketchOn(plane)
|> startProfileAt([0, 0], %)
// |> yLine(lipHeight, %, $line100)
// |> yLine(length = lipHeight, tag = $line100)
|> line(end = [0.0, 5.792893], tag = $line000)
|> arc({
angleStart = 180.0,
@ -201,9 +201,9 @@ fn lipFace(plane) {
}, %, $arc000)
// |> angledLineOfYLength({ angle: -45, length: lipStep5 }, %)
|> line(end = [1.046447, -1.046447], tag = $line001)
|> yLine(-lipStep4, %)
|> yLine(length = -lipStep4)
|> angledLineOfYLength({ angle = -45, length = lipStep3 }, %)
|> yLine(-lipStep2, %)
|> yLine(length = -lipStep2)
|> angledLineOfYLength({ angle = -135, length = lipStep1 }, %)
|> close()
return faceSketch

View File

@ -30,10 +30,10 @@ height = firstStep + secondStep + thirdStep
fn face(plane) {
faceSketch = startSketchOn(plane)
|> startProfileAt([binBaseLength + binTol, 0], %)
|> yLine(height, %)
|> xLine(-binBaseLength, %)
|> yLine(length = height)
|> xLine(length = -binBaseLength)
|> angledLineOfYLength({ angle = -45, length = thirdStep }, %)
|> yLine(-secondStep, %)
|> yLine(length = -secondStep)
|> angledLineOfYLength({ angle = -45, length = firstStep }, %)
|> close()
return faceSketch
@ -91,7 +91,7 @@ singleBinFill = startSketchOn("XY")
], %)
|> line(end = [binLength - (binBaseLength * 2), 0], tag = $line000)
|> line(end = [0, binLength - (binBaseLength * 2)], tag = $line001)
|> xLineTo(profileStartX(%), %, $line002)
|> xLine(endAbsolute = profileStartX(%), tag = $line002)
|> close(tag = $line003)
|> extrude(length = height)
|> fillet(
@ -165,9 +165,9 @@ binFill = patternLinear3d(
// create the top of the bin
binTop = startSketchOn(offsetPlane("XY", offset = height))
|> startProfileAt([0, 0], %)
|> xLine((binLength + 2 * binTol) * countBinWidth, %, $line010)
|> yLine((binLength + 2 * binTol) * countBinLength, %, $line011)
|> xLineTo(profileStartX(%), %, $line012)
|> xLine(length = (binLength + 2 * binTol) * countBinWidth, tag = $line010)
|> yLine(length = (binLength + 2 * binTol) * countBinLength, tag = $line011)
|> xLine(endAbsolute = profileStartX(%), tag = $line012)
|> close(tag = $line013)
|> extrude(length = binHeight * countBinHeight)
|> fillet(

View File

@ -13,10 +13,10 @@ wallThickness = 0.293
// Sketch a quadrant of the beam cross section, then mirror for symmetry across each axis. Extrude to the appropriate length
sketch001 = startSketchOn('-XZ')
|> startProfileAt([0, beamHeight/2], %)
|> xLine(beamWidth/2, %)
|> yLine(-wallThickness, %)
|> xLineTo(wallThickness/2, %)
|> yLineTo(0, %)
|> xLine(length = beamWidth/2)
|> yLine(length = -wallThickness)
|> xLine(endAbsolute = wallThickness/2)
|> yLine(endAbsolute = 0)
|> mirror2d({ axis = 'X' }, %)
|> mirror2d({ axis = 'Y' }, %)
|> extrude(length = beamLength)

View File

@ -69,7 +69,7 @@ fn capScrew(start, length, dia) {
-start[0] + wallToWallLength / 2,
start[2]
], %)
|> yLine(-hexWallLength / 2, %)
|> yLine(length = -hexWallLength / 2)
|> angledLine({
angle = hexStartingAngle,
length = hexWallLength

View File

@ -24,7 +24,7 @@ pipeSketch = startSketchOn('XY')
length = pipeTransitionLength
}, %)
|> line(end = [0, -pipeLargeDiaLength])
|> xLine(-thickness, %)
|> xLine(length = -thickness)
|> line(end = [0, pipeLargeDiaLength])
|> angledLineToX({
angle = -pipeTransitionAngle + 180,

View File

@ -14,20 +14,20 @@ frontLength = 7
sketch001 = startSketchOn("-YZ")
|> startProfileAt([wallsWidth / 2, 0], %)
|> xLine(wallThickness / 2, %)
|> xLine(length = wallThickness / 2)
|> angledLineToX({ angle = 60, to = wallsWidth }, %, $seg01)
|> yLineTo(height, %)
|> xLine(-wallThickness, %)
|> yLineTo(segEndY(seg01), %)
|> yLine(endAbsolute = height)
|> xLine(length = -wallThickness)
|> yLine(endAbsolute = segEndY(seg01))
|> angledLineToX({
angle = 60,
to = wallsWidth / 2 + wallThickness / 2
}, %)
|> xLine(-wallThickness, %)
|> xLine(length = -wallThickness)
|> angledLineToX({ angle = 180 - 60, to = wallThickness }, %)
|> yLineTo(height, %)
|> xLineTo(0, %)
|> yLineTo(segEndY(seg01), %)
|> yLine(endAbsolute = height)
|> xLine(endAbsolute = 0)
|> yLine(endAbsolute = segEndY(seg01))
|> angledLineToY({ angle = 180 - 60, to = 0 }, %)
|> close()
part001 = revolve({
@ -42,20 +42,20 @@ part001 = revolve({
sketch002 = startSketchOn('-YZ')
|> startProfileAt([wallsWidth / 2, 0], %)
|> xLine(wallThickness / 2, %)
|> xLine(length = wallThickness / 2)
|> angledLineToX({ angle = 60, to = wallsWidth }, %, $seg02)
|> yLineTo(height, %)
|> xLine(-wallThickness, %)
|> yLineTo(segEndY(seg01), %)
|> yLine(endAbsolute = height)
|> xLine(length = -wallThickness)
|> yLine(endAbsolute = segEndY(seg01))
|> angledLineToX({
angle = 60,
to = wallsWidth / 2 + wallThickness / 2
}, %)
|> xLine(-wallThickness, %)
|> xLine(length = -wallThickness)
|> angledLineToX({ angle = 180 - 60, to = wallThickness }, %)
|> yLineTo(height, %)
|> xLineTo(0, %)
|> yLineTo(segEndY(seg02), %)
|> yLine(endAbsolute = height)
|> xLine(endAbsolute = 0)
|> yLine(endAbsolute = segEndY(seg02))
|> angledLineToY({ angle = 180 - 60, to = 0 }, %)
|> close()
|> extrude(length = backLength - height)
@ -81,23 +81,23 @@ sketch003 = startSketchOn(customPlane)
sketch004 = startSketchOn(sketch002, 'END')
|> startProfileAt([0, 0], %)
|> yLineTo(height, %)
|> xLineTo(wallThickness, %)
|> yLineTo(segEndY(seg01), %)
|> yLine(endAbsolute = height)
|> xLine(endAbsolute = wallThickness)
|> yLine(endAbsolute = segEndY(seg01))
|> angledLineToX({
angle = 180 - 60,
to = wallsWidth / 2 - (wallThickness / 2)
}, %)
|> xLine(wallThickness, %)
|> xLine(length = wallThickness)
|> angledLineToY({ angle = 60, to = segEndY(seg01) }, %)
|> yLineTo(height, %)
|> xLine(wallThickness, %)
|> yLine(endAbsolute = height)
|> xLine(length = wallThickness)
|> tangentialArcTo([
(frontLength - wallsWidth) / 2 + wallsWidth,
height - ((height - exitHeight) / 2)
], %)
|> tangentialArcTo([frontLength, exitHeight], %)
|> yLineTo(0, %)
|> yLine(endAbsolute = 0)
|> close(tag = $seg04)
|> extrude(length = wallThickness)
@ -115,30 +115,30 @@ customPlane2 = {
}
sketch005 = startSketchOn(customPlane2)
|> startProfileAt([0, 0], %)
|> yLineTo(height, %)
|> xLineTo(wallsWidth, %)
|> yLine(endAbsolute = height)
|> xLine(endAbsolute = wallsWidth)
|> tangentialArcTo([
(frontLength - wallsWidth) / 2 + wallsWidth,
height - ((height - exitHeight) / 2)
], %)
|> tangentialArcTo([frontLength, exitHeight], %)
|> yLineTo(0, %, $seg03)
|> yLine(endAbsolute = 0, tag = $seg03)
|> close()
|> extrude(length = wallThickness)
sketch006 = startSketchOn(sketch005, seg03)
|> startProfileAt([0, -1 * (backLength - height)], %)
|> xLineTo(-exitHeight, %)
|> yLine(-wallsWidth, %)
|> xLineTo(0, %)
|> xLine(endAbsolute = -exitHeight)
|> yLine(length = -wallsWidth)
|> xLine(endAbsolute = 0)
|> close()
|> extrude(length = wallThickness)
sketch007 = startSketchOn(sketch004, 'END')
|> startProfileAt([0, 0], %)
|> xLineTo(wallThickness, %)
|> yLineTo(height, %)
|> xLineTo(0, %)
|> xLine(endAbsolute = wallThickness)
|> yLine(endAbsolute = height)
|> xLine(endAbsolute = 0)
|> close()
|> extrude(length = wallsWidth - (2 * wallThickness))
@ -157,8 +157,8 @@ customPlane3 = {
sketch008 = startSketchOn(customPlane3)
|> startProfileAt([wallThickness, wallThickness], %)
|> xLineTo(frontLength, %)
|> yLine(wallsWidth - (2 * wallThickness), %)
|> xLineTo(wallThickness, %)
|> xLine(endAbsolute = frontLength)
|> yLine(length = wallsWidth - (2 * wallThickness))
|> xLine(endAbsolute = wallThickness)
|> close()
|> extrude(length = -wallThickness)

View File

@ -15,28 +15,28 @@ depth = 30
distanceToInsideEdge = slateWidthHalf + templateThickness + templateGap
sketch001 = startSketchOn('XZ')
|> startProfileAt([ZERO, depth + templateGap], %)
|> xLine(slateWidthHalf - radius, %, $seg01)
|> xLine(length = slateWidthHalf - radius, tag = $seg01)
|> arc({
angleEnd = 0,
angleStart = 90,
radius = 10 + templateGap
}, %, $seg09)
|> yLineTo(-templateThickness, %, $seg03)
|> xLine(templateThickness, %, $seg07)
|> yLineTo((segEndY(seg01) + templateThickness) / 2 - templateThickness, %, $seg02)
|> xLineTo(segEndX(seg03) + minClampingDistance, %, $seg06)
|> yLine(templateThickness * 2, %, $seg08)
|> xLineTo(segEndX(seg02) + 0, %, $seg05)
|> yLineTo(segEndY(seg01) + templateThickness, %, $seg10)
|> xLineTo(ZERO, %, $seg04)
|> xLine(-segLen(seg04), %)
|> yLine(-segLen(seg10), %)
|> xLine(-segLen(seg05), %)
|> yLine(-segLen(seg08), %)
|> xLine(segLen(seg06), %)
|> yLine(-segLen(seg02), %)
|> xLine(segLen(seg07), %)
|> yLine(segLen(seg03), %)
|> yLine(endAbsolute = -templateThickness, tag = $seg03)
|> xLine(length = templateThickness, tag = $seg07)
|> yLine(endAbsolute = (segEndY(seg01) + templateThickness) / 2 - templateThickness, tag = $seg02)
|> xLine(endAbsolute = segEndX(seg03) + minClampingDistance, tag = $seg06)
|> yLine(length = templateThickness * 2, tag = $seg08)
|> xLine(endAbsolute = segEndX(seg02) + 0, tag = $seg05)
|> yLine(endAbsolute = segEndY(seg01) + templateThickness, tag = $seg10)
|> xLine(endAbsolute = ZERO, tag = $seg04)
|> xLine(length = -segLen(seg04))
|> yLine(length = -segLen(seg10))
|> xLine(length = -segLen(seg05))
|> yLine(length = -segLen(seg08))
|> xLine(length = segLen(seg06))
|> yLine(length = -segLen(seg02))
|> xLine(length = segLen(seg07))
|> yLine(length = segLen(seg03))
|> arc({
angleEnd = 90,
angleStart = 180,

View File

@ -19,21 +19,21 @@ length002 = depth + minClampingDistance
// Create the first sketch
sketch001 = startSketchOn('XZ')
|> startProfileAt([0, depth - templateGap], %)
|> xLine(length001, %, $seg01)
|> xLine(length = length001, tag = $seg01)
|> arc({
angleEnd = 0,
angleStart = 90,
radius = radius - templateGap
}, %)
|> yLineTo(-templateGap * 2 - (templateDiameter / 2), %, $seg05)
|> xLineTo(slateWidthHalf + templateThickness, %, $seg04)
|> yLine(-length002, %, $seg03)
|> xLineTo(ZERO, %, $seg02)
|> yLine(endAbsolute = -templateGap * 2 - (templateDiameter / 2), tag = $seg05)
|> xLine(endAbsolute = slateWidthHalf + templateThickness, tag = $seg04)
|> yLine(length = -length002, tag = $seg03)
|> xLine(endAbsolute = ZERO, tag = $seg02)
// |> line(end = [7.78, 11.16])
|> xLine(-segLen(seg02), %)
|> yLine(segLen(seg03), %)
|> xLine(segLen(seg04), %)
|> yLine(segLen(seg05), %)
|> xLine(length = -segLen(seg02))
|> yLine(length = segLen(seg03))
|> xLine(length = segLen(seg04))
|> yLine(length = segLen(seg05))
|> arc({
angleEnd = 90,
angleStart = 180,
@ -51,7 +51,7 @@ sketch002 = startSketchOn(extrude001, 'START')
-slateWidthHalf,
-templateGap * 2 - (templateDiameter / 2)
], %)
|> xLine(-7, %, $rectangleSegmentA001)
|> xLine(length = -7, tag = $rectangleSegmentA001)
|> angledLine([
segAng(rectangleSegmentA001) + 90,
minClampingDistance
@ -72,7 +72,7 @@ sketch003 = startSketchOn(extrude001, 'START')
slateWidthHalf,
-templateGap * 2 - (templateDiameter / 2)
], %)
|> xLine(7, %, $rectangleSegmentA002)
|> xLine(length = 7, tag = $rectangleSegmentA002)
|> angledLine([
segAng(rectangleSegmentA002) - 90,
minClampingDistance

View File

@ -32,7 +32,7 @@ fn capScrew(start, length, dia, capHeadLength) {
// Define the sketch of the hex pattern on the screw head
hexPatternSketch = startSketchOn(screwHead, 'end')
|> startProfileAt([hexWallToWall / 2, 0], %)
|> yLine(-hexWallLength / 2, %)
|> yLine(length = -hexWallLength / 2)
|> angledLine({
angle = hexStartingAngle,
length = hexWallLength

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -29,17 +29,17 @@ DATA;
#13 = VERTEX_POINT('NONE', #12);
#14 = CARTESIAN_POINT('NONE', (-0.004400550000000005, 0.027303023818752777, 0.0142875));
#15 = VERTEX_POINT('NONE', #14);
#16 = CARTESIAN_POINT('NONE', (-0.008801100000000003, 0.034925000000000005, 0.0206375));
#16 = CARTESIAN_POINT('NONE', (-0.008801100000000001, 0.034925000000000005, 0.0206375));
#17 = VERTEX_POINT('NONE', #16);
#18 = CARTESIAN_POINT('NONE', (-0.008801100000000003, 0.034925000000000005, 0.0142875));
#18 = CARTESIAN_POINT('NONE', (-0.008801100000000001, 0.034925000000000005, 0.0142875));
#19 = VERTEX_POINT('NONE', #18);
#20 = CARTESIAN_POINT('NONE', (-0.004400550000000001, 0.042546976181247226, 0.0206375));
#20 = CARTESIAN_POINT('NONE', (-0.00440055, 0.042546976181247226, 0.0206375));
#21 = VERTEX_POINT('NONE', #20);
#22 = CARTESIAN_POINT('NONE', (-0.004400550000000001, 0.042546976181247226, 0.0142875));
#22 = CARTESIAN_POINT('NONE', (-0.00440055, 0.042546976181247226, 0.0142875));
#23 = VERTEX_POINT('NONE', #22);
#24 = CARTESIAN_POINT('NONE', (0.00440055, 0.042546976181247226, 0.0206375));
#24 = CARTESIAN_POINT('NONE', (0.004400550000000001, 0.042546976181247226, 0.0206375));
#25 = VERTEX_POINT('NONE', #24);
#26 = CARTESIAN_POINT('NONE', (0.00440055, 0.042546976181247226, 0.0142875));
#26 = CARTESIAN_POINT('NONE', (0.004400550000000001, 0.042546976181247226, 0.0142875));
#27 = VERTEX_POINT('NONE', #26);
#28 = CARTESIAN_POINT('NONE', (-0.0000000000000000011975821048861966, 0.039814499999999996, 0.0206375));
#29 = VERTEX_POINT('NONE', #28);
@ -57,17 +57,17 @@ DATA;
#41 = VERTEX_POINT('NONE', #40);
#42 = CARTESIAN_POINT('NONE', (0.01860266554050596, 0.020463645441073146, 0.0142875));
#43 = VERTEX_POINT('NONE', #42);
#44 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265656, 0.0206375));
#44 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265653, 0.0206375));
#45 = VERTEX_POINT('NONE', #44);
#46 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265656, 0.0142875));
#46 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265653, 0.0142875));
#47 = VERTEX_POINT('NONE', #46);
#48 = CARTESIAN_POINT('NONE', (0.030520867414747015, 0.02996809427910878, 0.0206375));
#48 = CARTESIAN_POINT('NONE', (0.030520867414747018, 0.029968094279108775, 0.0206375));
#49 = VERTEX_POINT('NONE', #48);
#50 = CARTESIAN_POINT('NONE', (0.030520867414747015, 0.02996809427910878, 0.0142875));
#50 = CARTESIAN_POINT('NONE', (0.030520867414747018, 0.029968094279108775, 0.0142875));
#51 = VERTEX_POINT('NONE', #50);
#52 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.023087117218759404, 0.0206375));
#52 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.0230871172187594, 0.0206375));
#53 = VERTEX_POINT('NONE', #52);
#54 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.023087117218759404, 0.0142875));
#54 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.0230871172187594, 0.0142875));
#55 = VERTEX_POINT('NONE', #54);
#56 = CARTESIAN_POINT('NONE', (0.03112822955872337, 0.024823934716104546, 0.0206375));
#57 = VERTEX_POINT('NONE', #56);
@ -85,13 +85,13 @@ DATA;
#69 = VERTEX_POINT('NONE', #68);
#70 = CARTESIAN_POINT('NONE', (0.027597694503788704, -0.0017852753360286355, 0.0142875));
#71 = VERTEX_POINT('NONE', #70);
#72 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.0008088944294791717, 0.0206375));
#72 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.00080889442947917, 0.0206375));
#73 = VERTEX_POINT('NONE', #72);
#74 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.0008088944294791717, 0.0142875));
#74 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.00080889442947917, 0.0142875));
#75 = VERTEX_POINT('NONE', #74);
#76 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.0051773738529164665, 0.0206375));
#76 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.005177373852916468, 0.0206375));
#77 = VERTEX_POINT('NONE', #76);
#78 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.0051773738529164665, 0.0142875));
#78 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.005177373852916468, 0.0142875));
#79 = VERTEX_POINT('NONE', #78);
#80 = CARTESIAN_POINT('NONE', (0.04050102016211167, -0.013757811900819917, 0.0206375));
#81 = VERTEX_POINT('NONE', #80);
@ -113,17 +113,17 @@ DATA;
#97 = VERTEX_POINT('NONE', #96);
#98 = CARTESIAN_POINT('NONE', (0.015811096615344203, -0.022689847372120698, 0.0142875));
#99 = VERTEX_POINT('NONE', #98);
#100 = CARTESIAN_POINT('NONE', (0.023082906691976705, -0.027647683535144445, 0.0206375));
#100 = CARTESIAN_POINT('NONE', (0.023082906691976702, -0.027647683535144445, 0.0206375));
#101 = VERTEX_POINT('NONE', #100);
#102 = CARTESIAN_POINT('NONE', (0.023082906691976705, -0.027647683535144445, 0.0142875));
#102 = CARTESIAN_POINT('NONE', (0.023082906691976702, -0.027647683535144445, 0.0142875));
#103 = VERTEX_POINT('NONE', #102);
#104 = CARTESIAN_POINT('NONE', (0.022425199665313224, -0.03642417387451573, 0.0206375));
#104 = CARTESIAN_POINT('NONE', (0.02242519966531322, -0.03642417387451573, 0.0206375));
#105 = VERTEX_POINT('NONE', #104);
#106 = CARTESIAN_POINT('NONE', (0.022425199665313224, -0.03642417387451573, 0.0142875));
#106 = CARTESIAN_POINT('NONE', (0.02242519966531322, -0.03642417387451573, 0.0142875));
#107 = VERTEX_POINT('NONE', #106);
#108 = CARTESIAN_POINT('NONE', (0.014495682562017245, -0.040242828050863266, 0.0206375));
#108 = CARTESIAN_POINT('NONE', (0.014495682562017243, -0.040242828050863266, 0.0206375));
#109 = VERTEX_POINT('NONE', #108);
#110 = CARTESIAN_POINT('NONE', (0.014495682562017245, -0.040242828050863266, 0.0142875));
#110 = CARTESIAN_POINT('NONE', (0.014495682562017243, -0.040242828050863266, 0.0142875));
#111 = VERTEX_POINT('NONE', #110);
#112 = CARTESIAN_POINT('NONE', (0.01727486413109602, -0.03587162499110086, 0.0206375));
#113 = VERTEX_POINT('NONE', #112);
@ -141,17 +141,17 @@ DATA;
#125 = VERTEX_POINT('NONE', #124);
#126 = CARTESIAN_POINT('NONE', (-0.007881579512048209, -0.026508501548468247, 0.014287499999999998));
#127 = VERTEX_POINT('NONE', #126);
#128 = CARTESIAN_POINT('NONE', (-0.007223872485384732, -0.03528499188783953, 0.020637499999999996));
#128 = CARTESIAN_POINT('NONE', (-0.0072238724853847325, -0.03528499188783953, 0.020637499999999996));
#129 = VERTEX_POINT('NONE', #128);
#130 = CARTESIAN_POINT('NONE', (-0.007223872485384732, -0.03528499188783953, 0.014287499999999998));
#130 = CARTESIAN_POINT('NONE', (-0.0072238724853847325, -0.03528499188783953, 0.014287499999999998));
#131 = VERTEX_POINT('NONE', #130);
#132 = CARTESIAN_POINT('NONE', (-0.014495682562017232, -0.04024282805086327, 0.020637499999999996));
#132 = CARTESIAN_POINT('NONE', (-0.014495682562017234, -0.04024282805086327, 0.020637499999999996));
#133 = VERTEX_POINT('NONE', #132);
#134 = CARTESIAN_POINT('NONE', (-0.014495682562017232, -0.04024282805086327, 0.014287499999999998));
#134 = CARTESIAN_POINT('NONE', (-0.014495682562017234, -0.04024282805086327, 0.014287499999999998));
#135 = VERTEX_POINT('NONE', #134);
#136 = CARTESIAN_POINT('NONE', (-0.022425199665313214, -0.036424173874515735, 0.020637499999999996));
#136 = CARTESIAN_POINT('NONE', (-0.022425199665313218, -0.036424173874515735, 0.020637499999999996));
#137 = VERTEX_POINT('NONE', #136);
#138 = CARTESIAN_POINT('NONE', (-0.022425199665313214, -0.036424173874515735, 0.014287499999999998));
#138 = CARTESIAN_POINT('NONE', (-0.022425199665313218, -0.036424173874515735, 0.014287499999999998));
#139 = VERTEX_POINT('NONE', #138);
#140 = CARTESIAN_POINT('NONE', (-0.01727486413109601, -0.035871624991100866, 0.020637499999999996));
#141 = VERTEX_POINT('NONE', #140);
@ -173,13 +173,13 @@ DATA;
#157 = VERTEX_POINT('NONE', #156);
#158 = CARTESIAN_POINT('NONE', (-0.032090928341107286, -0.01635198166632771, 0.0142875));
#159 = VERTEX_POINT('NONE', #158);
#160 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.013757811900819893, 0.0206375));
#160 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.01375781190081989, 0.0206375));
#161 = VERTEX_POINT('NONE', #160);
#162 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.013757811900819893, 0.0142875));
#162 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.01375781190081989, 0.0142875));
#163 = VERTEX_POINT('NONE', #162);
#164 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.0051773738529164405, 0.0206375));
#164 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.005177373852916439, 0.0206375));
#165 = VERTEX_POINT('NONE', #164);
#166 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.0051773738529164405, 0.0142875));
#166 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.005177373852916439, 0.0142875));
#167 = VERTEX_POINT('NONE', #166);
#168 = CARTESIAN_POINT('NONE', (-0.038816267359563214, -0.008859559725003652, 0.0206375));
#169 = VERTEX_POINT('NONE', #168);
@ -201,9 +201,9 @@ DATA;
#185 = VERTEX_POINT('NONE', #184);
#186 = CARTESIAN_POINT('NONE', (-0.032792860620334846, 0.014894404269566884, 0.0142875));
#187 = VERTEX_POINT('NONE', #186);
#188 = CARTESIAN_POINT('NONE', (-0.03600826350988593, 0.02308711721875939, 0.0206375));
#188 = CARTESIAN_POINT('NONE', (-0.036008263509885924, 0.02308711721875939, 0.0206375));
#189 = VERTEX_POINT('NONE', #188);
#190 = CARTESIAN_POINT('NONE', (-0.03600826350988593, 0.02308711721875939, 0.0142875));
#190 = CARTESIAN_POINT('NONE', (-0.036008263509885924, 0.02308711721875939, 0.0142875));
#191 = VERTEX_POINT('NONE', #190);
#192 = CARTESIAN_POINT('NONE', (-0.03052086741474703, 0.029968094279108768, 0.0206375));
#193 = VERTEX_POINT('NONE', #192);
@ -715,49 +715,49 @@ DATA;
#699 = VECTOR('NONE', #698, 1);
#700 = CARTESIAN_POINT('NONE', (0.004400549999999997, 0.027303023818752777, 0.0142875));
#701 = LINE('NONE', #700, #699);
#702 = DIRECTION('NONE', (-0.49999999999999956, 0.8660254037844389, 0));
#702 = DIRECTION('NONE', (-0.49999999999999944, 0.866025403784439, 0));
#703 = VECTOR('NONE', #702, 1);
#704 = CARTESIAN_POINT('NONE', (-0.004400550000000005, 0.027303023818752777, 0.0206375));
#705 = LINE('NONE', #704, #703);
#706 = DIRECTION('NONE', (0, 0, -1));
#707 = VECTOR('NONE', #706, 1);
#708 = CARTESIAN_POINT('NONE', (-0.008801100000000003, 0.034925000000000005, 0.0206375));
#708 = CARTESIAN_POINT('NONE', (-0.008801100000000001, 0.034925000000000005, 0.0206375));
#709 = LINE('NONE', #708, #707);
#710 = DIRECTION('NONE', (-0.49999999999999956, 0.8660254037844389, 0));
#710 = DIRECTION('NONE', (-0.49999999999999944, 0.866025403784439, 0));
#711 = VECTOR('NONE', #710, 1);
#712 = CARTESIAN_POINT('NONE', (-0.004400550000000005, 0.027303023818752777, 0.0142875));
#713 = LINE('NONE', #712, #711);
#714 = DIRECTION('NONE', (0.5000000000000002, 0.8660254037844386, 0));
#715 = VECTOR('NONE', #714, 1);
#716 = CARTESIAN_POINT('NONE', (-0.008801100000000003, 0.034925000000000005, 0.0206375));
#716 = CARTESIAN_POINT('NONE', (-0.008801100000000001, 0.034925000000000005, 0.0206375));
#717 = LINE('NONE', #716, #715);
#718 = DIRECTION('NONE', (0, 0, -1));
#719 = VECTOR('NONE', #718, 1);
#720 = CARTESIAN_POINT('NONE', (-0.004400550000000001, 0.042546976181247226, 0.0206375));
#720 = CARTESIAN_POINT('NONE', (-0.00440055, 0.042546976181247226, 0.0206375));
#721 = LINE('NONE', #720, #719);
#722 = DIRECTION('NONE', (0.5000000000000002, 0.8660254037844386, 0));
#723 = VECTOR('NONE', #722, 1);
#724 = CARTESIAN_POINT('NONE', (-0.008801100000000003, 0.034925000000000005, 0.0142875));
#724 = CARTESIAN_POINT('NONE', (-0.008801100000000001, 0.034925000000000005, 0.0142875));
#725 = LINE('NONE', #724, #723);
#726 = DIRECTION('NONE', (1, 0, 0));
#727 = VECTOR('NONE', #726, 1);
#728 = CARTESIAN_POINT('NONE', (-0.004400550000000001, 0.042546976181247226, 0.0206375));
#728 = CARTESIAN_POINT('NONE', (-0.00440055, 0.042546976181247226, 0.0206375));
#729 = LINE('NONE', #728, #727);
#730 = DIRECTION('NONE', (0, 0, -1));
#731 = VECTOR('NONE', #730, 1);
#732 = CARTESIAN_POINT('NONE', (0.00440055, 0.042546976181247226, 0.0206375));
#732 = CARTESIAN_POINT('NONE', (0.004400550000000001, 0.042546976181247226, 0.0206375));
#733 = LINE('NONE', #732, #731);
#734 = DIRECTION('NONE', (1, 0, 0));
#735 = VECTOR('NONE', #734, 1);
#736 = CARTESIAN_POINT('NONE', (-0.004400550000000001, 0.042546976181247226, 0.0142875));
#736 = CARTESIAN_POINT('NONE', (-0.00440055, 0.042546976181247226, 0.0142875));
#737 = LINE('NONE', #736, #735);
#738 = DIRECTION('NONE', (0.4999999999999999, -0.8660254037844388, 0));
#738 = DIRECTION('NONE', (0.4999999999999997, -0.8660254037844388, 0));
#739 = VECTOR('NONE', #738, 1);
#740 = CARTESIAN_POINT('NONE', (0.00440055, 0.042546976181247226, 0.0206375));
#740 = CARTESIAN_POINT('NONE', (0.004400550000000001, 0.042546976181247226, 0.0206375));
#741 = LINE('NONE', #740, #739);
#742 = DIRECTION('NONE', (0.4999999999999999, -0.8660254037844388, 0));
#742 = DIRECTION('NONE', (0.4999999999999997, -0.8660254037844388, 0));
#743 = VECTOR('NONE', #742, 1);
#744 = CARTESIAN_POINT('NONE', (0.00440055, 0.042546976181247226, 0.0142875));
#744 = CARTESIAN_POINT('NONE', (0.004400550000000001, 0.042546976181247226, 0.0142875));
#745 = LINE('NONE', #744, #743);
#746 = DIRECTION('NONE', (-0.0000000000000002449293598294707, 1, -0));
#747 = DIRECTION('NONE', (-0, 0, 1));
@ -801,49 +801,49 @@ DATA;
#785 = VECTOR('NONE', #784, 1);
#786 = CARTESIAN_POINT('NONE', (0.024090061635644863, 0.013582668380723768, 0.0142875));
#787 = LINE('NONE', #786, #785);
#788 = DIRECTION('NONE', (0.3653410243663951, 0.9308737486442044, 0));
#788 = DIRECTION('NONE', (0.3653410243663952, 0.9308737486442042, 0));
#789 = VECTOR('NONE', #788, 1);
#790 = CARTESIAN_POINT('NONE', (0.01860266554050596, 0.020463645441073146, 0.0206375));
#791 = LINE('NONE', #790, #789);
#792 = DIRECTION('NONE', (0, 0, -1));
#793 = VECTOR('NONE', #792, 1);
#794 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265656, 0.0206375));
#794 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265653, 0.0206375));
#795 = LINE('NONE', #794, #793);
#796 = DIRECTION('NONE', (0.3653410243663951, 0.9308737486442044, 0));
#796 = DIRECTION('NONE', (0.3653410243663952, 0.9308737486442042, 0));
#797 = VECTOR('NONE', #796, 1);
#798 = CARTESIAN_POINT('NONE', (0.01860266554050596, 0.020463645441073146, 0.0142875));
#799 = LINE('NONE', #798, #797);
#800 = DIRECTION('NONE', (0.9888308262251287, 0.1490422661761738, 0));
#800 = DIRECTION('NONE', (0.9888308262251287, 0.14904226617617372, 0));
#801 = VECTOR('NONE', #800, 1);
#802 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265656, 0.0206375));
#802 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265653, 0.0206375));
#803 = LINE('NONE', #802, #801);
#804 = DIRECTION('NONE', (0, 0, -1));
#805 = VECTOR('NONE', #804, 1);
#806 = CARTESIAN_POINT('NONE', (0.030520867414747015, 0.02996809427910878, 0.0206375));
#806 = CARTESIAN_POINT('NONE', (0.030520867414747018, 0.029968094279108775, 0.0206375));
#807 = LINE('NONE', #806, #805);
#808 = DIRECTION('NONE', (0.9888308262251287, 0.1490422661761738, 0));
#808 = DIRECTION('NONE', (0.9888308262251287, 0.14904226617617372, 0));
#809 = VECTOR('NONE', #808, 1);
#810 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265656, 0.0142875));
#810 = CARTESIAN_POINT('NONE', (0.02181806843005704, 0.028656358390265653, 0.0142875));
#811 = LINE('NONE', #810, #809);
#812 = DIRECTION('NONE', (0.6234898018587344, -0.7818314824680292, 0));
#812 = DIRECTION('NONE', (0.6234898018587341, -0.7818314824680294, 0));
#813 = VECTOR('NONE', #812, 1);
#814 = CARTESIAN_POINT('NONE', (0.030520867414747015, 0.02996809427910878, 0.0206375));
#814 = CARTESIAN_POINT('NONE', (0.030520867414747018, 0.029968094279108775, 0.0206375));
#815 = LINE('NONE', #814, #813);
#816 = DIRECTION('NONE', (0, 0, -1));
#817 = VECTOR('NONE', #816, 1);
#818 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.023087117218759404, 0.0206375));
#818 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.0230871172187594, 0.0206375));
#819 = LINE('NONE', #818, #817);
#820 = DIRECTION('NONE', (0.6234898018587344, -0.7818314824680292, 0));
#820 = DIRECTION('NONE', (0.6234898018587341, -0.7818314824680294, 0));
#821 = VECTOR('NONE', #820, 1);
#822 = CARTESIAN_POINT('NONE', (0.030520867414747015, 0.02996809427910878, 0.0142875));
#822 = CARTESIAN_POINT('NONE', (0.030520867414747018, 0.029968094279108775, 0.0142875));
#823 = LINE('NONE', #822, #821);
#824 = DIRECTION('NONE', (-0.36534102436639593, -0.9308737486442038, 0));
#824 = DIRECTION('NONE', (-0.36534102436639604, -0.9308737486442038, 0));
#825 = VECTOR('NONE', #824, 1);
#826 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.023087117218759404, 0.0206375));
#826 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.0230871172187594, 0.0206375));
#827 = LINE('NONE', #826, #825);
#828 = DIRECTION('NONE', (-0.36534102436639593, -0.9308737486442038, 0));
#828 = DIRECTION('NONE', (-0.36534102436639604, -0.9308737486442038, 0));
#829 = VECTOR('NONE', #828, 1);
#830 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.023087117218759404, 0.0142875));
#830 = CARTESIAN_POINT('NONE', (0.036008263509885924, 0.0230871172187594, 0.0142875));
#831 = LINE('NONE', #830, #829);
#832 = DIRECTION('NONE', (0.78183148246803, 0.6234898018587336, -0));
#833 = DIRECTION('NONE', (0, 0, 1.0000000000000002));
@ -887,41 +887,41 @@ DATA;
#871 = VECTOR('NONE', #870, 1);
#872 = CARTESIAN_POINT('NONE', (0.025639265511945786, -0.010365713383932086, 0.0142875));
#873 = LINE('NONE', #872, #871);
#874 = DIRECTION('NONE', (0.9555728057861409, 0.29475517441090376, 0));
#874 = DIRECTION('NONE', (0.955572805786141, 0.2947551744109036, 0));
#875 = VECTOR('NONE', #874, 1);
#876 = CARTESIAN_POINT('NONE', (0.027597694503788704, -0.0017852753360286355, 0.0206375));
#877 = LINE('NONE', #876, #875);
#878 = DIRECTION('NONE', (0, 0, -1));
#879 = VECTOR('NONE', #878, 1);
#880 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.0008088944294791717, 0.0206375));
#880 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.00080889442947917, 0.0206375));
#881 = LINE('NONE', #880, #879);
#882 = DIRECTION('NONE', (0.9555728057861409, 0.29475517441090376, 0));
#882 = DIRECTION('NONE', (0.955572805786141, 0.2947551744109036, 0));
#883 = VECTOR('NONE', #882, 1);
#884 = CARTESIAN_POINT('NONE', (0.027597694503788704, -0.0017852753360286355, 0.0142875));
#885 = LINE('NONE', #884, #883);
#886 = DIRECTION('NONE', (0.7330518718298261, -0.6801727377709197, 0));
#887 = VECTOR('NONE', #886, 1);
#888 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.0008088944294791717, 0.0206375));
#888 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.00080889442947917, 0.0206375));
#889 = LINE('NONE', #888, #887);
#890 = DIRECTION('NONE', (0, 0, -1));
#891 = VECTOR('NONE', #890, 1);
#892 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.0051773738529164665, 0.0206375));
#892 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.005177373852916468, 0.0206375));
#893 = LINE('NONE', #892, #891);
#894 = DIRECTION('NONE', (0.7330518718298261, -0.6801727377709197, 0));
#895 = VECTOR('NONE', #894, 1);
#896 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.0008088944294791717, 0.0142875));
#896 = CARTESIAN_POINT('NONE', (0.036007786324793116, 0.00080889442947917, 0.0142875));
#897 = LINE('NONE', #896, #895);
#898 = DIRECTION('NONE', (-0.22252093395631506, -0.9749279121818235, 0));
#898 = DIRECTION('NONE', (-0.22252093395631514, -0.9749279121818235, 0));
#899 = VECTOR('NONE', #898, 1);
#900 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.0051773738529164665, 0.0206375));
#900 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.005177373852916468, 0.0206375));
#901 = LINE('NONE', #900, #899);
#902 = DIRECTION('NONE', (0, 0, -1));
#903 = VECTOR('NONE', #902, 1);
#904 = CARTESIAN_POINT('NONE', (0.04050102016211167, -0.013757811900819917, 0.0206375));
#905 = LINE('NONE', #904, #903);
#906 = DIRECTION('NONE', (-0.22252093395631506, -0.9749279121818235, 0));
#906 = DIRECTION('NONE', (-0.22252093395631514, -0.9749279121818235, 0));
#907 = VECTOR('NONE', #906, 1);
#908 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.0051773738529164665, 0.0142875));
#908 = CARTESIAN_POINT('NONE', (0.042459449153954595, -0.005177373852916468, 0.0142875));
#909 = LINE('NONE', #908, #907);
#910 = DIRECTION('NONE', (-0.9555728057861407, -0.2947551744109045, 0));
#911 = VECTOR('NONE', #910, 1);
@ -973,49 +973,49 @@ DATA;
#957 = VECTOR('NONE', #956, 1);
#958 = CARTESIAN_POINT('NONE', (0.007881579512048221, -0.02650850154846824, 0.0142875));
#959 = LINE('NONE', #958, #957);
#960 = DIRECTION('NONE', (0.8262387743159947, -0.5633200580636224, 0));
#960 = DIRECTION('NONE', (0.8262387743159946, -0.5633200580636225, 0));
#961 = VECTOR('NONE', #960, 1);
#962 = CARTESIAN_POINT('NONE', (0.015811096615344203, -0.022689847372120698, 0.0206375));
#963 = LINE('NONE', #962, #961);
#964 = DIRECTION('NONE', (0, 0, -1));
#965 = VECTOR('NONE', #964, 1);
#966 = CARTESIAN_POINT('NONE', (0.023082906691976705, -0.027647683535144445, 0.0206375));
#966 = CARTESIAN_POINT('NONE', (0.023082906691976702, -0.027647683535144445, 0.0206375));
#967 = LINE('NONE', #966, #965);
#968 = DIRECTION('NONE', (0.8262387743159947, -0.5633200580636224, 0));
#968 = DIRECTION('NONE', (0.8262387743159946, -0.5633200580636225, 0));
#969 = VECTOR('NONE', #968, 1);
#970 = CARTESIAN_POINT('NONE', (0.015811096615344203, -0.022689847372120698, 0.0142875));
#971 = LINE('NONE', #970, #969);
#972 = DIRECTION('NONE', (-0.07473009358642455, -0.9972037971811801, 0));
#973 = VECTOR('NONE', #972, 1);
#974 = CARTESIAN_POINT('NONE', (0.023082906691976705, -0.027647683535144445, 0.0206375));
#974 = CARTESIAN_POINT('NONE', (0.023082906691976702, -0.027647683535144445, 0.0206375));
#975 = LINE('NONE', #974, #973);
#976 = DIRECTION('NONE', (0, 0, -1));
#977 = VECTOR('NONE', #976, 1);
#978 = CARTESIAN_POINT('NONE', (0.022425199665313224, -0.03642417387451573, 0.0206375));
#978 = CARTESIAN_POINT('NONE', (0.02242519966531322, -0.03642417387451573, 0.0206375));
#979 = LINE('NONE', #978, #977);
#980 = DIRECTION('NONE', (-0.07473009358642455, -0.9972037971811801, 0));
#981 = VECTOR('NONE', #980, 1);
#982 = CARTESIAN_POINT('NONE', (0.023082906691976705, -0.027647683535144445, 0.0142875));
#982 = CARTESIAN_POINT('NONE', (0.023082906691976702, -0.027647683535144445, 0.0142875));
#983 = LINE('NONE', #982, #981);
#984 = DIRECTION('NONE', (-0.9009688679024193, -0.43388373911755795, 0));
#984 = DIRECTION('NONE', (-0.9009688679024193, -0.43388373911755806, 0));
#985 = VECTOR('NONE', #984, 1);
#986 = CARTESIAN_POINT('NONE', (0.022425199665313224, -0.03642417387451573, 0.0206375));
#986 = CARTESIAN_POINT('NONE', (0.02242519966531322, -0.03642417387451573, 0.0206375));
#987 = LINE('NONE', #986, #985);
#988 = DIRECTION('NONE', (0, 0, -1));
#989 = VECTOR('NONE', #988, 1);
#990 = CARTESIAN_POINT('NONE', (0.014495682562017245, -0.040242828050863266, 0.0206375));
#990 = CARTESIAN_POINT('NONE', (0.014495682562017243, -0.040242828050863266, 0.0206375));
#991 = LINE('NONE', #990, #989);
#992 = DIRECTION('NONE', (-0.9009688679024193, -0.43388373911755795, 0));
#992 = DIRECTION('NONE', (-0.9009688679024193, -0.43388373911755806, 0));
#993 = VECTOR('NONE', #992, 1);
#994 = CARTESIAN_POINT('NONE', (0.022425199665313224, -0.03642417387451573, 0.0142875));
#994 = CARTESIAN_POINT('NONE', (0.02242519966531322, -0.03642417387451573, 0.0142875));
#995 = LINE('NONE', #994, #993);
#996 = DIRECTION('NONE', (-0.8262387743159951, 0.5633200580636216, 0));
#996 = DIRECTION('NONE', (-0.8262387743159952, 0.5633200580636217, 0));
#997 = VECTOR('NONE', #996, 1);
#998 = CARTESIAN_POINT('NONE', (0.014495682562017245, -0.040242828050863266, 0.0206375));
#998 = CARTESIAN_POINT('NONE', (0.014495682562017243, -0.040242828050863266, 0.0206375));
#999 = LINE('NONE', #998, #997);
#1000 = DIRECTION('NONE', (-0.8262387743159951, 0.5633200580636216, 0));
#1000 = DIRECTION('NONE', (-0.8262387743159952, 0.5633200580636217, 0));
#1001 = VECTOR('NONE', #1000, 1);
#1002 = CARTESIAN_POINT('NONE', (0.014495682562017245, -0.040242828050863266, 0.0142875));
#1002 = CARTESIAN_POINT('NONE', (0.014495682562017243, -0.040242828050863266, 0.0142875));
#1003 = LINE('NONE', #1002, #1001);
#1004 = DIRECTION('NONE', (0.4338837391175578, -0.9009688679024195, -0));
#1005 = DIRECTION('NONE', (0, 0, 1.0000000000000002));
@ -1059,49 +1059,49 @@ DATA;
#1043 = VECTOR('NONE', #1042, 1);
#1044 = CARTESIAN_POINT('NONE', (-0.015811096615344192, -0.022689847372120705, 0.014287499999999998));
#1045 = LINE('NONE', #1044, #1043);
#1046 = DIRECTION('NONE', (0.07473009358642413, -0.9972037971811802, 0));
#1046 = DIRECTION('NONE', (0.07473009358642402, -0.9972037971811802, 0));
#1047 = VECTOR('NONE', #1046, 1);
#1048 = CARTESIAN_POINT('NONE', (-0.007881579512048209, -0.026508501548468247, 0.020637499999999996));
#1049 = LINE('NONE', #1048, #1047);
#1050 = DIRECTION('NONE', (0, 0, -1));
#1051 = VECTOR('NONE', #1050, 1);
#1052 = CARTESIAN_POINT('NONE', (-0.007223872485384732, -0.03528499188783953, 0.020637499999999996));
#1052 = CARTESIAN_POINT('NONE', (-0.0072238724853847325, -0.03528499188783953, 0.020637499999999996));
#1053 = LINE('NONE', #1052, #1051);
#1054 = DIRECTION('NONE', (0.07473009358642413, -0.9972037971811802, 0));
#1054 = DIRECTION('NONE', (0.07473009358642402, -0.9972037971811802, 0));
#1055 = VECTOR('NONE', #1054, 1);
#1056 = CARTESIAN_POINT('NONE', (-0.007881579512048209, -0.026508501548468247, 0.014287499999999998));
#1057 = LINE('NONE', #1056, #1055);
#1058 = DIRECTION('NONE', (-0.826238774315995, -0.563320058063622, 0));
#1058 = DIRECTION('NONE', (-0.826238774315995, -0.5633200580636218, 0));
#1059 = VECTOR('NONE', #1058, 1);
#1060 = CARTESIAN_POINT('NONE', (-0.007223872485384732, -0.03528499188783953, 0.020637499999999996));
#1060 = CARTESIAN_POINT('NONE', (-0.0072238724853847325, -0.03528499188783953, 0.020637499999999996));
#1061 = LINE('NONE', #1060, #1059);
#1062 = DIRECTION('NONE', (0, 0, -1));
#1063 = VECTOR('NONE', #1062, 1);
#1064 = CARTESIAN_POINT('NONE', (-0.014495682562017232, -0.04024282805086327, 0.020637499999999996));
#1064 = CARTESIAN_POINT('NONE', (-0.014495682562017234, -0.04024282805086327, 0.020637499999999996));
#1065 = LINE('NONE', #1064, #1063);
#1066 = DIRECTION('NONE', (-0.826238774315995, -0.563320058063622, 0));
#1066 = DIRECTION('NONE', (-0.826238774315995, -0.5633200580636218, 0));
#1067 = VECTOR('NONE', #1066, 1);
#1068 = CARTESIAN_POINT('NONE', (-0.007223872485384732, -0.03528499188783953, 0.014287499999999998));
#1068 = CARTESIAN_POINT('NONE', (-0.0072238724853847325, -0.03528499188783953, 0.014287499999999998));
#1069 = LINE('NONE', #1068, #1067);
#1070 = DIRECTION('NONE', (-0.9009688679024194, 0.4338837391175579, 0));
#1070 = DIRECTION('NONE', (-0.9009688679024193, 0.4338837391175578, 0));
#1071 = VECTOR('NONE', #1070, 1);
#1072 = CARTESIAN_POINT('NONE', (-0.014495682562017232, -0.04024282805086327, 0.020637499999999996));
#1072 = CARTESIAN_POINT('NONE', (-0.014495682562017234, -0.04024282805086327, 0.020637499999999996));
#1073 = LINE('NONE', #1072, #1071);
#1074 = DIRECTION('NONE', (0, 0, -1));
#1075 = VECTOR('NONE', #1074, 1);
#1076 = CARTESIAN_POINT('NONE', (-0.022425199665313214, -0.036424173874515735, 0.020637499999999996));
#1076 = CARTESIAN_POINT('NONE', (-0.022425199665313218, -0.036424173874515735, 0.020637499999999996));
#1077 = LINE('NONE', #1076, #1075);
#1078 = DIRECTION('NONE', (-0.9009688679024194, 0.4338837391175579, 0));
#1078 = DIRECTION('NONE', (-0.9009688679024193, 0.4338837391175578, 0));
#1079 = VECTOR('NONE', #1078, 1);
#1080 = CARTESIAN_POINT('NONE', (-0.014495682562017232, -0.04024282805086327, 0.014287499999999998));
#1080 = CARTESIAN_POINT('NONE', (-0.014495682562017234, -0.04024282805086327, 0.014287499999999998));
#1081 = LINE('NONE', #1080, #1079);
#1082 = DIRECTION('NONE', (-0.07473009358642449, 0.9972037971811801, 0));
#1082 = DIRECTION('NONE', (-0.07473009358642409, 0.9972037971811802, 0));
#1083 = VECTOR('NONE', #1082, 1);
#1084 = CARTESIAN_POINT('NONE', (-0.022425199665313214, -0.036424173874515735, 0.020637499999999996));
#1084 = CARTESIAN_POINT('NONE', (-0.022425199665313218, -0.036424173874515735, 0.020637499999999996));
#1085 = LINE('NONE', #1084, #1083);
#1086 = DIRECTION('NONE', (-0.07473009358642449, 0.9972037971811801, 0));
#1086 = DIRECTION('NONE', (-0.07473009358642409, 0.9972037971811802, 0));
#1087 = VECTOR('NONE', #1086, 1);
#1088 = CARTESIAN_POINT('NONE', (-0.022425199665313214, -0.036424173874515735, 0.014287499999999998));
#1088 = CARTESIAN_POINT('NONE', (-0.022425199665313218, -0.036424173874515735, 0.014287499999999998));
#1089 = LINE('NONE', #1088, #1087);
#1090 = DIRECTION('NONE', (-0.43388373911755884, -0.9009688679024187, -0));
#1091 = DIRECTION('NONE', (0, -0, 0.9999999999999999));
@ -1157,37 +1157,37 @@ DATA;
#1141 = VECTOR('NONE', #1140, 1);
#1142 = CARTESIAN_POINT('NONE', (-0.02563926551194579, -0.010365713383932076, 0.0142875));
#1143 = LINE('NONE', #1142, #1141);
#1144 = DIRECTION('NONE', (-0.9555728057861405, 0.29475517441090526, 0));
#1144 = DIRECTION('NONE', (-0.9555728057861403, 0.29475517441090565, 0));
#1145 = VECTOR('NONE', #1144, 1);
#1146 = CARTESIAN_POINT('NONE', (-0.032090928341107286, -0.01635198166632771, 0.0206375));
#1147 = LINE('NONE', #1146, #1145);
#1148 = DIRECTION('NONE', (0, 0, -1));
#1149 = VECTOR('NONE', #1148, 1);
#1150 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.013757811900819893, 0.0206375));
#1150 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.01375781190081989, 0.0206375));
#1151 = LINE('NONE', #1150, #1149);
#1152 = DIRECTION('NONE', (-0.9555728057861405, 0.29475517441090526, 0));
#1152 = DIRECTION('NONE', (-0.9555728057861403, 0.29475517441090565, 0));
#1153 = VECTOR('NONE', #1152, 1);
#1154 = CARTESIAN_POINT('NONE', (-0.032090928341107286, -0.01635198166632771, 0.0142875));
#1155 = LINE('NONE', #1154, #1153);
#1156 = DIRECTION('NONE', (-0.22252093395631356, 0.9749279121818238, 0));
#1157 = VECTOR('NONE', #1156, 1);
#1158 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.013757811900819893, 0.0206375));
#1158 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.01375781190081989, 0.0206375));
#1159 = LINE('NONE', #1158, #1157);
#1160 = DIRECTION('NONE', (0, 0, -1));
#1161 = VECTOR('NONE', #1160, 1);
#1162 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.0051773738529164405, 0.0206375));
#1162 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.005177373852916439, 0.0206375));
#1163 = LINE('NONE', #1162, #1161);
#1164 = DIRECTION('NONE', (-0.22252093395631356, 0.9749279121818238, 0));
#1165 = VECTOR('NONE', #1164, 1);
#1166 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.013757811900819893, 0.0142875));
#1166 = CARTESIAN_POINT('NONE', (-0.040501020162111684, -0.01375781190081989, 0.0142875));
#1167 = LINE('NONE', #1166, #1165);
#1168 = DIRECTION('NONE', (0.7330518718298267, 0.6801727377709191, 0));
#1168 = DIRECTION('NONE', (0.7330518718298267, 0.680172737770919, 0));
#1169 = VECTOR('NONE', #1168, 1);
#1170 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.0051773738529164405, 0.0206375));
#1170 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.005177373852916439, 0.0206375));
#1171 = LINE('NONE', #1170, #1169);
#1172 = DIRECTION('NONE', (0.7330518718298267, 0.6801727377709191, 0));
#1172 = DIRECTION('NONE', (0.7330518718298267, 0.680172737770919, 0));
#1173 = VECTOR('NONE', #1172, 1);
#1174 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.0051773738529164405, 0.0142875));
#1174 = CARTESIAN_POINT('NONE', (-0.042459449153954595, -0.005177373852916439, 0.0142875));
#1175 = LINE('NONE', #1174, #1173);
#1176 = DIRECTION('NONE', (-0.9749279121818236, -0.22252093395631475, -0));
#1177 = DIRECTION('NONE', (0, -0, 1.0000000000000002));
@ -1243,29 +1243,29 @@ DATA;
#1227 = VECTOR('NONE', #1226, 1);
#1228 = CARTESIAN_POINT('NONE', (-0.02409006163564487, 0.013582668380723755, 0.0142875));
#1229 = LINE('NONE', #1228, #1227);
#1230 = DIRECTION('NONE', (-0.3653410243663956, 0.930873748644204, 0));
#1230 = DIRECTION('NONE', (-0.36534102436639493, 0.9308737486442044, 0));
#1231 = VECTOR('NONE', #1230, 1);
#1232 = CARTESIAN_POINT('NONE', (-0.032792860620334846, 0.014894404269566884, 0.0206375));
#1233 = LINE('NONE', #1232, #1231);
#1234 = DIRECTION('NONE', (0, 0, -1));
#1235 = VECTOR('NONE', #1234, 1);
#1236 = CARTESIAN_POINT('NONE', (-0.03600826350988593, 0.02308711721875939, 0.0206375));
#1236 = CARTESIAN_POINT('NONE', (-0.036008263509885924, 0.02308711721875939, 0.0206375));
#1237 = LINE('NONE', #1236, #1235);
#1238 = DIRECTION('NONE', (-0.3653410243663956, 0.930873748644204, 0));
#1238 = DIRECTION('NONE', (-0.36534102436639493, 0.9308737486442044, 0));
#1239 = VECTOR('NONE', #1238, 1);
#1240 = CARTESIAN_POINT('NONE', (-0.032792860620334846, 0.014894404269566884, 0.0142875));
#1241 = LINE('NONE', #1240, #1239);
#1242 = DIRECTION('NONE', (0.6234898018587336, 0.7818314824680297, 0));
#1242 = DIRECTION('NONE', (0.6234898018587333, 0.7818314824680301, 0));
#1243 = VECTOR('NONE', #1242, 1);
#1244 = CARTESIAN_POINT('NONE', (-0.03600826350988593, 0.02308711721875939, 0.0206375));
#1244 = CARTESIAN_POINT('NONE', (-0.036008263509885924, 0.02308711721875939, 0.0206375));
#1245 = LINE('NONE', #1244, #1243);
#1246 = DIRECTION('NONE', (0, 0, -1));
#1247 = VECTOR('NONE', #1246, 1);
#1248 = CARTESIAN_POINT('NONE', (-0.03052086741474703, 0.029968094279108768, 0.0206375));
#1249 = LINE('NONE', #1248, #1247);
#1250 = DIRECTION('NONE', (0.6234898018587336, 0.7818314824680297, 0));
#1250 = DIRECTION('NONE', (0.6234898018587333, 0.7818314824680301, 0));
#1251 = VECTOR('NONE', #1250, 1);
#1252 = CARTESIAN_POINT('NONE', (-0.03600826350988593, 0.02308711721875939, 0.0142875));
#1252 = CARTESIAN_POINT('NONE', (-0.036008263509885924, 0.02308711721875939, 0.0142875));
#1253 = LINE('NONE', #1252, #1251);
#1254 = DIRECTION('NONE', (0.9888308262251286, -0.14904226617617397, 0));
#1255 = VECTOR('NONE', #1254, 1);
@ -3385,20 +3385,20 @@ DATA;
#3369 = DIRECTION('NONE', (-0, -1, 0));
#3370 = AXIS2_PLACEMENT_3D('NONE', #3368, #3369, $);
#3371 = PLANE('NONE', #3370);
#3372 = CARTESIAN_POINT('NONE', (-0.006600825000000004, 0.031114011909376387, 0.0174625));
#3373 = DIRECTION('NONE', (-0.8660254037844388, -0.49999999999999967, -0));
#3372 = CARTESIAN_POINT('NONE', (-0.006600825000000002, 0.031114011909376384, 0.0174625));
#3373 = DIRECTION('NONE', (-0.866025403784439, -0.49999999999999956, -0.000000000000000000000000000000006162975822039155));
#3374 = AXIS2_PLACEMENT_3D('NONE', #3372, #3373, $);
#3375 = PLANE('NONE', #3374);
#3376 = CARTESIAN_POINT('NONE', (-0.006600825000000002, 0.038735988090623605, 0.017462499999999995));
#3377 = DIRECTION('NONE', (-0.8660254037844386, 0.5000000000000001, -0));
#3376 = CARTESIAN_POINT('NONE', (-0.006600824999999999, 0.038735988090623605, 0.0174625));
#3377 = DIRECTION('NONE', (-0.8660254037844386, 0.5000000000000001, 0));
#3378 = AXIS2_PLACEMENT_3D('NONE', #3376, #3377, $);
#3379 = PLANE('NONE', #3378);
#3380 = CARTESIAN_POINT('NONE', (-0.0000000000000000008881784197001253, 0.04254697618124722, 0.0174625));
#3380 = CARTESIAN_POINT('NONE', (0.000000000000000003996802888650563, 0.04254697618124722, 0.017462499999999995));
#3381 = DIRECTION('NONE', (0, 1, 0));
#3382 = AXIS2_PLACEMENT_3D('NONE', #3380, #3381, $);
#3383 = PLANE('NONE', #3382);
#3384 = CARTESIAN_POINT('NONE', (0.0066008249999999985, 0.0387359880906236, 0.0174625));
#3385 = DIRECTION('NONE', (0.8660254037844388, 0.49999999999999967, 0));
#3384 = CARTESIAN_POINT('NONE', (0.006600825, 0.0387359880906236, 0.0174625));
#3385 = DIRECTION('NONE', (0.8660254037844388, 0.4999999999999995, 0));
#3386 = AXIS2_PLACEMENT_3D('NONE', #3384, #3385, $);
#3387 = PLANE('NONE', #3386);
#3388 = CARTESIAN_POINT('NONE', (0, 0.034925, 0.0174625));
@ -3422,20 +3422,20 @@ DATA;
#3406 = DIRECTION('NONE', (-0.7818314824680298, -0.6234898018587336, 0));
#3407 = AXIS2_PLACEMENT_3D('NONE', #3405, #3406, $);
#3408 = PLANE('NONE', #3407);
#3409 = CARTESIAN_POINT('NONE', (0.020210366985281496, 0.0245600019156694, 0.0174625));
#3410 = DIRECTION('NONE', (-0.9308737486442044, 0.36534102436639515, -0));
#3409 = CARTESIAN_POINT('NONE', (0.020210366985281496, 0.024560001915669396, 0.0174625));
#3410 = DIRECTION('NONE', (-0.9308737486442041, 0.36534102436639554, -0.000000000000000000000000000000006162975822039155));
#3411 = AXIS2_PLACEMENT_3D('NONE', #3409, #3410, $);
#3412 = PLANE('NONE', #3411);
#3413 = CARTESIAN_POINT('NONE', (0.026169467922402025, 0.02931222633468721, 0.017462499999999995));
#3414 = DIRECTION('NONE', (-0.14904226617617383, 0.9888308262251286, -0));
#3413 = CARTESIAN_POINT('NONE', (0.026169467922402028, 0.02931222633468721, 0.0174625));
#3414 = DIRECTION('NONE', (-0.1490422661761737, 0.9888308262251286, 0));
#3415 = AXIS2_PLACEMENT_3D('NONE', #3413, #3414, $);
#3416 = PLANE('NONE', #3415);
#3417 = CARTESIAN_POINT('NONE', (0.03326456546231646, 0.026527605748934088, 0.0174625));
#3418 = DIRECTION('NONE', (0.7818314824680295, 0.6234898018587338, 0));
#3417 = CARTESIAN_POINT('NONE', (0.03326456546231646, 0.026527605748934077, 0.017462499999999995));
#3418 = DIRECTION('NONE', (0.7818314824680298, 0.6234898018587336, 0));
#3419 = AXIS2_PLACEMENT_3D('NONE', #3417, #3418, $);
#3420 = PLANE('NONE', #3419);
#3421 = CARTESIAN_POINT('NONE', (0.03440056206511037, 0.018990760744163143, 0.0174625));
#3422 = DIRECTION('NONE', (0.9308737486442044, -0.36534102436639526, 0));
#3422 = DIRECTION('NONE', (0.9308737486442041, -0.3653410243663953, 0));
#3423 = AXIS2_PLACEMENT_3D('NONE', #3421, #3422, $);
#3424 = PLANE('NONE', #3423);
#3425 = CARTESIAN_POINT('NONE', (0.02730546452519594, 0.02177538132991627, 0.0174625));
@ -3459,16 +3459,16 @@ DATA;
#3443 = DIRECTION('NONE', (-0.9749279121818235, 0.22252093395631442, -0.0000000000000000000000000000000030814879110195774));
#3444 = AXIS2_PLACEMENT_3D('NONE', #3442, #3443, $);
#3445 = PLANE('NONE', #3444);
#3446 = CARTESIAN_POINT('NONE', (0.03180274041429091, -0.0004881904532747314, 0.0174625));
#3447 = DIRECTION('NONE', (-0.2947551744109037, 0.9555728057861408, -0));
#3446 = CARTESIAN_POINT('NONE', (0.0318027404142909, -0.00048819045327473263, 0.0174625));
#3447 = DIRECTION('NONE', (-0.2947551744109037, 0.955572805786141, -0.000000000000000000000000000000006162975822039155));
#3448 = AXIS2_PLACEMENT_3D('NONE', #3446, #3447, $);
#3449 = PLANE('NONE', #3448);
#3450 = CARTESIAN_POINT('NONE', (0.039233617739373845, -0.002184239711718646, 0.017462499999999995));
#3451 = DIRECTION('NONE', (0.6801727377709199, 0.7330518718298258, 0));
#3450 = CARTESIAN_POINT('NONE', (0.039233617739373845, -0.0021842397117186486, 0.0174625));
#3451 = DIRECTION('NONE', (0.6801727377709197, 0.733051871829826, 0));
#3452 = AXIS2_PLACEMENT_3D('NONE', #3450, #3451, $);
#3453 = PLANE('NONE', #3452);
#3454 = CARTESIAN_POINT('NONE', (0.041480234658033126, -0.00946759287686819, 0.0174625));
#3455 = DIRECTION('NONE', (0.9749279121818235, -0.22252093395631442, 0));
#3454 = CARTESIAN_POINT('NONE', (0.041480234658033126, -0.009467592876868191, 0.017462499999999995));
#3455 = DIRECTION('NONE', (0.9749279121818237, -0.22252093395631437, 0));
#3456 = AXIS2_PLACEMENT_3D('NONE', #3454, #3455, $);
#3457 = PLANE('NONE', #3456);
#3458 = CARTESIAN_POINT('NONE', (0.036295974251609464, -0.015054896783573819, 0.0174625));
@ -3496,20 +3496,20 @@ DATA;
#3480 = DIRECTION('NONE', (-0.43388373911755784, 0.9009688679024194, 0.000000000000000000000000000000006162975822039155));
#3481 = AXIS2_PLACEMENT_3D('NONE', #3479, #3480, $);
#3482 = PLANE('NONE', #3481);
#3483 = CARTESIAN_POINT('NONE', (0.01944700165366045, -0.02516876545363257, 0.0174625));
#3484 = DIRECTION('NONE', (0.5633200580636222, 0.8262387743159947, 0));
#3483 = CARTESIAN_POINT('NONE', (0.01944700165366045, -0.025168765453632568, 0.0174625));
#3484 = DIRECTION('NONE', (0.5633200580636224, 0.8262387743159947, 0));
#3485 = AXIS2_PLACEMENT_3D('NONE', #3483, #3484, $);
#3486 = PLANE('NONE', #3485);
#3487 = CARTESIAN_POINT('NONE', (0.022754053178644963, -0.032035928704830074, 0.017462499999999995));
#3488 = DIRECTION('NONE', (0.9972037971811802, -0.07473009358642414, 0));
#3487 = CARTESIAN_POINT('NONE', (0.02275405317864496, -0.03203592870483008, 0.0174625));
#3488 = DIRECTION('NONE', (0.9972037971811802, -0.07473009358642456, 0.0000000000000000000000000000000015407439555097887));
#3489 = AXIS2_PLACEMENT_3D('NONE', #3487, #3488, $);
#3490 = PLANE('NONE', #3489);
#3491 = CARTESIAN_POINT('NONE', (0.018460441113665235, -0.03833350096268949, 0.0174625));
#3492 = DIRECTION('NONE', (0.4338837391175577, -0.9009688679024195, 0));
#3491 = CARTESIAN_POINT('NONE', (0.018460441113665228, -0.03833350096268949, 0.017462499999999995));
#3492 = DIRECTION('NONE', (0.43388373911755723, -0.9009688679024195, 0));
#3493 = AXIS2_PLACEMENT_3D('NONE', #3491, #3492, $);
#3494 = PLANE('NONE', #3493);
#3495 = CARTESIAN_POINT('NONE', (0.01085977752370099, -0.03776390996935139, 0.0174625));
#3496 = DIRECTION('NONE', (-0.5633200580636212, -0.8262387743159955, -0));
#3496 = DIRECTION('NONE', (-0.5633200580636213, -0.8262387743159954, -0));
#3497 = AXIS2_PLACEMENT_3D('NONE', #3495, #3496, $);
#3498 = PLANE('NONE', #3497);
#3499 = CARTESIAN_POINT('NONE', (0.015153389588680722, -0.03146633771149198, 0.0174625));
@ -3533,20 +3533,20 @@ DATA;
#3517 = DIRECTION('NONE', (0.43388373911755823, 0.9009688679024191, 0));
#3518 = AXIS2_PLACEMENT_3D('NONE', #3516, #3517, $);
#3519 = PLANE('NONE', #3518);
#3520 = CARTESIAN_POINT('NONE', (-0.007552725998716469, -0.030896746718153886, 0.017462499999999992));
#3521 = DIRECTION('NONE', (0.9972037971811802, 0.07473009358642403, 0));
#3520 = CARTESIAN_POINT('NONE', (-0.00755272599871647, -0.030896746718153883, 0.017462499999999995));
#3521 = DIRECTION('NONE', (0.9972037971811802, 0.074730093586424, 0));
#3522 = AXIS2_PLACEMENT_3D('NONE', #3520, #3521, $);
#3523 = PLANE('NONE', #3522);
#3524 = CARTESIAN_POINT('NONE', (-0.01085977752370098, -0.037763909969351396, 0.017462499999999995));
#3525 = DIRECTION('NONE', (0.563320058063622, -0.8262387743159951, 0));
#3524 = CARTESIAN_POINT('NONE', (-0.010859777523700983, -0.037763909969351396, 0.017462499999999995));
#3525 = DIRECTION('NONE', (0.5633200580636216, -0.8262387743159952, 0));
#3526 = AXIS2_PLACEMENT_3D('NONE', #3524, #3525, $);
#3527 = PLANE('NONE', #3526);
#3528 = CARTESIAN_POINT('NONE', (-0.018460441113665224, -0.0383335009626895, 0.017462499999999995));
#3529 = DIRECTION('NONE', (-0.43388373911755745, -0.9009688679024194, 0.000000000000000000000000000000006162975822039155));
#3528 = CARTESIAN_POINT('NONE', (-0.018460441113665228, -0.03833350096268949, 0.017462499999999992));
#3529 = DIRECTION('NONE', (-0.4338837391175573, -0.9009688679024197, -0));
#3530 = AXIS2_PLACEMENT_3D('NONE', #3528, #3529, $);
#3531 = PLANE('NONE', #3530);
#3532 = CARTESIAN_POINT('NONE', (-0.022754053178644953, -0.03203592870483008, 0.017462499999999995));
#3533 = DIRECTION('NONE', (-0.9972037971811802, -0.07473009358642413, -0.0000000000000000000000000000000015407439555097887));
#3533 = DIRECTION('NONE', (-0.9972037971811802, -0.07473009358642368, 0));
#3534 = AXIS2_PLACEMENT_3D('NONE', #3532, #3533, $);
#3535 = PLANE('NONE', #3534);
#3536 = CARTESIAN_POINT('NONE', (-0.015153389588680708, -0.031466337711491994, 0.017462499999999995));
@ -3570,20 +3570,20 @@ DATA;
#3554 = DIRECTION('NONE', (0.9749279121818237, 0.22252093395631356, 0));
#3555 = AXIS2_PLACEMENT_3D('NONE', #3553, #3554, $);
#3556 = PLANE('NONE', #3555);
#3557 = CARTESIAN_POINT('NONE', (-0.028865096926526532, -0.013358847525129893, 0.0174625));
#3558 = DIRECTION('NONE', (0.6801727377709185, -0.7330518718298272, 0));
#3557 = CARTESIAN_POINT('NONE', (-0.028865096926526532, -0.01335884752512989, 0.0174625));
#3558 = DIRECTION('NONE', (0.6801727377709186, -0.7330518718298271, 0.000000000000000000000000000000006162975822039155));
#3559 = AXIS2_PLACEMENT_3D('NONE', #3557, #3558, $);
#3560 = PLANE('NONE', #3559);
#3561 = CARTESIAN_POINT('NONE', (-0.03629597425160948, -0.0150548967835738, 0.017462499999999995));
#3562 = DIRECTION('NONE', (-0.2947551744109054, -0.9555728057861405, -0));
#3561 = CARTESIAN_POINT('NONE', (-0.03629597425160948, -0.015054896783573798, 0.0174625));
#3562 = DIRECTION('NONE', (-0.2947551744109055, -0.9555728057861405, -0.000000000000000000000000000000006162975822039155));
#3563 = AXIS2_PLACEMENT_3D('NONE', #3561, #3562, $);
#3564 = PLANE('NONE', #3563);
#3565 = CARTESIAN_POINT('NONE', (-0.04148023465803313, -0.009467592876868165, 0.0174625));
#3566 = DIRECTION('NONE', (-0.974927912181824, -0.2225209339563127, -0));
#3565 = CARTESIAN_POINT('NONE', (-0.041480234658033126, -0.009467592876868158, 0.017462499999999995));
#3566 = DIRECTION('NONE', (-0.974927912181824, -0.22252093395631345, 0));
#3567 = AXIS2_PLACEMENT_3D('NONE', #3565, #3566, $);
#3568 = PLANE('NONE', #3567);
#3569 = CARTESIAN_POINT('NONE', (-0.03923361773937384, -0.002184239711718622, 0.0174625));
#3570 = DIRECTION('NONE', (-0.6801727377709194, 0.7330518718298266, -0));
#3569 = CARTESIAN_POINT('NONE', (-0.03923361773937384, -0.0021842397117186212, 0.0174625));
#3570 = DIRECTION('NONE', (-0.6801727377709191, 0.7330518718298266, -0));
#3571 = AXIS2_PLACEMENT_3D('NONE', #3569, #3570, $);
#3572 = PLANE('NONE', #3571);
#3573 = CARTESIAN_POINT('NONE', (-0.0340493573329502, -0.007771543618424253, 0.0174625));
@ -3608,15 +3608,15 @@ DATA;
#3592 = AXIS2_PLACEMENT_3D('NONE', #3590, #3591, $);
#3593 = PLANE('NONE', #3592);
#3594 = CARTESIAN_POINT('NONE', (-0.028441461127989853, 0.014238536325145318, 0.0174625));
#3595 = DIRECTION('NONE', (-0.14904226617617458, -0.9888308262251286, -0));
#3595 = DIRECTION('NONE', (-0.1490422661761743, -0.9888308262251286, 0.0000000000000000000000000000000030814879110195774));
#3596 = AXIS2_PLACEMENT_3D('NONE', #3594, #3595, $);
#3597 = PLANE('NONE', #3596);
#3598 = CARTESIAN_POINT('NONE', (-0.03440056206511038, 0.018990760744163133, 0.017462499999999995));
#3599 = DIRECTION('NONE', (-0.9308737486442044, -0.36534102436639526, -0));
#3598 = CARTESIAN_POINT('NONE', (-0.03440056206511038, 0.018990760744163133, 0.0174625));
#3599 = DIRECTION('NONE', (-0.9308737486442047, -0.3653410243663939, 0));
#3600 = AXIS2_PLACEMENT_3D('NONE', #3598, #3599, $);
#3601 = PLANE('NONE', #3600);
#3602 = CARTESIAN_POINT('NONE', (-0.033264565462316466, 0.026527605748934074, 0.0174625));
#3603 = DIRECTION('NONE', (-0.7818314824680298, 0.6234898018587336, -0));
#3602 = CARTESIAN_POINT('NONE', (-0.03326456546231646, 0.026527605748934074, 0.017462499999999995));
#3603 = DIRECTION('NONE', (-0.7818314824680305, 0.6234898018587326, -0.00000000000000000000000000000001232595164407831));
#3604 = AXIS2_PLACEMENT_3D('NONE', #3602, #3603, $);
#3605 = PLANE('NONE', #3604);
#3606 = CARTESIAN_POINT('NONE', (-0.02616946792240203, 0.029312226334687202, 0.0174625));

View File

@ -2571,21 +2571,21 @@ DATA;
#2555 = VERTEX_POINT('NONE', #2554);
#2556 = CARTESIAN_POINT('NONE', (-0.007619999999999999, -0.04635499999999999, 0.0254));
#2557 = VERTEX_POINT('NONE', #2556);
#2558 = CARTESIAN_POINT('NONE', (0.0020980400000000007, -0.04167632, 0.0238125));
#2558 = CARTESIAN_POINT('NONE', (0.0020980400000000002, -0.04167632, 0.0238125));
#2559 = VERTEX_POINT('NONE', #2558);
#2560 = CARTESIAN_POINT('NONE', (0.0012729244244215347, -0.0425658054737599, 0.0238125));
#2560 = CARTESIAN_POINT('NONE', (0.0012729244244215345, -0.0425658054737599, 0.0238125));
#2561 = VERTEX_POINT('NONE', #2560);
#2562 = CARTESIAN_POINT('NONE', (0.0012729244244215347, -0.0425658054737599, 0.0254));
#2562 = CARTESIAN_POINT('NONE', (0.0012729244244215345, -0.0425658054737599, 0.0254));
#2563 = VERTEX_POINT('NONE', #2562);
#2564 = CARTESIAN_POINT('NONE', (0.0020980400000000007, -0.04167632, 0.0254));
#2564 = CARTESIAN_POINT('NONE', (0.0020980400000000002, -0.04167632, 0.0254));
#2565 = VERTEX_POINT('NONE', #2564);
#2566 = CARTESIAN_POINT('NONE', (-0.000680486600928543, -0.0446716083246068, 0.0238125));
#2566 = CARTESIAN_POINT('NONE', (-0.0006804866009285434, -0.0446716083246068, 0.0238125));
#2567 = VERTEX_POINT('NONE', #2566);
#2568 = CARTESIAN_POINT('NONE', (-0.000680486600928543, -0.0446716083246068, 0.0254));
#2568 = CARTESIAN_POINT('NONE', (-0.0006804866009285434, -0.0446716083246068, 0.0254));
#2569 = VERTEX_POINT('NONE', #2568);
#2570 = CARTESIAN_POINT('NONE', (-0.0015096417774425877, -0.045565448541457644, 0.0238125));
#2570 = CARTESIAN_POINT('NONE', (-0.0015096417774425879, -0.045565448541457644, 0.0238125));
#2571 = VERTEX_POINT('NONE', #2570);
#2572 = CARTESIAN_POINT('NONE', (-0.0015096417774425877, -0.045565448541457644, 0.0254));
#2572 = CARTESIAN_POINT('NONE', (-0.0015096417774425879, -0.045565448541457644, 0.0254));
#2573 = VERTEX_POINT('NONE', #2572);
#2574 = CARTESIAN_POINT('NONE', (-0.0010921999999999998, -0.04595367999999999, 0.0238125));
#2575 = VERTEX_POINT('NONE', #2574);
@ -10417,58 +10417,58 @@ DATA;
#10401 = VECTOR('NONE', #10400, 1);
#10402 = CARTESIAN_POINT('NONE', (-0.007619999999999999, -0.04635499999999999, 0.0254));
#10403 = LINE('NONE', #10402, #10401);
#10404 = DIRECTION('NONE', (-0.6800813455659819, -0.7331366608028572, 0));
#10404 = DIRECTION('NONE', (-0.6800813455659818, -0.7331366608028573, 0));
#10405 = VECTOR('NONE', #10404, 1);
#10406 = CARTESIAN_POINT('NONE', (0.0020980400000000007, -0.04167632, 0.0238125));
#10406 = CARTESIAN_POINT('NONE', (0.0020980400000000002, -0.04167632, 0.0238125));
#10407 = LINE('NONE', #10406, #10405);
#10408 = DIRECTION('NONE', (0, 0, 1));
#10409 = VECTOR('NONE', #10408, 1);
#10410 = CARTESIAN_POINT('NONE', (0.0012729244244215347, -0.0425658054737599, 0.0238125));
#10410 = CARTESIAN_POINT('NONE', (0.0012729244244215345, -0.0425658054737599, 0.0238125));
#10411 = LINE('NONE', #10410, #10409);
#10412 = DIRECTION('NONE', (-0.6800813455659819, -0.7331366608028572, 0));
#10412 = DIRECTION('NONE', (-0.6800813455659818, -0.7331366608028573, 0));
#10413 = VECTOR('NONE', #10412, 1);
#10414 = CARTESIAN_POINT('NONE', (0.0020980400000000007, -0.04167632, 0.0254));
#10414 = CARTESIAN_POINT('NONE', (0.0020980400000000002, -0.04167632, 0.0254));
#10415 = LINE('NONE', #10414, #10413);
#10416 = DIRECTION('NONE', (0, 0, 1));
#10417 = VECTOR('NONE', #10416, 1);
#10418 = CARTESIAN_POINT('NONE', (0.0020980400000000007, -0.04167632, 0.0238125));
#10418 = CARTESIAN_POINT('NONE', (0.0020980400000000002, -0.04167632, 0.0238125));
#10419 = LINE('NONE', #10418, #10417);
#10420 = DIRECTION('NONE', (0.5276972660417221, 0.8494325137479093, -0));
#10421 = DIRECTION('NONE', (0.0000000000000025022368681948575, -0.0000000000000015544772927388748, 1));
#10422 = CARTESIAN_POINT('NONE', (0.0005008822163118532, -0.04380855921867364, 0.0238125));
#10420 = DIRECTION('NONE', (0.5276972660417225, 0.8494325137479091, -0));
#10421 = DIRECTION('NONE', (0.0000000000000025022368681948567, -0.000000000000001554477292738876, 1));
#10422 = CARTESIAN_POINT('NONE', (0.0005008822163118523, -0.04380855921867364, 0.0238125));
#10423 = AXIS2_PLACEMENT_3D('NONE', #10422, #10421, #10420);
#10424 = CIRCLE('NONE', #10423, 0.0014630400000000007);
#10424 = CIRCLE('NONE', #10423, 0.001463040000000001);
#10425 = DIRECTION('NONE', (0, 0, 1));
#10426 = VECTOR('NONE', #10425, 1);
#10427 = CARTESIAN_POINT('NONE', (-0.000680486600928543, -0.0446716083246068, 0.0238125));
#10427 = CARTESIAN_POINT('NONE', (-0.0006804866009285434, -0.0446716083246068, 0.0238125));
#10428 = LINE('NONE', #10427, #10426);
#10429 = DIRECTION('NONE', (0.5276972660417224, 0.8494325137479088, -0));
#10430 = DIRECTION('NONE', (-0.0000000000000025022368681948563, 0.0000000000000015544772927388758, 0.9999999999999998));
#10429 = DIRECTION('NONE', (0.5276972660417225, 0.8494325137479091, -0));
#10430 = DIRECTION('NONE', (-0.0000000000000025022368681948567, 0.000000000000001554477292738876, 1));
#10431 = CARTESIAN_POINT('NONE', (0.0005008822163118523, -0.04380855921867364, 0.0254));
#10432 = AXIS2_PLACEMENT_3D('NONE', #10431, #10430, #10429);
#10433 = CIRCLE('NONE', #10432, 0.0014630400000000014);
#10433 = CIRCLE('NONE', #10432, 0.001463040000000001);
#10434 = DIRECTION('NONE', (-0.6800813455659821, -0.733136660802857, 0));
#10435 = VECTOR('NONE', #10434, 1);
#10436 = CARTESIAN_POINT('NONE', (-0.0006804866009285428, -0.0446716083246068, 0.0238125));
#10436 = CARTESIAN_POINT('NONE', (-0.000680486600928543, -0.0446716083246068, 0.0238125));
#10437 = LINE('NONE', #10436, #10435);
#10438 = DIRECTION('NONE', (0, 0, 1));
#10439 = VECTOR('NONE', #10438, 1);
#10440 = CARTESIAN_POINT('NONE', (-0.0015096417774425877, -0.045565448541457644, 0.0238125));
#10440 = CARTESIAN_POINT('NONE', (-0.0015096417774425879, -0.045565448541457644, 0.0238125));
#10441 = LINE('NONE', #10440, #10439);
#10442 = DIRECTION('NONE', (-0.6800813455659821, -0.733136660802857, 0));
#10443 = VECTOR('NONE', #10442, 1);
#10444 = CARTESIAN_POINT('NONE', (-0.0006804866009285428, -0.0446716083246068, 0.0254));
#10444 = CARTESIAN_POINT('NONE', (-0.000680486600928543, -0.0446716083246068, 0.0254));
#10445 = LINE('NONE', #10444, #10443);
#10446 = DIRECTION('NONE', (-0.7529894373157879, -0.6580326035166137, -0));
#10446 = DIRECTION('NONE', (-0.7529894373157879, -0.6580326035166139, -0));
#10447 = DIRECTION('NONE', (0, 0, -1));
#10448 = CARTESIAN_POINT('NONE', (0.0004985810518786172, -0.04381047558787883, 0.0238125));
#10448 = CARTESIAN_POINT('NONE', (0.0004985810518786167, -0.04381047558787883, 0.0238125));
#10449 = AXIS2_PLACEMENT_3D('NONE', #10448, #10447, #10446);
#10450 = CIRCLE('NONE', #10449, 0.002666999999999998);
#10451 = DIRECTION('NONE', (-0.7529894373157879, -0.6580326035166137, -0));
#10450 = CIRCLE('NONE', #10449, 0.0026669999999999975);
#10451 = DIRECTION('NONE', (-0.7529894373157879, -0.6580326035166139, -0));
#10452 = DIRECTION('NONE', (0, 0, -1));
#10453 = CARTESIAN_POINT('NONE', (0.0004985810518786172, -0.04381047558787883, 0.0254));
#10453 = CARTESIAN_POINT('NONE', (0.0004985810518786167, -0.04381047558787883, 0.0254));
#10454 = AXIS2_PLACEMENT_3D('NONE', #10453, #10452, #10451);
#10455 = CIRCLE('NONE', #10454, 0.002666999999999998);
#10455 = CIRCLE('NONE', #10454, 0.0026669999999999975);
#10456 = DIRECTION('NONE', (0.6800813455659818, 0.7331366608028573, 0));
#10457 = VECTOR('NONE', #10456, 1);
#10458 = CARTESIAN_POINT('NONE', (-0.0010921999999999998, -0.04595367999999999, 0.0238125));
@ -15570,24 +15570,24 @@ DATA;
#15554 = DIRECTION('NONE', (1, 0, -0));
#15555 = AXIS2_PLACEMENT_3D('NONE', #15553, #15554, $);
#15556 = PLANE('NONE', #15555);
#15557 = CARTESIAN_POINT('NONE', (0.0016854822122107677, -0.04212106273687995, 0.024606250000000003));
#15558 = DIRECTION('NONE', (-0.7331366608028557, 0.6800813455659834, -0));
#15557 = CARTESIAN_POINT('NONE', (0.001685482212210767, -0.04212106273687995, 0.024606250000000003));
#15558 = DIRECTION('NONE', (-0.7331366608028554, 0.6800813455659833, -0));
#15559 = AXIS2_PLACEMENT_3D('NONE', #15557, #15558, $);
#15560 = PLANE('NONE', #15559);
#15561 = CARTESIAN_POINT('NONE', (0.0005008822163118532, -0.04380855921867364, 0.02460625));
#15562 = DIRECTION('NONE', (0, 0, 1));
#15563 = DIRECTION('NONE', (0.5276972660417221, 0.8494325137479093, -0));
#15563 = DIRECTION('NONE', (0.527697266041722, 0.8494325137479093, -0));
#15564 = AXIS2_PLACEMENT_3D('NONE', #15561, #15562, #15563);
#15565 = CYLINDRICAL_SURFACE('NONE', #15564, 0.0014630400000000007);
#15566 = CARTESIAN_POINT('NONE', (-0.0010950641891855266, -0.045118528433032185, 0.02460625));
#15566 = CARTESIAN_POINT('NONE', (-0.0010950641891855268, -0.045118528433032185, 0.02460625));
#15567 = DIRECTION('NONE', (-0.733136660802859, 0.6800813455659798, -0));
#15568 = AXIS2_PLACEMENT_3D('NONE', #15566, #15567, $);
#15569 = PLANE('NONE', #15568);
#15570 = CARTESIAN_POINT('NONE', (0.0004985810518786172, -0.04381047558787883, 0.02460625));
#15570 = CARTESIAN_POINT('NONE', (0.0004985810518786167, -0.04381047558787883, 0.02460625));
#15571 = DIRECTION('NONE', (0, 0, -1));
#15572 = DIRECTION('NONE', (-0.7529894373157879, -0.6580326035166137, -0));
#15572 = DIRECTION('NONE', (-0.7529894373157879, -0.6580326035166139, -0));
#15573 = AXIS2_PLACEMENT_3D('NONE', #15570, #15571, #15572);
#15574 = CYLINDRICAL_SURFACE('NONE', #15573, 0.002666999999999998);
#15574 = CYLINDRICAL_SURFACE('NONE', #15573, 0.0026669999999999975);
#15575 = CARTESIAN_POINT('NONE', (-0.0006796422122107669, -0.045508937263120046, 0.024606250000000003));
#15576 = DIRECTION('NONE', (0.7331366608028589, -0.68008134556598, 0));
#15577 = AXIS2_PLACEMENT_3D('NONE', #15575, #15576, $);

View File

@ -40,9 +40,9 @@ sketch002 = startSketchOn(loftPlane)
origin[0] + (antennaBaseWidth - antennaTopWidth) / 2,
origin[1] - ((antennaBaseHeight - antennaTopHeight) / 2)
], %)
|> xLine(antennaTopWidth, %)
|> yLine(-antennaTopHeight, %)
|> xLine(-antennaTopWidth, %)
|> xLine(length = antennaTopWidth)
|> yLine(length = -antennaTopHeight)
|> xLine(length = -antennaTopWidth)
|> close()
// Create the antenna using a loft

View File

@ -10,9 +10,9 @@ import height, width, thickness, chamferLength, offset, screenWidth, screenHeigh
bodySketch = startSketchOn('XZ')
|> startProfileAt([-width / 2, height / 2], %)
|> xLine(width, %, $chamfer1)
|> yLine(-height, %, $chamfer2)
|> xLine(-width, %, $chamfer3)
|> xLine(length = width, tag = $chamfer1)
|> yLine(length = -height, tag = $chamfer2)
|> xLine(length = -width, tag = $chamfer3)
|> close(tag = $chamfer4)
bodyExtrude = extrude(bodySketch, length = thickness)
|> chamfer(
@ -59,9 +59,9 @@ extrude002 = extrude(sketch002, length = -0.0625)
// Create the pocket for the screen
sketch003 = startSketchOn(extrude002, 'start')
|> startProfileAt([-screenWidth / 2, screenYPosition], %)
|> xLine(screenWidth, %, $seg01)
|> yLine(-screenHeight, %)
|> xLine(-segLen(seg01), %)
|> xLine(length = screenWidth, tag = $seg01)
|> yLine(length = -screenHeight)
|> xLine(length = -segLen(seg01))
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
extrude003 = extrude(sketch003, length = screenDepth)
@ -69,9 +69,9 @@ extrude003 = extrude(sketch003, length = screenDepth)
// Create the speaker box
sketch004 = startSketchOn(extrude002, 'start')
|> startProfileAt([-1.25 / 2, -.125], %)
|> xLine(speakerBoxWidth, %)
|> yLine(-speakerBoxHeight, %)
|> xLine(-speakerBoxWidth, %)
|> xLine(length = speakerBoxWidth)
|> yLine(length = -speakerBoxHeight)
|> xLine(length = -speakerBoxWidth)
|> close()
extrude(sketch004, length = -.5)
|> appearance(

View File

@ -14,9 +14,9 @@ plane = offsetPlane("XZ", offset = 1)
fn screenHole(sketchStart) {
sketch006 = startSketchOn(sketchStart)
|> startProfileAt([-screenWidth / 2, screenYPosition], %)
|> xLine(screenWidth, %)
|> yLine(-screenHeight, %)
|> xLine(-screenWidth, %)
|> xLine(length = screenWidth)
|> yLine(length = -screenHeight)
|> xLine(length = -screenWidth)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
return sketch006

View File

@ -25,14 +25,14 @@ knobPlane = {
// Create the knob sketch and revolve
startSketchOn(knobPlane)
|> startProfileAt([0.0001, 0], %)
|> xLine(knobDiameter / 2, %)
|> yLine(knobHeight - 0.05, %)
|> xLine(length = knobDiameter / 2)
|> yLine(length = knobHeight - 0.05)
|> arc({
angleStart = 0,
angleEnd = 90,
radius = .05
}, %)
|> xLineTo(0.0001, %)
|> xLine(endAbsolute = 0.0001)
|> close()
|> revolve({ axis = "Y" }, %)
|> appearance(color = '#D0FF01', metalness = 90, roughness = 50)

View File

@ -27,9 +27,9 @@ talkButtonSketch = startSketchOn(talkButtonPlane)
-talkButtonSideLength / 2,
talkButtonSideLength / 2
], %)
|> xLine(talkButtonSideLength, %, $tag1)
|> yLine(-talkButtonSideLength, %, $tag2)
|> xLine(-talkButtonSideLength, %, $tag3)
|> xLine(length = talkButtonSideLength, tag = $tag1)
|> yLine(length = -talkButtonSideLength, tag = $tag2)
|> xLine(length = -talkButtonSideLength, tag = $tag3)
|> close(tag = $tag4)
// Create the talk button and apply fillets

View File

@ -7,29 +7,29 @@ export fn zLogo(surface, origin, scale) {
0 + origin[0],
0.15 * scale + origin[1]
], %)
|> yLine(-0.15 * scale, %)
|> xLine(0.15 * scale, %)
|> yLine(length = -0.15 * scale)
|> xLine(length = 0.15 * scale)
|> angledLineToX({
angle = 47.15,
to = 0.3 * scale + origin[0]
}, %, $seg1)
|> yLineTo(0 + origin[1], %, $seg3)
|> xLine(0.63 * scale, %)
|> yLine(0.225 * scale, %)
|> xLine(-0.57 * scale, %)
|> yLine(endAbsolute = 0 + origin[1], tag = $seg3)
|> xLine(length = 0.63 * scale)
|> yLine(length = 0.225 * scale)
|> xLine(length = -0.57 * scale)
|> angledLineToX({
angle = 47.15,
to = 0.93 * scale + origin[0]
}, %)
|> yLine(0.15 * scale, %)
|> xLine(-0.15 * scale, %)
|> yLine(length = 0.15 * scale)
|> xLine(length = -0.15 * scale)
|> angledLine({
angle = 47.15,
length = -segLen(seg1)
}, %, $seg2)
|> yLine(segLen(seg3), %)
|> xLineTo(0 + origin[0], %)
|> yLine(-0.225 * scale, %)
|> yLine(length = segLen(seg3))
|> xLine(endAbsolute = 0 + origin[0])
|> yLine(length = -0.225 * scale)
|> angledLineThatIntersects({
angle = 0,
intersectTag = seg2,

View File

@ -2,6 +2,8 @@
# If a test uses the engine, we want to limit the number that can run in parallel.
# This way we don't start and stop too many engine instances, putting pressure on our cloud.
uses-engine = { max-threads = 4 }
# If a test must run after the engine tests, we want to make sure the engine tests are done first.
after-engine = { depends-on = ["uses-engine"], max-threads = 12 }
[profile.default]
slow-timeout = { period = "30s", terminate-after = 1 }
@ -24,3 +26,27 @@ threads-required = 2
[[profile.default.overrides]]
filter = "test(parser::parser_impl::snapshot_tests)"
slow-timeout = { period = "1s", terminate-after = 5 }
# Create the filters for things that need to run after the engine tests.
# Like generating the docs or the kcl-samples manifest, etc.
[[profile.default.overrides]]
# If a test starts with test_after_engine_, then it needs to be run after the engine tests.
filter = "test(test_after_engine_)"
test-group = "after-engine"
[[profile.ci.overrides]]
# If a test starts with test_after_engine_, then it needs to be run after the engine tests.
filter = "test(test_after_engine_)"
test-group = "after-engine"
[[profile.default.overrides]]
# Generate the docs tests after the engine tests.
filter = "test(docs::gen_std_tests)"
test-group = "after-engine"
[[profile.ci.overrides]]
# Generate the docs tests after the engine tests.
filter = "test(docs::gen_std_tests)"
test-group = "after-engine"

38
rust/Cargo.lock generated
View File

@ -1783,7 +1783,7 @@ dependencies = [
[[package]]
name = "kcl-bumper"
version = "0.1.46"
version = "0.1.47"
dependencies = [
"anyhow",
"clap",
@ -1794,7 +1794,7 @@ dependencies = [
[[package]]
name = "kcl-derive-docs"
version = "0.1.46"
version = "0.1.47"
dependencies = [
"Inflector",
"anyhow",
@ -1811,9 +1811,18 @@ dependencies = [
"syn 2.0.96",
]
[[package]]
name = "kcl-directory-test-macro"
version = "0.1.47"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.96",
]
[[package]]
name = "kcl-language-server"
version = "0.2.46"
version = "0.2.47"
dependencies = [
"anyhow",
"clap",
@ -1834,7 +1843,7 @@ dependencies = [
[[package]]
name = "kcl-language-server-release"
version = "0.1.46"
version = "0.1.47"
dependencies = [
"anyhow",
"clap",
@ -1854,7 +1863,7 @@ dependencies = [
[[package]]
name = "kcl-lib"
version = "0.2.46"
version = "0.2.47"
dependencies = [
"anyhow",
"approx 0.5.1",
@ -1882,6 +1891,7 @@ dependencies = [
"itertools 0.13.0",
"js-sys",
"kcl-derive-docs",
"kcl-directory-test-macro",
"kittycad",
"kittycad-modeling-cmds",
"lazy_static",
@ -1907,6 +1917,7 @@ dependencies = [
"tower-lsp",
"ts-rs",
"twenty-twenty",
"tynm",
"url",
"uuid",
"validator",
@ -1920,7 +1931,7 @@ dependencies = [
[[package]]
name = "kcl-python-bindings"
version = "0.3.46"
version = "0.3.47"
dependencies = [
"anyhow",
"kcl-lib",
@ -1935,7 +1946,7 @@ dependencies = [
[[package]]
name = "kcl-test-server"
version = "0.1.46"
version = "0.1.47"
dependencies = [
"anyhow",
"hyper 0.14.32",
@ -1948,7 +1959,7 @@ dependencies = [
[[package]]
name = "kcl-to-core"
version = "0.1.46"
version = "0.1.47"
dependencies = [
"anyhow",
"async-trait",
@ -1962,7 +1973,7 @@ dependencies = [
[[package]]
name = "kcl-wasm-lib"
version = "0.1.46"
version = "0.1.47"
dependencies = [
"bson",
"console_error_panic_hook",
@ -4232,6 +4243,15 @@ dependencies = [
"uuid",
]
[[package]]
name = "tynm"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd30d05e69d1478e13fe3e7a853409cfec82cebc2cf9b8d613b3c6b0081781ed"
dependencies = [
"nom",
]
[[package]]
name = "typenum"
version = "1.17.0"

View File

@ -3,6 +3,7 @@ resolver = "2"
members = [
"kcl-bumper",
"kcl-derive-docs",
"kcl-directory-test-macro",
"kcl-language-server",
"kcl-language-server-release",
"kcl-lib",

View File

@ -34,12 +34,14 @@ run-sim-test test_name:
# Run all the tests for the first time, in the right order.
{{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::parse
{{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::unparse
TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib -- tests::{{test_name}}::kcl_test_execute
{{cita}} -p kcl-lib -- tests::{{test_name}}::kcl_test_execute
{{cita}} -p kcl-lib -- simulation_tests::{{test_name}}::test_after_engine
overwrite-sim-test test_name:
EXPECTORATE=overwrite {{cita}} -p kcl-lib --no-quiet -- simulation_tests::{{test_name}}::parse
EXPECTORATE=overwrite {{cita}} -p kcl-lib --no-quiet -- simulation_tests::{{test_name}}::unparse
TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib --no-quiet -- tests::{{test_name}}::kcl_test_execute
EXPECTORATE=overwrite TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib --no-quiet -- tests::{{test_name}}::kcl_test_execute
EXPECTORATE=overwrite {{cita}} -p kcl-lib --no-quiet -- simulation_tests::{{test_name}}::test_after_engine
test:
export RUST_BRACKTRACE="full" && cargo nextest run --workspace --no-fail-fast
@ -52,6 +54,7 @@ bump-kcl-crate-versions bump='patch':
publish-kcl version:
git tag kcl-{{version}}
cargo publish -p kcl-derive-docs
cargo publish -p kcl-directory-test-macro
cargo publish -p kcl-lib
cargo publish -p kcl-test-server
# We push the tag at the end of publish since pushing the tag

View File

@ -1,7 +1,7 @@
[package]
name = "kcl-bumper"
version = "0.1.46"
version = "0.1.47"
edition = "2021"
repository = "https://github.com/KittyCAD/modeling-api"
rust-version = "1.76"
@ -9,6 +9,11 @@ description = "Bumps versions in Cargo.toml"
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[[bin]]
name = "kcl-bumper"
path = "src/main.rs"
bench = false
[dependencies]
anyhow = { workspace = true }
clap = { workspace = true, features = ["derive"] }

View File

@ -1,15 +1,15 @@
[package]
name = "kcl-derive-docs"
description = "A tool for generating documentation from Rust derive macros"
version = "0.1.46"
version = "0.1.47"
edition = "2021"
license = "MIT"
repository = "https://github.com/KittyCAD/modeling-app"
rust-version = "1.73"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[lib]
proc-macro = true
bench = false
[dependencies]
Inflector = "0.11.4"

Some files were not shown because too many files have changed in this diff Show More