Compare commits

...

13 Commits

Author SHA1 Message Date
129b91518f Don't bail command palette if there's no engineConnection (#6286)
The connection can't be bad if there is not yet `:galaxy-brain:`.

But seriously this behavior regressed share links because we would bail
from the command palette because the connection wasn't healthy.
2025-04-11 18:24:56 +00:00
c0aa763c3b initPromise in main.ts (#6285)
* initPromise in main.ts

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

* move initPromise so dep tree doesnt shit the bed

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

---------

Signed-off-by: Jess Frazelle <github@jessfraz.com>
2025-04-11 18:17:46 +00:00
319c60d4fa BREAKING: Change tangential arc to keyword args (#6266)
* Change tangentialArc, tangentialArcTo, and tangentialArcToRelative to keyword args

* Change tangentialArc offset to angle and convert to kw arg calls

* Fix lints

* Fix sketch errors and all unit tests passing

* Fix tangentialArcTo calls in KCL samples

* Update tangentialArc in samples

* Update sim test output

* Fix formatting

* Fix mistake in merge

* Fix gear rack sample

* Update output after more samples fixes

* Update gear rack output

* Add end label to docs snippet

* Fix to not add endAbsolute for an arc with radius or angle arguments

* Update docs outputs

* Fix formatting

* Fix executor tests

* Fix formatting

* Fix bench input files

* Fix spelling

* Improve error messages

---------

Co-authored-by: Adam Chalmers <adam.chalmers@zoo.dev>
2025-04-11 14:17:20 -04:00
66f95d25f6 Don't let too-tall line height goof up action buttons (#6253) 2025-04-11 14:06:36 -04:00
72ab72cea1 Bump vite from 6.2.5 to 6.2.6 in /packages/codemirror-lang-kcl in the security group (#6280)
Bump vite in /packages/codemirror-lang-kcl in the security group

Bumps the security group in /packages/codemirror-lang-kcl with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.5 to 6.2.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.6
  dependency-type: indirect
  dependency-group: security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 16:28:43 +00:00
4e1e9f9c6e Bump vite from 5.4.17 to 5.4.18 in the security group (#6281)
Bumps the security group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 5.4.17 to 5.4.18
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.18/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.18/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 5.4.18
  dependency-type: direct:development
  dependency-group: security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 16:24:24 +00:00
8b14d32879 Bump the security group in /rust with 2 updates (#6212)
Bumps the security group in /rust with 2 updates: [pyo3](https://github.com/pyo3/pyo3) and [tokio](https://github.com/tokio-rs/tokio).


Updates `pyo3` from 0.24.0 to 0.24.1
- [Release notes](https://github.com/pyo3/pyo3/releases)
- [Changelog](https://github.com/PyO3/pyo3/blob/v0.24.1/CHANGELOG.md)
- [Commits](https://github.com/pyo3/pyo3/compare/v0.24.0...v0.24.1)

Updates `tokio` from 1.44.1 to 1.44.2
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.44.1...tokio-1.44.2)

---
updated-dependencies:
- dependency-name: pyo3
  dependency-version: 0.24.1
  dependency-type: direct:production
  dependency-group: security
- dependency-name: tokio
  dependency-version: 1.44.2
  dependency-type: direct:production
  dependency-group: security
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 16:12:53 +00:00
7c5170dc16 Use the correct variable for the main branch (#6278) 2025-04-11 15:04:28 +00:00
a07dbc3aac chore: stabilizing named views e2e tests (#6246)
* fix: moving toast application state:

* fix: forgot the await on the expect calls, ts didn't yell at me?

* fix: cleaning up the camera move e2e code

* fix: lint,tsc,fmt

* Unblock on macOS for now

---------

Co-authored-by: Frank Noirot <frank@zoo.dev>
Co-authored-by: Jace Browning <jacebrowning@gmail.com>
2025-04-11 10:32:44 -04:00
7d3294ff78 Quick fix for windows codesign failures with digicert (#6275)
* pierremtb/issue6256-another-test

* yarn to npm install

* Revert "yarn to npm install"

This reverts commit 4a3daf950f.

* yarn to npm install

* Force IS_RELEASE=true

* Clean up for review
2025-04-11 14:31:44 +00:00
121c393466 UI fix for comment settings collision (#6249)
* UI fix for comment settings collision

* fmt

* Fix tsc by using Promise.reject

---------

Co-authored-by: Frank Noirot <frankjohnson1993@gmail.com>
2025-04-11 14:16:45 +00:00
c6ec54c138 Send test results to an API for analysis (#6261)
* Send test results to an API

* Include platform

* Include target

* Return earlier

* Include actual commit SHA

* Include PR number

* Rename variables for clarity
2025-04-11 10:04:13 -04:00
1f6b90d383 #6182 Improve calculate_circle_center (#6192)
* add tests for calculate_circle_center - the first one succeeds with the current impl

* fix calculate_circle_center

* comment cleanup

* clippy

* comment format

* update circle_three_point sim test snapshot for slight floating point changes introduced by calculate_circle_center refactor

* use TAU instead of 2 * PI

* clippy
2025-04-11 12:43:18 +02:00
184 changed files with 13503 additions and 17329 deletions

View File

@ -207,6 +207,13 @@ jobs:
smctl.exe keypair ls
C:\Windows\System32\certutil.exe -csp "DigiCert Signing Manager KSP" -key -user
smksp_cert_sync.exe
smctl windows certsync
# This last line `smctl windows certsync` was added after windows codesign failures started happening
# with nightly-v25.4.10. It looks like `smksp_cert_sync.exe` used to do the sync to the local cert store,
# but stopped doing it overnight. This extra call that I randomly got from this azure-related doc page
# https://docs.digicert.com/en/digicert-keylocker/code-signing/sign-with-third-party-signing-tools/windows-applications/sign-azure-apps-with-signtool-using-ksp-library.html#sync-certificates--windows-only--618365
# seems to be doing that extra sync that we need for scripts/sign-win.js to work.
# TODO: we still need to make sign-win.js errors fail the workflow, see issue #6276
shell: cmd
- name: Build the app (debug)

View File

@ -231,6 +231,11 @@ jobs:
env:
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
snapshottoken: ${{ secrets.KITTYCAD_API_TOKEN }}
TAB_API_URL: ${{ secrets.TAB_API_URL }}
TAB_API_KEY: ${{ secrets.TAB_API_KEY }}
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
CI_PR_NUMBER: ${{ github.event.pull_request.number }}
TARGET: web
- uses: actions/upload-artifact@v4
if: ${{ needs.conditions.outputs.should-run == 'true' && !cancelled() && (success() || failure()) }}
@ -365,6 +370,11 @@ jobs:
env:
FAIL_ON_CONSOLE_ERRORS: true
token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }}
TAB_API_URL: ${{ secrets.TAB_API_URL }}
TAB_API_KEY: ${{ secrets.TAB_API_KEY }}
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
CI_PR_NUMBER: ${{ github.event.pull_request.number }}
TARGET: desktop
- uses: actions/upload-artifact@v4
if: ${{ needs.conditions.outputs.should-run == 'true' && always() }}

View File

@ -188,9 +188,9 @@ example = extrude(exampleSketch, length = 1)
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
pipeHole = startSketchOn(XY)

View File

@ -65,7 +65,7 @@ case = startSketchOn(-XZ)
|> startProfileAt([-size, -size], %)
|> line(end = [2 * size, 0])
|> line(end = [0, 2 * size])
|> tangentialArcTo([-size, size], %)
|> tangentialArc(endAbsolute = [-size, size])
|> close()
|> extrude(length = 65)

View File

@ -128,8 +128,6 @@ layout: manual
* [`sweep`](kcl/sweep)
* [`tangentToEnd`](kcl/tangentToEnd)
* [`tangentialArc`](kcl/tangentialArc)
* [`tangentialArcTo`](kcl/tangentialArcTo)
* [`tangentialArcToRelative`](kcl/tangentialArcToRelative)
* [`toDegrees`](kcl/toDegrees)
* [`toRadians`](kcl/toRadians)
* [`translate`](kcl/translate)

View File

@ -57,7 +57,7 @@ case = startSketchOn(XY)
|> startProfileAt([-size, -size], %)
|> line(end = [2 * size, 0])
|> line(end = [0, 2 * size])
|> tangentialArcTo([-size, size], %)
|> tangentialArc(endAbsolute = [-size, size])
|> close(%)
|> extrude(length = 65)
@ -88,7 +88,7 @@ case = startSketchOn(XY)
|> startProfileAt([-size, -size], %)
|> line(end = [2 * size, 0])
|> line(end = [0, 2 * size])
|> tangentialArcTo([-size, size], %)
|> tangentialArc(endAbsolute = [-size, size])
|> close(%)
|> extrude(length = 65)

View File

@ -65,9 +65,9 @@ rotate(
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.
@ -90,9 +90,9 @@ sweepSketch = startSketchOn(XY)
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.
@ -115,9 +115,9 @@ sweepSketch = startSketchOn(XY)
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.
@ -162,7 +162,7 @@ circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)
sketch002 = startSketchOn(YZ)
sweepPath = startProfileAt([0, 0], sketch002)
|> yLine(length = 231.81)
|> tangentialArc({ radius = 80, offset = -90 }, %)
|> tangentialArc(radius = 80, angle = -90)
|> xLine(length = 384.93)
parts = sweep([rectangleSketch, circleSketch], path = sweepPath)

View File

@ -49,9 +49,9 @@ scale(
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.
@ -96,7 +96,7 @@ circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)
sketch002 = startSketchOn(YZ)
sweepPath = startProfileAt([0, 0], sketch002)
|> yLine(length = 231.81)
|> tangentialArc({ radius = 80, offset = -90 }, %)
|> tangentialArc(radius = 80, angle = -90)
|> xLine(length = 384.93)
parts = sweep([rectangleSketch, circleSketch], path = sweepPath)

View File

@ -30,7 +30,7 @@ segLen(tag: TagIdentifier): number
exampleSketch = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> angledLine(angle = 60, length = 10, tag = $thing)
|> tangentialArc({ offset = -120, radius = 5 }, %)
|> tangentialArc(angle = -120, radius = 5)
|> angledLine(angle = -60, length = segLen(thing))
|> close()

View File

@ -103,7 +103,7 @@ case = startSketchOn(-XZ)
|> startProfileAt([-size, -size], %)
|> line(end = [2 * size, 0])
|> line(end = [0, 2 * size])
|> tangentialArcTo([-size, size], %)
|> tangentialArc(endAbsolute = [-size, size])
|> close()
|> extrude(length = 65)
@ -128,7 +128,7 @@ case = startSketchOn(XY)
|> startProfileAt([-size, -size], %)
|> line(end = [2 * size, 0])
|> line(end = [0, 2 * size])
|> tangentialArcTo([-size, size], %)
|> tangentialArc(endAbsolute = [-size, size])
|> close()
|> extrude(length = 65)
@ -156,7 +156,7 @@ case = startSketchOn(XY)
|> startProfileAt([-size, -size], %)
|> line(end = [2 * size, 0])
|> line(end = [0, 2 * size])
|> tangentialArcTo([-size, size], %)
|> tangentialArc(endAbsolute = [-size, size])
|> close()
|> extrude(length = 65)

View File

@ -103,9 +103,9 @@ example = extrude(sketch001, length = 10)
sketch0011 = startSketchOn(XY)
|> startProfileAt([6.77, 0], %)
|> yLine(length = 1.27)
|> tangentialArcTo([5.96, 2.37], %)
|> tangentialArcTo([-6.2, 2.44], %)
|> tangentialArcTo([-6.6, 1.82], %)
|> tangentialArc(endAbsolute = [5.96, 2.37])
|> tangentialArc(endAbsolute = [-6.2, 2.44])
|> tangentialArc(endAbsolute = [-6.6, 1.82])
|> yLine(length = -1.82)
|> mirror2d( axis = X )
|> extrude(length = 10)

File diff suppressed because it is too large Load Diff

View File

@ -47,9 +47,9 @@ sweep(
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.
@ -102,7 +102,7 @@ circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)
sketch002 = startSketchOn(YZ)
sweepPath = startProfileAt([0, 0], sketch002)
|> yLine(length = 231.81)
|> tangentialArc({ radius = 80, offset = -90 }, %)
|> tangentialArc(radius = 80, angle = -90)
|> xLine(length = 384.93)
sweep([rectangleSketch, circleSketch], path = sweepPath)
@ -120,7 +120,7 @@ circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)
sketch002 = startSketchOn(YZ)
sweepPath = startProfileAt([0, 0], sketch002)
|> yLine(length = 231.81)
|> tangentialArc({ radius = 80, offset = -90 }, %)
|> tangentialArc(radius = 80, angle = -90)
|> xLine(length = 384.93)
sweep(circleSketch, path = sweepPath, sectional = true)

View File

@ -31,9 +31,9 @@ tangentToEnd(tag: TagIdentifier): number
pillSketch = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> line(end = [20, 0])
|> tangentialArcToRelative([0, 10], %, $arc1)
|> tangentialArc(end = [0, 10], tag = $arc1)
|> angledLine(angle = tangentToEnd(arc1), length = 20)
|> tangentialArcToRelative([0, -10], %)
|> tangentialArc(end = [0, -10])
|> close()
pillExtrude = extrude(pillSketch, length = 10)
@ -46,9 +46,9 @@ pillExtrude = extrude(pillSketch, length = 10)
pillSketch = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> line(end = [0, 20])
|> tangentialArcTo([10, 20], %, $arc1)
|> tangentialArc(endAbsolute = [10, 20], tag = $arc1)
|> angledLine(angle = tangentToEnd(arc1), length = 20)
|> tangentialArcToRelative([-10, 0], %)
|> tangentialArc(end = [-10, 0])
|> close()
pillExtrude = extrude(pillSketch, length = 10)

File diff suppressed because one or more lines are too long

View File

@ -45,9 +45,9 @@ translate(
sweepPath = startSketchOn(XZ)
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({ offset = 90, radius = 5 }, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({ offset = -90, radius = 5 }, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.
@ -97,7 +97,7 @@ circleSketch = circle(sketch001, center = [200, -30.29], radius = 32.63)
sketch002 = startSketchOn(YZ)
sweepPath = startProfileAt([0, 0], sketch002)
|> yLine(length = 231.81)
|> tangentialArc({ radius = 80, offset = -90 }, %)
|> tangentialArc(radius = 80, angle = -90)
|> xLine(length = 384.93)
parts = sweep([rectangleSketch, circleSketch], path = sweepPath)

View File

@ -920,7 +920,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -14.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -5.38], %)
|> tangentialArc(endAbsolute = [24.95, -5.38])
|> close()`
)
})
@ -969,7 +969,7 @@ sketch001 = startSketchOn(XZ)
// expect the code to have changed
await expect(page.locator('.cm-content')).toHaveText(
`sketch001 = startSketchOn(XZ) |> startProfileAt([4.61, -14.01], %) |> line(end = [12.73, -0.09]) |> tangentialArcTo([24.95, -5.38], %) |> close()extrude001 = extrude(sketch001, length = 5)`
`sketch001 = startSketchOn(XZ) |> startProfileAt([4.61, -14.01], %) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) |> close()extrude001 = extrude(sketch001, length = 5)`
)
// Now hit undo
@ -982,7 +982,7 @@ sketch001 = startSketchOn(XZ)
.toHaveText(`sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -14.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -5.38], %)
|> tangentialArc(endAbsolute = [24.95, -5.38])
|> close()`)
})
@ -998,7 +998,7 @@ sketch001 = startSketchOn(XZ)
sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -10.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -0.38], %)
|> tangentialArc(endAbsolute = [24.95, -0.38])
|> close()
|> extrude(length = 5)`
)
@ -1072,7 +1072,7 @@ sketch001 = startSketchOn(XZ)
// we wait so it saves the code
await page.waitForTimeout(800)
// drag tangentialArcTo handle
// drag tangentialArc handle
const tangentEnd = await u.getBoundingBox('[data-overlay-index="1"]')
await page.dragAndDrop('#stream', '#stream', {
sourcePosition: { x: tangentEnd.x + 10, y: tangentEnd.y - 5 },
@ -1089,7 +1089,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([2.71, -2.71], %)
|> line(end = [15.4, -2.78])
|> tangentialArcTo([27.6, -3.05], %)
|> tangentialArc(endAbsolute = [27.6, -3.05])
|> close()
|> extrude(length = 5)`,
{ shouldNormalise: true }
@ -1104,7 +1104,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([2.71, -2.71], %)
|> line(end = [15.4, -2.78])
|> tangentialArcTo([24.95, -0.38], %)
|> tangentialArc(endAbsolute = [24.95, -0.38])
|> close()
|> extrude(length = 5)`,
{ shouldNormalise: true }
@ -1119,7 +1119,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([2.71, -2.71], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -0.38], %)
|> tangentialArc(endAbsolute = [24.95, -0.38])
|> close()
|> extrude(length = 5)`,
{ shouldNormalise: true }
@ -1135,7 +1135,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -10.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -0.38], %)
|> tangentialArc(endAbsolute = [24.95, -0.38])
|> close()
|> extrude(length = 5)`,
{ shouldNormalise: true }

View File

@ -0,0 +1,63 @@
import type { Reporter, TestCase, TestResult } from '@playwright/test/reporter'
class MyAPIReporter implements Reporter {
onTestEnd(test: TestCase, result: TestResult): void {
if (!process.env.TAB_API_URL || !process.env.TAB_API_KEY) {
return
}
const payload = {
// Required information
project: 'https://github.com/KittyCAD/modeling-app',
branch: process.env.GITHUB_HEAD_REF || process.env.GITHUB_REF_NAME || '',
commit: process.env.CI_COMMIT_SHA || process.env.GITHUB_SHA || '',
test: test.titlePath().slice(2).join(' '),
status: result.status,
// Optional information
duration: result.duration / 1000,
message: result.error?.stack,
target: process.env.TARGET || null,
platform: process.env.RUNNER_OS || process.platform,
// Extra test and result data
annotations: test.annotations.map((a) => a.type),
retries: result.retry,
// Extra environment variables
CI_COMMIT_SHA: process.env.CI_COMMIT_SHA || null,
CI_PR_NUMBER: process.env.CI_PR_NUMBER || null,
GITHUB_BASE_REF: process.env.GITHUB_BASE_REF || null,
GITHUB_EVENT_NAME: process.env.GITHUB_EVENT_NAME || null,
GITHUB_HEAD_REF: process.env.GITHUB_HEAD_REF || null,
GITHUB_REF_NAME: process.env.GITHUB_REF_NAME || null,
GITHUB_REF: process.env.GITHUB_REF || null,
GITHUB_SHA: process.env.GITHUB_SHA || null,
GITHUB_WORKFLOW: process.env.GITHUB_WORKFLOW || null,
RUNNER_ARCH: process.env.RUNNER_ARCH || null,
}
void (async () => {
try {
const response = await fetch(`${process.env.TAB_API_URL}/api/results`, {
method: 'POST',
headers: new Headers({
'Content-Type': 'application/json',
'X-API-Key': process.env.TAB_API_KEY || '',
}),
body: JSON.stringify(payload),
})
if (!response.ok && !process.env.CI) {
console.error(
'TAB API - Failed to send test result:',
await response.text()
)
}
} catch {
if (!process.env.CI) {
console.error('TAB API - Unable to send test result')
}
}
})()
}
}
export default MyAPIReporter

View File

@ -6,7 +6,9 @@ import type { NamedView } from '@rust/kcl-lib/bindings/NamedView'
import {
createProject,
perProjectsettingsToToml,
orRunWhenFullSuiteEnabled,
perProjectSettingsToToml,
runningOnMac,
tomlToPerProjectSettings,
} from '@e2e/playwright/test-utils'
import { expect, test } from '@e2e/playwright/zoo-test'
@ -57,11 +59,13 @@ function tomlStringOverWriteNamedViewUuids(toml: string): string {
settings.settings.app.named_views = remappedNamedViews
}
}
return perProjectsettingsToToml(settings)
return perProjectSettingsToToml(settings)
}
test.describe('Named view tests', () => {
test.skip() // TODO: Jace is working on these
if (runningOnMac()) {
test.fixme(orRunWhenFullSuiteEnabled())
}
test('Verify project.toml is not created', async ({ page }, testInfo) => {
// Create project and load it
const projectName = 'named-views'
@ -105,6 +109,9 @@ test.describe('Named view tests', () => {
PROJECT_SETTINGS_FILE_NAME
)
const toastMessage = page.getByText('Named view uuid1 created.')
await expect(toastMessage).toBeInViewport()
// Expect project.toml to be generated on disk since a named view was created
await expect(async () => {
let exists = await fileExists(tempProjectSettingsFilePath)
@ -130,7 +137,6 @@ test.describe('Named view tests', () => {
}, testInfo) => {
const projectName = 'named-views'
const myNamedView1 = 'uuid1'
const myNamedView2 = 'uuid2'
// Create project and go into the project
await createProject({ name: projectName, page })
@ -142,6 +148,9 @@ test.describe('Named view tests', () => {
await cmdBar.argumentInput.fill(myNamedView1)
await cmdBar.progressCmdBar(false)
let toastMessage = page.getByText('Named view uuid1 created.')
await expect(toastMessage).toBeInViewport()
// Generate file paths for project.toml
const projectDirName = testInfo.outputPath('electron-test-projects-dir')
const tempProjectSettingsFilePath = join(
@ -170,17 +179,20 @@ test.describe('Named view tests', () => {
// Delete a named view
await cmdBar.openCmdBar()
await cmdBar.chooseCommand('delete named view')
cmdBar.selectOption({ name: myNamedView2 })
cmdBar.selectOption({ name: myNamedView1 })
await cmdBar.progressCmdBar(false)
toastMessage = page.getByText('Named view uuid1 removed.')
await expect(toastMessage).toBeInViewport()
await expect(async () => {
// Read project.toml into memory again since we deleted a named view
let tomlString = await fsp.readFile(tempProjectSettingsFilePath, 'utf-8')
// Rewrite the uuids in the named views to match snapshot otherwise they will be randomly generated from rust and break
tomlString = tomlStringOverWriteNamedViewUuids(tomlString)
// // Write the entire tomlString to a snapshot.
// // There are many key/value pairs to check this is a safer match.
// Write the entire tomlString to a snapshot.
// There are many key/value pairs to check this is a safer match.
expect(tomlString).toMatchSnapshot('verify-named-view-gets-deleted')
}).toPass()
})
@ -202,6 +214,9 @@ test.describe('Named view tests', () => {
await cmdBar.argumentInput.fill(myNamedView)
await cmdBar.progressCmdBar(false)
let toastMessage = page.getByText('Named view uuid1 created.')
await expect(toastMessage).toBeInViewport()
// Generate file paths for project.toml
const projectDirName = testInfo.outputPath('electron-test-projects-dir')
const tempProjectSettingsFilePath = join(
@ -258,26 +273,19 @@ test.describe('Named view tests', () => {
await cmdBar.argumentInput.fill(myNamedView1)
await cmdBar.progressCmdBar(false)
await page.waitForTimeout(1000)
let toastMessage = page.getByText('Named view uuid1 created.')
await expect(toastMessage).toBeInViewport()
const orbitMouseStart = { x: 800, y: 130 }
const orbitMouseEnd = { x: 0, y: 130 }
await page.mouse.move(orbitMouseStart.x, orbitMouseStart.y)
await page.mouse.down({ button: 'middle' })
await page.mouse.move(orbitMouseEnd.x, orbitMouseEnd.y, {
steps: 3,
})
await page.mouse.up({ button: 'middle' })
await page.waitForTimeout(1000)
await scene.moveCameraTo({ x: 608, y: 0, z: 0 }, { x: 0, y: 0, z: 0 })
await page.waitForTimeout(2500)
await cmdBar.openCmdBar()
await cmdBar.chooseCommand('create named view')
await cmdBar.argumentInput.fill(myNamedView2)
await cmdBar.progressCmdBar(false)
// Wait a moment for the project.toml to get written to disk with the new view point
await page.waitForTimeout(1000)
toastMessage = page.getByText('Named view uuid2 created.')
await expect(toastMessage).toBeInViewport()
// Generate paths for the project.toml
const tempProjectSettingsFilePath = join(

View File

@ -1,16 +1,5 @@
[settings]
app = { }
modeling = { }
text_editor = { }
command_bar = { }
[settings.app.named_views.0656fb1a-9640-473e-b334-591dc70c0138]
name = "uuid1"
eye_offset = 1_378.0059
fov_y = 45
is_ortho = false
ortho_scale_enabled = true
ortho_scale_factor = 1.6
pivot_position = [ 0, 0, 0 ]
pivot_rotation = [ 0.5380994, 0.0, 0.0, 0.8428814 ]
world_coord_system = "right_handed_up_z"
version = 1

View File

@ -17,12 +17,12 @@ version = 1
[settings.app.named_views.c810cf04-c6cc-4a4a-8b11-17bf445dcab7]
name = "uuid2"
eye_offset = 1_378.0059
eye_offset = 608
fov_y = 45
is_ortho = false
ortho_scale_enabled = true
ortho_scale_factor = 1.6
pivot_position = [ 1_826.5239, 0.0, 0.0 ]
pivot_rotation = [ 0.5380994, 0.0, 0.0, 0.8428814 ]
pivot_position = [ 0, 0, 0 ]
pivot_rotation = [ 0.5, 0.5, 0.5, 0.5 ]
world_coord_system = "right_handed_up_z"
version = 1

View File

@ -550,7 +550,7 @@ openSketch = startSketchOn(XY)
|> startProfileAt([-5, 0], %)
|> line(endAbsolute = [0, 5])
|> xLine(length = 5)
|> tangentialArcTo([10, 0], %)
|> tangentialArc(endAbsolute = [10, 0])
`
const viewPortSize = { width: 1000, height: 500 }
await page.setBodyDimensions(viewPortSize)
@ -634,8 +634,8 @@ openSketch = startSketchOn(XY)
// Wait for enter sketch mode to complete
await page.waitForTimeout(500)
await editor.expectState({
activeLines: [`|>tangentialArcTo([10,0],%)`],
highlightedCode: 'tangentialArcTo([10,0],%)',
activeLines: [`|>tangentialArc(endAbsolute=[10,0])`],
highlightedCode: 'tangentialArc(endAbsolute=[10,0])',
diagnostics: [],
})
})
@ -1624,7 +1624,7 @@ profile001 = circle(sketch001, center = [0, 0], radius = 500)
sketch002 = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> xLine(length = -500)
|> tangentialArcTo([-2000, 500], %)`,
|> tangentialArc(endAbsolute = [-2000, 500])`,
},
{
targetType: 'rectangle',
@ -1640,7 +1640,7 @@ profile001 = startProfileAt([-400, -400], sketch001)
sketch002 = startSketchOn(XZ)
|> startProfileAt([0, 0], %)
|> xLine(length = -500)
|> tangentialArcTo([-2000, 500], %)`,
|> tangentialArc(endAbsolute = [-2000, 500])`,
},
]
sweepCases.map(({ initialCode, targetType, testPoint }) => {

View File

@ -63,7 +63,7 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
part002 = startSketchOn(-XZ)
${startProfileAt3}
|> xLine(length = width / 4)
|> tangentialArcTo([width / 2, 0], %)
|> tangentialArc(endAbsolute = [width / 2, 0])
|> xLine(length = -width / 4 + wireRadius)
|> yLine(length = wireOffset)
|> arc({
@ -119,7 +119,7 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => {
sketch001 = startSketchOn(XZ)
|> startProfileAt([2.61, -4.01], %)
|> xLine(length = 8.73)
|> tangentialArcTo([8.33, -1.31], %)`
|> tangentialArc(endAbsolute = [8.33, -1.31])`
)
})
@ -130,7 +130,7 @@ sketch001 = startSketchOn(XZ)
await expect(async () => {
await page.mouse.click(700, 200)
await page.getByText('tangentialArcTo([8.33, -1.31], %)').click()
await page.getByText('tangentialArc(endAbsolute = [8.33, -1.31])').click()
await expect(
page.getByRole('button', { name: 'Edit Sketch' })
).toBeEnabled({ timeout: 2000 })
@ -139,7 +139,7 @@ sketch001 = startSketchOn(XZ)
await page.waitForTimeout(600) // wait for animation
await page.getByText('tangentialArcTo([8.33, -1.31], %)').click()
await page.getByText('tangentialArc(endAbsolute = [8.33, -1.31])').click()
await page.keyboard.press('End')
await page.keyboard.down('Shift')
await page.keyboard.press('ArrowUp')
@ -212,7 +212,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -14.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -5.38], %)
|> tangentialArc(endAbsolute = [24.95, -5.38])
|> arcTo({
interior = [20.18, -1.7],
end = [11.82, -1.16]
@ -262,7 +262,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
await expect(u.codeLocator).toHaveText(`sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -14.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -5.38], %)
|> tangentialArc(endAbsolute = [24.95, -5.38])
|> arcTo({
interior = [20.18, -1.7],
end = [11.82, -1.16]
@ -326,7 +326,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
prevContent = await page.locator('.cm-content').innerText()
}
// drag tangentialArcTo handle
// drag tangentialArc handle
const tangentEnd = await u.getBoundingBox('[data-overlay-index="1"]')
await page.mouse.move(tangentEnd.x, tangentEnd.y - 5)
await page.mouse.down()
@ -407,7 +407,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002)
.toHaveText(`sketch001 = startSketchOn(XZ)
|> startProfileAt([6.44, -12.07], %)
|> line(end = [14.72, 1.97])
|> tangentialArcTo([26.92, -3.32], %)
|> tangentialArc(endAbsolute = [26.92, -3.32])
|> arcTo({
interior = [18.11, -3.73],
end = [9.77, -3.19]
@ -577,7 +577,7 @@ sketch001 = startSketchOn(XZ)
sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -10.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -0.38], %)
|> tangentialArc(endAbsolute = [24.95, -0.38])
|> close()
|> extrude(length = 5)`
)
@ -646,7 +646,7 @@ sketch001 = startSketchOn(XZ)
await expect(page.locator('.cm-content')).not.toHaveText(prevContent)
prevContent = await page.locator('.cm-content').innerText()
// drag tangentialArcTo handle
// drag tangentialArc handle
const tangentEnd = await u.getBoundingBox('[data-overlay-index="1"]')
await page.dragAndDrop('#stream', '#stream', {
sourcePosition: { x: tangentEnd.x + 10, y: tangentEnd.y - 5 },
@ -663,7 +663,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([7.12, -12.68], %)
|> line(end = [12.68, -1.09])
|> tangentialArcTo([24.89, 0.68], %)
|> tangentialArc(endAbsolute = [24.89, 0.68])
|> close()
|> extrude(length = 5)`,
{ shouldNormalise: true }
@ -685,7 +685,7 @@ sketch001 = startSketchOn(XZ)
sketch001 = startSketchOn(XZ)
|> startProfileAt([4.61, -14.01], %)
|> line(end = [12.73, -0.09])
|> tangentialArcTo([24.95, -5.38], %)
|> tangentialArc(endAbsolute = [24.95, -5.38])
|> close()
|> revolve(axis = X)`
)
@ -757,7 +757,7 @@ sketch001 = startSketchOn(XZ)
await expect(page.locator('.cm-content')).not.toHaveText(prevContent)
prevContent = await page.locator('.cm-content').innerText()
// drag tangentialArcTo handle
// drag tangentialArc handle
const tangentEnd = await u.getBoundingBox('[data-overlay-index="1"]')
await page.mouse.move(tangentEnd.x, tangentEnd.y - 5)
await page.mouse.down()
@ -771,7 +771,7 @@ sketch001 = startSketchOn(XZ)
`sketch001 = startSketchOn(XZ)
|> startProfileAt([6.44, -12.07], %)
|> line(end = [14.72, 1.97])
|> tangentialArcTo([24.95, -5.38], %)
|> tangentialArc(endAbsolute = [24.95, -5.38])
|> line(end = [1.97, 2.06])
|> close()
|> revolve(axis = X)`,
@ -1653,7 +1653,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
await page.waitForTimeout(600)
})
const codeFromTangentialArc = ` |> tangentialArcTo([39.49, 88.22], %)`
const codeFromTangentialArc = ` |> tangentialArc(endAbsolute = [39.49, 88.22])`
await test.step('check that tangential tool does not snap to other profile starts', async () => {
await toolbar.tangentialArcBtn.click()
await page.waitForTimeout(1000)
@ -1675,7 +1675,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
// check pixel is now gray at tanArcLocation to verify code has executed
await scene.expectPixelColor([26, 26, 26], tanArcLocation, 15)
await editor.expectEditor.not.toContain(
`tangentialArcTo([39.49, 88.22], %)`
`tangentialArc(endAbsolute = [39.49, 88.22])`
)
})
@ -1876,7 +1876,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001)
await endArcStartLine()
await editor.expectEditor.toContain(
`|> tangentialArcTo([16.61, 4.14], %)`
`|> tangentialArc(endAbsolute = [16.61, 4.14])`
)
// Add a three-point arc segment
@ -2416,7 +2416,7 @@ sketch001 = startSketchOn(XZ)
profile001 = startProfileAt([-63.43, 193.08], sketch001)
|> line(end = [168.52, 149.87])
|> line(end = [190.29, -39.18])
|> tangentialArcTo([319.63, 129.65], %)
|> tangentialArc(endAbsolute = [319.63, 129.65])
|> line(end = [-217.65, -21.76])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()

View File

@ -684,7 +684,7 @@ test.describe(
await page.mouse.click(startXPx + PUR * 30, 500 - PUR * 20)
code += `
|> tangentialArcTo([551.2, -62.01], %)`
|> tangentialArc(endAbsolute = [551.2, -62.01])`
await expect(u.codeLocator).toHaveText(code)
// click tangential arc tool again to unequip it
@ -778,7 +778,7 @@ test.describe(
await page.mouse.click(startXPx + PUR * 30, 500 - PUR * 20)
code += `
|> tangentialArcTo([551.2, -62.01], %)`
|> tangentialArc(endAbsolute = [551.2, -62.01])`
await expect(u.codeLocator).toHaveText(code)
await page

View File

@ -98,7 +98,7 @@ part001 = startSketchOn(XZ)
intersectTag: a,
offset: 0
}, %)
|> tangentialArcTo([13.14 + 0, 13.14], %)
|> tangentialArc(endAbsolute = [13.14 + 0, 13.14])
|> close()
|> extrude(length = 5 + 7)
`

View File

@ -1140,7 +1140,7 @@ export function tomlToPerProjectSettings(
return TOML.parse(toml)
}
export function perProjectsettingsToToml(
export function perProjectSettingsToToml(
settings: DeepPartial<ProjectConfiguration>
) {
// eslint-disable-next-line no-restricted-syntax

View File

@ -229,7 +229,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([5 + 3.14 + 13, 20 + 3.14], %)
|> tangentialArc(endAbsolute = [5 + 3.14 + 13, 20 + 3.14])
`
)
})
@ -477,7 +477,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, 3.14], %)
|> tangentialArc(endAbsolute = [3.14 + 13, 3.14])
`
)
localStorage.setItem('disableAxis', 'true')
@ -602,7 +602,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, 1.14], %)
|> tangentialArc(endAbsolute = [3.14 + 13, 1.14])
`
)
localStorage.setItem('disableAxis', 'true')
@ -735,11 +735,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
locator: '[data-overlay-toolbar-index="11"]',
})
})
test('for segment [tangentialArcTo]', async ({
page,
editor,
homePage,
}) => {
test('for segment [tangentialArc]', async ({ page, editor, homePage }) => {
await page.addInitScript(async () => {
localStorage.setItem(
'persistCode',
@ -762,7 +758,7 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, -3.14], %)
|> tangentialArc(endAbsolute = [3.14 + 13, -3.14])
`
)
localStorage.setItem('disableAxis', 'true')
@ -787,28 +783,29 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => {
const clickUnconstrained = _clickUnconstrained(page, editor)
const clickConstrained = _clickConstrained(page, editor)
const tangentialArcTo = await u.getBoundingBox(
'[data-overlay-index="12"]'
)
const tangentialArc = await u.getBoundingBox('[data-overlay-index="12"]')
let ang = await u.getAngle('[data-overlay-index="12"]')
console.log('tangentialArcTo')
console.log('tangentialArc')
await clickConstrained({
hoverPos: { x: tangentialArcTo.x, y: tangentialArcTo.y },
hoverPos: { x: tangentialArc.x, y: tangentialArc.y },
constraintType: 'xAbsolute',
expectBeforeUnconstrained: 'tangentialArcTo([3.14 + 13, -3.14], %)',
expectAfterUnconstrained: 'tangentialArcTo([16.14, -3.14], %)',
expectFinal: 'tangentialArcTo([xAbs001, -3.14], %)',
expectBeforeUnconstrained:
'tangentialArc(endAbsolute = [3.14 + 13, -3.14])',
expectAfterUnconstrained: 'tangentialArc(endAbsolute = [16.14, -3.14])',
expectFinal: 'tangentialArc(endAbsolute = [xAbs001, -3.14])',
ang: ang + 180,
steps: 6,
locator: '[data-overlay-toolbar-index="12"]',
})
console.log('tangentialArcTo2')
console.log('tangentialArc2')
await clickUnconstrained({
hoverPos: { x: tangentialArcTo.x, y: tangentialArcTo.y },
hoverPos: { x: tangentialArc.x, y: tangentialArc.y },
constraintType: 'yAbsolute',
expectBeforeUnconstrained: 'tangentialArcTo([xAbs001, -3.14], %)',
expectAfterUnconstrained: 'tangentialArcTo([xAbs001, yAbs001], %)',
expectFinal: 'tangentialArcTo([xAbs001, -3.14], %)',
expectBeforeUnconstrained:
'tangentialArc(endAbsolute = [xAbs001, -3.14])',
expectAfterUnconstrained:
'tangentialArc(endAbsolute = [xAbs001, yAbs001])',
expectFinal: 'tangentialArc(endAbsolute = [xAbs001, -3.14])',
ang: ang + 180,
steps: 10,
locator: '[data-overlay-toolbar-index="12"]',
@ -1091,7 +1088,7 @@ part001 = startSketchOn(XZ)
intersectTag = a,
offset = 9
}, %)
|> tangentialArcTo([3.14 + 13, 1.14], %)
|> tangentialArc(endAbsolute = [3.14 + 13, 1.14])
|> arcTo({
interior = [16.25, 5.12],
end = [21.61, 4.15]
@ -1161,8 +1158,8 @@ part001 = startSketchOn(XZ)
ang = await u.getAngle('[data-overlay-index="12"]')
await deleteSegmentSequence({
hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y },
codeToBeDeleted: 'tangentialArcTo([3.14 + 13, 1.14], %)',
stdLibFnName: 'tangentialArcTo',
codeToBeDeleted: 'tangentialArc(endAbsolute = [3.14 + 13, 1.14])',
stdLibFnName: 'tangentialArc',
ang: ang + 180,
steps: 6,
locator: '[data-overlay-toolbar-index="12"]',

View File

@ -535,7 +535,7 @@ part001 = startSketchOn(XZ)
intersectTag = a,
offset = 0
}, %)
|> tangentialArcTo([13.14 + 0, 13.14], %)
|> tangentialArc(endAbsolute = [13.14 + 0, 13.14])
|> close()
|> extrude(length = 5 + 7)
`
@ -574,7 +574,7 @@ part001 = startSketchOn(XZ)
const extrusionTopCap: Coords2d = [800, 240]
const flatExtrusionFace: Coords2d = [960, 160]
const tangentialArcTo: Coords2d = [840, 160]
const tangentialArc: Coords2d = [840, 160]
const close: Coords2d = [720, 200]
const nothing: Coords2d = [600, 200]
const closeEdge: Coords2d = [744, 233]
@ -671,28 +671,28 @@ part001 = startSketchOn(XZ)
)
await checkCodeAtHoverPosition(
'tangentialArcTo',
tangentialArcTo,
'tangentialArcTo([13.14+0,13.14],%)extrude(length=5+7)',
'tangentialArcTo([13.14 + 0, 13.14], %)'
'tangentialArc',
tangentialArc,
'tangentialArc(endAbsolute=[13.14+0,13.14])extrude(length=5+7)',
'tangentialArc(endAbsolute = [13.14 + 0, 13.14])'
)
await checkCodeAtHoverPosition(
'tangentialArcEdge',
tangentialArcEdge,
`tangentialArcTo([13.14+0,13.14],%)`,
'tangentialArcTo([13.14 + 0, 13.14], %)'
`tangentialArc(endAbsolute=[13.14+0,13.14])`,
'tangentialArc(endAbsolute = [13.14 + 0, 13.14])'
)
await checkCodeAtHoverPosition(
'tangentialArcOppositeEdge',
tangentialArcOppositeEdge,
`tangentialArcTo([13.14+0,13.14],%)`,
'tangentialArcTo([13.14 + 0, 13.14], %)'
`tangentialArc(endAbsolute=[13.14+0,13.14])`,
'tangentialArc(endAbsolute = [13.14 + 0, 13.14])'
)
await checkCodeAtHoverPosition(
'tangentialArcAdjacentEdge',
tangentialArcAdjacentEdge,
`tangentialArcTo([13.14+0,13.14],%)`,
'tangentialArcTo([13.14 + 0, 13.14], %)'
`tangentialArc(endAbsolute=[13.14+0,13.14])`,
'tangentialArc(endAbsolute = [13.14 + 0, 13.14])'
)
await checkCodeAtHoverPosition(
@ -940,7 +940,7 @@ part001 = startSketchOn(XZ)
},
{
pos: [1107, 161],
expectedCode: 'tangentialArcTo([167.95, -28.85], %)',
expectedCode: 'tangentialArc(endAbsolute = [167.95, -28.85])',
},
] as const
await page.addInitScript(

View File

@ -234,7 +234,7 @@
"ts-node": "^10.0.0",
"typescript": "^5.8.3",
"typescript-eslint": "^8.29.0",
"vite": "^5.4.17",
"vite": "^5.4.18",
"vite-plugin-package-version": "^1.1.0",
"vite-plugin-top-level-await": "^1.5.0",
"vite-tsconfig-paths": "^4.3.2",

View File

@ -834,9 +834,9 @@ vite-tsconfig-paths@^5.1.4:
tsconfck "^3.0.3"
"vite@^5.0.0 || ^6.0.0":
version "6.2.5"
resolved "https://registry.yarnpkg.com/vite/-/vite-6.2.5.tgz#d093b5fe8eb96e594761584a966ab13f24457820"
integrity sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==
version "6.2.6"
resolved "https://registry.yarnpkg.com/vite/-/vite-6.2.6.tgz#7f0ccf2fdc0c1eda079ce258508728e2473d3f61"
integrity sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==
dependencies:
esbuild "^0.25.0"
postcss "^8.5.3"

View File

@ -45,6 +45,7 @@ export default defineConfig({
[process.env.CI ? 'dot' : 'list'],
['json', { outputFile: './test-results/report.json' }],
['html'],
['./e2e/playwright/lib/api-reporter.ts'],
],
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {

View File

@ -45,6 +45,7 @@ export default defineConfig({
['dot'],
['json', { outputFile: './test-results/report.json' }],
['html'],
['./e2e/playwright/lib/api-reporter.ts'],
],
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
use: {

View File

@ -10,25 +10,25 @@ fn dividerSketch(plane) {
sketch000 = startSketchOn(plane)
|> startProfileAt([-16.82, 21.2], %)
|> line(end = [-0.13, -1.27])
|> tangentialArcTo([-15.94, profileStartY(%) - 7.73], %)
|> tangentialArcTo([-16.6, profileStartY(%) - 15.52], %)
|> tangentialArcTo([-18.38, profileStartY(%) - 18.63], %)
|> tangentialArc(endAbsolute = [-15.94, profileStartY(%) - 7.73])
|> tangentialArc(endAbsolute = [-16.6, profileStartY(%) - 15.52])
|> tangentialArc(endAbsolute = [-18.38, profileStartY(%) - 18.63])
|> line(end = [-1.25, -2.6])
|> xLine(length = 6.04)
|> line(end = [6.68, 7.87])
|> tangentialArcTo([10.06, profileStartY(%) - 12.69], %)
|> tangentialArc(endAbsolute = [10.06, profileStartY(%) - 12.69])
|> line(end = [7.28, -8.47])
|> xLine(length = 5.98)
|> line(end = [-1.3, 3.01])
|> tangentialArcTo([22.45, profileStartY(%) - 2.84], %)
|> tangentialArcTo([25.08, profileStartY(%) + 6.42], %)
|> tangentialArc(endAbsolute = [22.45, profileStartY(%) - 2.84])
|> tangentialArc(endAbsolute = [25.08, profileStartY(%) + 6.42])
|> line(end = [2.35, 16.36])
|> line(end = [1.78, 1.15])
|> tangentialArcTo([23.93, profileStartY(%) + 27.29], %)
|> tangentialArc(endAbsolute = [23.93, profileStartY(%) + 27.29])
|> line(end = [-1.92, 0.21])
|> line(end = [-3.74, -26.54])
|> tangentialArcTo([15.13, profileStartY(%) - 1.72], %)
|> tangentialArcTo(profileStart(%), %)
|> tangentialArc(endAbsolute = [15.13, profileStartY(%) - 1.72])
|> tangentialArc(endAbsolute = profileStart(%))
|> close()
return sketch000
}

View File

@ -17,66 +17,42 @@ brakeCaliperSketch = startSketchOn(XY)
0,
rotorTotalThickness + caliperTolerance - caliperInnerEdgeRadius
])
|> tangentialArc({
offset = 90,
radius = caliperInnerEdgeRadius
}, %)
|> tangentialArc(angle = 90, radius = caliperInnerEdgeRadius)
|> line(end = [
-caliperPadLength + 2 * caliperInnerEdgeRadius,
0
])
|> tangentialArc({
offset = -90,
radius = caliperInnerEdgeRadius
}, %)
|> tangentialArc(angle = -90, radius = caliperInnerEdgeRadius)
|> line(end = [
0,
caliperThickness - (caliperInnerEdgeRadius * 2)
])
|> tangentialArc({
offset = -90,
radius = caliperInnerEdgeRadius
}, %)
|> tangentialArc(angle = -90, radius = caliperInnerEdgeRadius)
|> line(end = [
caliperPadLength + caliperThickness - caliperOuterEdgeRadius - caliperInnerEdgeRadius,
0
])
|> tangentialArc({
offset = -90,
radius = caliperOuterEdgeRadius
}, %)
|> tangentialArc(angle = -90, radius = caliperOuterEdgeRadius)
|> line(end = [
0,
-2 * caliperTolerance - (2 * caliperThickness) - rotorTotalThickness + 2 * caliperOuterEdgeRadius
])
|> tangentialArc({
offset = -90,
radius = caliperOuterEdgeRadius
}, %)
|> tangentialArc(angle = -90, radius = caliperOuterEdgeRadius)
|> line(end = [
-caliperPadLength - caliperThickness + caliperOuterEdgeRadius + caliperInnerEdgeRadius,
0
])
|> tangentialArc({
offset = -90,
radius = caliperInnerEdgeRadius
}, %)
|> tangentialArc(angle = -90, radius = caliperInnerEdgeRadius)
|> line(end = [
0,
caliperThickness - (2 * caliperInnerEdgeRadius)
])
|> tangentialArc({
offset = -90,
radius = caliperInnerEdgeRadius
}, %)
|> tangentialArc(angle = -90, radius = caliperInnerEdgeRadius)
|> line(end = [
caliperPadLength - (2 * caliperInnerEdgeRadius),
0
])
|> tangentialArc({
offset = 90,
radius = caliperInnerEdgeRadius
}, %)
|> tangentialArc(angle = 90, radius = caliperInnerEdgeRadius)
|> close()
// Revolve the brake caliper sketch

View File

@ -17,7 +17,7 @@ tireSketch = startSketchOn(XY)
],
tag = $edge1,
)
|> tangentialArc({ offset = -90, radius = bendRadius }, %)
|> tangentialArc(angle = -90, radius = bendRadius)
|> line(endAbsolute = [
tireOuterDiameter / 2,
tireDepth / 2 - tireTreadOffset
@ -36,7 +36,7 @@ tireSketch = startSketchOn(XY)
tireOuterDiameter / 2,
-tireDepth / 2 + bendRadius
])
|> tangentialArc({ offset = -90, radius = bendRadius }, %)
|> tangentialArc(angle = -90, radius = bendRadius)
|> line(endAbsolute = [tireInnerDiameter / 2, -tireDepth / 2], tag = $edge2)
|> close()

View File

@ -26,7 +26,7 @@ fn lug(plane, length, diameter) {
|> angledLine(angle = 70, lengthY = lugHeadLength)
|> xLine(endAbsolute = lugDiameter / 2)
|> yLine(endAbsolute = lugLength)
|> tangentialArc({ offset = 90, radius = fromMm(3) }, %)
|> tangentialArc(angle = 90, radius = fromMm(3))
|> xLine(endAbsolute = 0 + .001, tag = $c1)
|> yLine(endAbsolute = lugThreadDepth)
|> xLine(endAbsolute = lugThreadDiameter)

View File

@ -19,17 +19,11 @@ fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle) {
angleEnd = -90 + helixAngleP,
radius = gearPitch
}, %)
|> tangentialArc({
radius = gearPitch * 1.67,
offset = 60
}, %)
|> tangentialArc({ radius = gearPitch, offset = -180 }, %)
|> tangentialArc({
radius = gearPitch * 1.67,
offset = 60
}, %)
|> tangentialArc({ radius = gearPitch, offset = -180 }, %)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60)
|> tangentialArc(radius = gearPitch, angle = -180)
|> tangentialArc(radius = gearPitch * 1.67, angle = 60)
|> tangentialArc(radius = gearPitch, angle = -180)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close(%)
|> hole(circle(center = [0, 0], radius = holeDiameter / 2), %)
return gearProfile

View File

@ -184,15 +184,15 @@ handlePlane = startSketchOn(offsetPlane(XY, offset = handleHeightAboveTheFloor))
handleProfilePath = startProfileAt([0 + handleOffset, 0], handlePlane)
|> yLine(length = -handleLengthSegmentA)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
handleFillet + handleOffset,
-handleDepth
], %)
])
|> xLine(length = handleLengthSegmentB)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
handleOffset + handleWidth,
-handleLengthSegmentA
], %)
])
|> yLine(length = handleLengthSegmentA)
handleSectionPlane = startSketchOn(XZ)
handleProfileSection = circle(

View File

@ -33,9 +33,9 @@ fn primaryTube(n, angle001, length001, length002, length003) {
sweepPath = startSketchOn(sweepPlane)
|> startProfileAt([0, plateHeight], %)
|> line(end = [0, length001])
|> tangentialArc({ offset = -80, radius = bendRadius }, %, $arc01)
|> tangentialArc(angle = -80, radius = bendRadius, tag = $arc01)
|> angledLine(angle = tangentToEnd(arc01), length = length002)
|> tangentialArc({ offset = 85, radius = bendRadius }, %, $arc02)
|> tangentialArc(angle = 85, radius = bendRadius, tag = $arc02)
|> angledLine(angle = tangentToEnd(arc02), length = length003)
// Create the cross section of each tube and sweep them
@ -57,21 +57,21 @@ primaryTube(3, 25.2, 5, 5, 3)
flangeSketch = startSketchOn(XY)
|> startProfileAt([3 + 1.3, -1.25], %)
|> xLine(length = -2.6, tag = $seg01)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> tangentialArc({ radius = .9, offset = 80 }, %)
|> tangentialArc({ radius = .3, offset = -40 }, %)
|> tangentialArc(radius = .3, angle = -40)
|> tangentialArc(radius = .9, angle = 80)
|> tangentialArc(radius = .3, angle = -40)
|> 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 }, %)
|> tangentialArc(radius = .3, angle = -40)
|> tangentialArc(radius = 1.5, angle = 80)
|> tangentialArc(radius = .3, angle = -40)
|> 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(%)], %)
|> tangentialArc(radius = .3, angle = -40)
|> tangentialArc(radius = .9, angle = 80)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
// Create openings in the flange to accommodate each tube

View File

@ -36,9 +36,9 @@ fn slot(sketch1, start, end, width) {
ystart = width / 2 * sin(toRadians(angle - 90)) + start[1]
slotSketch = startProfileAt([xstart, ystart], sketch1)
|> angledLine(angle = angle, length = dist)
|> tangentialArc({ radius = width / 2, offset = 180 }, %)
|> tangentialArc(radius = width / 2, angle = 180)
|> angledLine(angle = angle, length = -dist)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
return slotSketch
}

View File

@ -127,7 +127,7 @@ sketch006 = startSketchOn(XZ)
|> yLine(length = 10)
|> line(end = [0.6, 0])
|> yLine(length = -.05)
|> tangentialArc({ radius = 0.6, offset = -90 }, %)
|> tangentialArc(radius = 0.6, angle = -90)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> revolve(axis = Y)
@ -192,15 +192,15 @@ sketch011 = startSketchOn(XZ)
sketch012 = startSketchOn(offsetPlane(XZ, offset = handleThickness / 2))
|> startProfileAt([2.3, 6.4], %)
|> line(end = [0.56, 0])
|> tangentialArcTo([4.1, 5.26], %)
|> tangentialArcTo([4.17, 1.6], %)
|> tangentialArcTo([3.13, 0.61], %)
|> tangentialArc(endAbsolute = [4.1, 5.26])
|> tangentialArc(endAbsolute = [4.17, 1.6])
|> tangentialArc(endAbsolute = [3.13, 0.61])
|> line(end = [-1.09, 0])
|> line(end = [0, 0.43])
|> line(end = [0.99, -0.02])
|> tangentialArcTo([3.63, 1.6], %)
|> tangentialArcTo([3.56, 5.15], %)
|> tangentialArcTo([2.72, 5.88], %)
|> tangentialArc(endAbsolute = [3.63, 1.6])
|> tangentialArc(endAbsolute = [3.56, 5.15])
|> tangentialArc(endAbsolute = [2.72, 5.88])
|> line(end = [-0.4, 0])
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()

View File

@ -24,13 +24,13 @@ rackBody = startSketchOn(XY)
fn tooth() {
toothSketch = startSketchOn(XY)
|> startProfileAt([-length / 2 + 0.567672, minHeight], %)
|> tangentialArcToRelative([0.157636, 0.110378], %)
|> tangentialArc(end = [0.157636, 0.110378])
|> line(end = [0.329118, 0.904244])
|> tangentialArcToRelative([0.157636, 0.110378], %)
|> tangentialArc(end = [0.157636, 0.110378])
|> line(end = [0.186505, 0])
|> tangentialArcToRelative([0.157636, -0.110378], %)
|> tangentialArc(end = [0.157636, -0.110378])
|> line(end = [0.329118, -0.904244])
|> tangentialArcToRelative([0.157636, -0.110378], %)
|> tangentialArc(end = [0.157636, -0.110378])
|> close()
|> extrude(length = width)
return toothSketch
@ -44,7 +44,7 @@ teeth = tooth()
endCapTooth = startSketchOn(XY)
|> startProfileAt([-length / 2, 11.849525], %)
|> line(end = [0.314524, -0.864147])
|> tangentialArcToRelative([0.157636, -0.110378], %)
|> tangentialArc(end = [0.157636, -0.110378])
|> line(endAbsolute = [-length / 2, minHeight])
|> close()
|> extrude(length = width)
@ -53,7 +53,7 @@ endCapTooth = startSketchOn(XY)
endCapTooth2 = startSketchOn(XY)
|> startProfileAt([length / 2, 11.849525], %)
|> line(end = [-0.314524, -0.864147])
|> tangentialArcToRelative([-0.157636, -0.110378], %)
|> tangentialArc(end = [-0.157636, -0.110378])
|> line(endAbsolute = [length / 2, minHeight])
|> close()
|> extrude(length = width)

View File

@ -18,7 +18,7 @@ iBeam = startSketchOn(-XZ)
|> xLine(length = flangeWidth / 2)
|> yLine(length = -flangeThickness)
|> xLine(endAbsolute = webThickness / 2 + rootRadius)
|> tangentialArc({ radius = rootRadius, offset = 90 }, %)
|> tangentialArc(radius = rootRadius, angle = 90)
|> yLine(endAbsolute = 0)
|> mirror2d(axis = X)
|> mirror2d(axis = Y)

View File

@ -74,11 +74,11 @@ fn keyFn(originStart, keyWidth, keyHeight, repeats, color) {
radius = 0.1
}, %)
|> angledLine(angle = 0, length = keyWidth - .2, tag = $rectangleSegmentA001)
|> tangentialArc({ radius = 0.1, offset = 90 }, %)
|> tangentialArc(radius = 0.1, angle = 90)
|> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = keyHeight - .2, tag = $rectangleSegmentB001)
|> tangentialArc({ radius = 0.1, offset = 90 }, %)
|> tangentialArc(radius = 0.1, angle = 90)
|> angledLine(angle = segAng(rectangleSegmentA001), length = -segLen(rectangleSegmentA001), tag = $rectangleSegmentC001)
|> tangentialArc({ radius = 0.1, offset = 90 }, %)
|> tangentialArc(radius = 0.1, angle = 90)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $rectangleSegmentD001)
|> close()
|> extrude(length = keyDepth)

View File

@ -69,7 +69,7 @@ customPlane = {
}
sketch003 = startSketchOn(customPlane)
|> startProfileAt([0, 0], %)
|> tangentialArc({ offset = 60, radius = height }, %)
|> tangentialArc(angle = 60, radius = height)
|> angledLine(angle = 60, endAbsoluteY = 0)
|> close()
|> extrude(length = wallThickness)
@ -85,11 +85,11 @@ sketch004 = startSketchOn(sketch002, 'END')
|> angledLine(angle = 60, endAbsoluteY = segEndY(seg01))
|> yLine(endAbsolute = height)
|> xLine(length = wallThickness)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
(frontLength - wallsWidth) / 2 + wallsWidth,
height - ((height - exitHeight) / 2)
], %)
|> tangentialArcTo([frontLength, exitHeight], %)
])
|> tangentialArc(endAbsolute = [frontLength, exitHeight])
|> yLine(endAbsolute = 0)
|> close(tag = $seg04)
|> extrude(length = wallThickness)
@ -110,11 +110,11 @@ sketch005 = startSketchOn(customPlane2)
|> startProfileAt([0, 0], %)
|> yLine(endAbsolute = height)
|> xLine(endAbsolute = wallsWidth)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
(frontLength - wallsWidth) / 2 + wallsWidth,
height - ((height - exitHeight) / 2)
], %)
|> tangentialArcTo([frontLength, exitHeight], %)
])
|> tangentialArc(endAbsolute = [frontLength, exitHeight])
|> yLine(endAbsolute = 0, tag = $seg03)
|> close()
|> extrude(length = wallThickness)

View File

@ -37,49 +37,25 @@ bracketProfile = startSketchOn(XZ)
0
], %)
|> xLine(length = flangeLength)
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> tangentialArc(radius = exteriorBendRadius, angle = bendAngle)
|> angledLine(angle = bendAngle, endAbsoluteY = hatHeight - thickness, tag = $seg01)
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> tangentialArc(radius = interiorBendRadius, angle = -bendAngle)
|> xLine(endAbsolute = 0, tag = $seg02)
|> xLine(length = segLen(seg02))
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> tangentialArc(radius = interiorBendRadius, angle = -bendAngle)
|> angledLine(angle = -bendAngle, length = segLen(seg01))
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> tangentialArc(radius = exteriorBendRadius, angle = bendAngle)
|> xLine(length = flangeLength)
|> yLine(length = thickness, tag = $seg03)
|> xLine(length = -flangeLength, tag = $seg04)
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> tangentialArc(radius = interiorBendRadius, angle = -bendAngle)
|> angledLine(angle = 180 - bendAngle, length = segLen(seg01))
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> tangentialArc(radius = exteriorBendRadius, angle = bendAngle)
|> xLine(endAbsolute = 0, tag = $seg05)
|> xLine(length = -segLen(seg05))
|> tangentialArc({
radius = exteriorBendRadius,
offset = bendAngle
}, %)
|> tangentialArc(radius = exteriorBendRadius, angle = bendAngle)
|> angledLine(angle = bendAngle - 180, length = segLen(seg01))
|> tangentialArc({
radius = interiorBendRadius,
offset = -bendAngle
}, %)
|> tangentialArc(radius = interiorBendRadius, angle = -bendAngle)
|> xLine(length = -flangeLength, tag = $seg06)
|> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg07)
|> close()

24
rust/Cargo.lock generated
View File

@ -2762,9 +2762,9 @@ dependencies = [
[[package]]
name = "pyo3"
version = "0.24.0"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f1c6c3591120564d64db2261bec5f910ae454f01def849b9c22835a84695e86"
checksum = "17da310086b068fbdcefbba30aeb3721d5bb9af8db4987d6735b2183ca567229"
dependencies = [
"cfg-if",
"indoc",
@ -2781,9 +2781,9 @@ dependencies = [
[[package]]
name = "pyo3-build-config"
version = "0.24.0"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9b6c2b34cf71427ea37c7001aefbaeb85886a074795e35f161f5aecc7620a7a"
checksum = "e27165889bd793000a098bb966adc4300c312497ea25cf7a690a9f0ac5aa5fc1"
dependencies = [
"once_cell",
"target-lexicon",
@ -2791,9 +2791,9 @@ dependencies = [
[[package]]
name = "pyo3-ffi"
version = "0.24.0"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5507651906a46432cdda02cd02dd0319f6064f1374c9147c45b978621d2c3a9c"
checksum = "05280526e1dbf6b420062f3ef228b78c0c54ba94e157f5cb724a609d0f2faabc"
dependencies = [
"libc",
"pyo3-build-config",
@ -2801,9 +2801,9 @@ dependencies = [
[[package]]
name = "pyo3-macros"
version = "0.24.0"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0d394b5b4fd8d97d48336bb0dd2aebabad39f1d294edd6bcd2cccf2eefe6f42"
checksum = "5c3ce5686aa4d3f63359a5100c62a127c9f15e8398e5fdeb5deef1fed5cd5f44"
dependencies = [
"proc-macro2",
"pyo3-macros-backend",
@ -2813,9 +2813,9 @@ dependencies = [
[[package]]
name = "pyo3-macros-backend"
version = "0.24.0"
version = "0.24.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd72da09cfa943b1080f621f024d2ef7e2773df7badd51aa30a2be1f8caa7c8e"
checksum = "f4cf6faa0cbfb0ed08e89beb8103ae9724eb4750e3a78084ba4017cbe94f3855"
dependencies = [
"heck",
"proc-macro2",
@ -3956,9 +3956,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
version = "1.44.1"
version = "1.44.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
dependencies = [
"backtrace",
"bytes",

View File

@ -39,7 +39,7 @@ kittycad = { version = "0.3.36", default-features = false, features = ["js", "re
kittycad-modeling-cmds = { version = "0.2.113", features = ["ts-rs", "websocket"] }
lazy_static = "1.5.0"
miette = "7.5.0"
pyo3 = { version = "0.24.0" }
pyo3 = { version = "0.24.1" }
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1" }
slog = "2.7.0"

View File

@ -32,7 +32,7 @@ tracing-subscriber = { workspace = true }
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
signal-hook = "0.3.17"
tokio = { version = "1.43.0", features = ["full"] }
tokio = { version = "1.44.2", features = ["full"] }
tower-lsp = { version = "0.20.0", features = ["proposed"] }
[target.'cfg(target_arch = "wasm32")'.dependencies]

View File

@ -126,7 +126,7 @@ insta = { version = "1.41.1", features = ["json", "filters", "redactions"] }
kcl-directory-test-macro = { version = "0.1", path = "../kcl-directory-test-macro" }
miette = { version = "7.5.0", features = ["fancy"] }
pretty_assertions = "1.4.1"
tokio = { version = "1.41.1", features = ["rt-multi-thread", "macros", "time"] }
tokio = { version = "1.44.2", features = ["rt-multi-thread", "macros", "time"] }
twenty-twenty = "0.8.0"
[lints]

View File

@ -10,41 +10,41 @@ let corner_radius = 5.0
let brace_base = startSketchOn(XY)
|> startProfileAt([corner_radius, 0], %)
|> line(end = [width - corner_radius, 0.0])
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 25.0 - corner_radius)
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -(d_wrist_circumference[0] - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> yLine(length = length - 25.0 - 23.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> xLine(length = 15.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 23.0 - corner_radius)
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -(hand_thickness + 15.0 + 15.0 - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(23.0 - corner_radius))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> xLine(length = 15.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> yLine(length = -(length - 25.0 - 23.0 - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> xLine(length = -(d_wrist_circumference[1] + d_wrist_circumference[2] + d_wrist_circumference[3] - hand_thickness - corner_radius))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(25.0 - corner_radius))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> close()
let inner = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> xLine(length = 1.0)
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 25.0 - (corner_radius * 2))
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -1.0)
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(25.0 - (corner_radius * 2)))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> close()
let final = brace_base

View File

@ -11,17 +11,17 @@ const wallMountL = 8
const bracket = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> line(end = [0, wallMountL])
|> tangentialArc({
radius: filletR,
offset: 90
}, %)
|> tangentialArc(
radius = filletR,
angle = 90,
)
|> line(end = [-shelfMountL, 0])
|> line(end = [0, -thickness])
|> line(end = [shelfMountL, 0])
|> tangentialArc({
radius: filletR - thickness,
offset: -90
}, %)
|> tangentialArc(
radius = filletR - thickness,
angle = -90,
)
|> line(end = [0, -wallMountL])
|> close()
|> extrude(length = width)

View File

@ -763,9 +763,9 @@ const sketch010fl = startSketchOn(extrude001fl, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([-0.66 - originStart[0],originStart[2] + .81 + .438 / 2], %)
|> tangentialArc(endAbsolute = [-0.66 - originStart[0],originStart[2] + .81 + .438 / 2])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -781,12 +781,12 @@ const sketch011fl = startSketchOn(extrude001fl, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
-0.66 - originStart[0],originStart[2]+
railHeight * 1.75 / 2 - (.438 / 2)
], %)
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011fl = extrude(sketch011fl, length = -thickness)
@ -798,12 +798,12 @@ const sketch012fl = startSketchOn(extrude001fl, 'START')
railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0], originStart[2]+
railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -1006,12 +1006,12 @@ const sketch010fr = startSketchOn(extrude001fr, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -1027,12 +1027,12 @@ const sketch011fr = startSketchOn(extrude001fr, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011fr = extrude(sketch011fr, length = -thickness)
@ -1044,12 +1044,12 @@ const sketch012fr = startSketchOn(extrude001fr, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -1252,12 +1252,12 @@ const sketch010rr = startSketchOn(extrude001rr, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0]+1.5-serverDepth,
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -1273,12 +1273,12 @@ const sketch011rr = startSketchOn(extrude001rr, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0]+1.5-serverDepth,
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011rr = extrude(sketch011rr, length = -thickness)
@ -1290,12 +1290,12 @@ const sketch012rr = startSketchOn(extrude001rr, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0]+1.5-serverDepth,
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -1497,12 +1497,12 @@ const sketch010rl = startSketchOn(extrude001rl, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] - serverDepth + 1.5,
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -1518,12 +1518,12 @@ const sketch011rl = startSketchOn(extrude001rl, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] - serverDepth + 1.5,
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011rl = extrude(sketch011rl, length = -thickness)
@ -1535,12 +1535,12 @@ const sketch012rl = startSketchOn(extrude001rl, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] - serverDepth + 1.5,
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -1593,15 +1593,15 @@ fn streamServer = (serverPos) => {
|> xLine(length = 0.2)
|> yLine(length = -0.36)
|> xLine(length = 0.5)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
0.3,
17.15 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> yLine(length = -1.77)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.13,
14.89 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> xLine(length = -0.52)
|> yLine(length = -0.42)
|> line(end = [0.34, -0.15])
@ -1617,15 +1617,15 @@ fn streamServer = (serverPos) => {
|> xLine(length = 0.2)
|> yLine(length = -0.36)
|> xLine(length = 0.5)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
0.3,
17.15 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> yLine(length = -1.77)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.13,
14.89 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> xLine(length = -0.52)
|> yLine(length = -0.42)
|> line(end = [0.34, -0.15])

View File

@ -676,12 +676,12 @@ const sketch010fl = startSketchOn(extrude001fl, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -697,12 +697,12 @@ const sketch011fl = startSketchOn(extrude001fl, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011fl = extrude(sketch011fl, length = -thickness)
@ -714,12 +714,12 @@ const sketch012fl = startSketchOn(extrude001fl, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -814,12 +814,12 @@ const sketch010fr = startSketchOn(extrude001fr, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -835,12 +835,12 @@ const sketch011fr = startSketchOn(extrude001fr, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011fr = extrude(sketch011fr, length = -thickness)
@ -852,12 +852,12 @@ const sketch012fr = startSketchOn(extrude001fr, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0],
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -952,12 +952,12 @@ const sketch010rr = startSketchOn(extrude001rr, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] + 1.5 - serverDepth,
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -973,12 +973,12 @@ const sketch011rr = startSketchOn(extrude001rr, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] + 1.5 - serverDepth,
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011rr = extrude(sketch011rr, length = -thickness)
@ -990,12 +990,12 @@ const sketch012rr = startSketchOn(extrude001rr, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] + 1.5 - serverDepth,
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -1089,12 +1089,12 @@ const sketch010rl = startSketchOn(extrude001rl, 'START')
originStart[2] + .81 - (.438 / 2)
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] - serverDepth + 1.5,
originStart[2] + .81 + .438 / 2
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, 1],
@ -1110,12 +1110,12 @@ const sketch011rl = startSketchOn(extrude001rl, 'START')
originStart[2] + railHeight * 1.75 / 2 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] - serverDepth + 1.5,
originStart[2] + railHeight * 1.75 / 2 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
const extrude011rl = extrude(sketch011rl, length = -thickness)
@ -1127,12 +1127,12 @@ const sketch012rl = startSketchOn(extrude001rl, 'START')
originStart[2] + railHeight * 1.75 - .81 + .438 / 2
], %)
|> xLine(length = 0.75 - .438)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.66 - originStart[0] - serverDepth + 1.5,
originStart[2] + railHeight * 1.75 - .81 - (.438 / 2)
], %)
])
|> xLine(length = -0.75 + .438)
|> tangentialArcTo([profileStartX(%), profileStartY(%)], %)
|> tangentialArc(endAbsolute = [profileStartX(%), profileStartY(%)])
|> close()
|> patternLinear2d(
axis = [0, -1],
@ -1184,15 +1184,15 @@ fn streamServer = (serverPos) => {
|> xLine(length = 0.2)
|> yLine(length = -0.36)
|> xLine(length = 0.5)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
0.3,
17.15 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> yLine(length = -1.77)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.13,
14.89 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> xLine(length = -0.52)
|> yLine(length = -0.42)
|> line(end = [0.34, -0.15])
@ -1208,15 +1208,15 @@ fn streamServer = (serverPos) => {
|> xLine(length = 0.2)
|> yLine(length = -0.36)
|> xLine(length = 0.5)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
0.3,
17.15 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> yLine(length = -1.77)
|> tangentialArcTo([
|> tangentialArc(endAbsolute = [
-0.13,
14.89 + 4.114 + 1 + serverPos * 1.75 - 11.114
], %)
])
|> xLine(length = -0.52)
|> yLine(length = -0.42)
|> line(end = [0.34, -0.15])

View File

@ -10,16 +10,17 @@ startSketchOn(XY)
angle = angleStart,
length = .000001,
)
|> tangentialArc({
offset: angleOffset,
|> tangentialArc(
angle = angleOffset,
radius: r,
}, %, $arc1)
|> tangentialArc({
offset: angleOffset,
radius: 0.5*r,
}, %, $arc2)
|> tangentialArc({
offset: -angleOffset,
radius: 0.5*r,
}, %, $arc3)
tag = $arc1,
)
|> tangentialArc(
angle = angleOffset,
radius = 0.5*r,
tag = $arc2)
|> tangentialArc(
angle = -angleOffset,
radius = 0.5*r,
tag = $arc3)
|> xLine(endAbsolute = 1)

View File

@ -1,6 +1,6 @@
const boxSketch = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> line(end = [0, 10])
|> tangentialArc({radius: 5, offset: 90}, %)
|> tangentialArc(radius = 5, angle = 90)
|> line(end = [5, -15])
|> extrude(length = 10)

View File

@ -159,7 +159,7 @@ async fn kcl_test_basic_tangential_arc_with_point() {
let code = r#"boxSketch = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> line(end = [0, 10])
|> tangentialArcToRelative([-5, 5], %)
|> tangentialArc(end = [-5, 5])
|> line(end = [5, -15])
|> extrude(length = 10)
"#;
@ -173,7 +173,7 @@ async fn kcl_test_basic_tangential_arc_to() {
let code = r#"boxSketch = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> line(end = [0, 10])
|> tangentialArcTo([-5, 15], %)
|> tangentialArc(endAbsolute = [-5, 15])
|> line(end = [5, -15])
|> extrude(length = 10)
"#;
@ -224,14 +224,14 @@ wallMountL = 8
bracket = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> line(end = [0, wallMountL])
|> tangentialArc({ radius= filletR, offset: 90 }, %)
|> tangentialArc(radius = filletR, angle = 90 )
|> line(end = [-shelfMountL, 0])
|> line(end = [0, -thickness])
|> line(end = [shelfMountL, 0])
|> tangentialArc({
radius= filletR - thickness,
offset: -90
}, %)
|> tangentialArc(
radius = filletR - thickness,
angle = -90,
)
|> line(end = [0, -wallMountL])
|> close()
|> extrude(length = width)
@ -306,7 +306,7 @@ thing = other_circle([2, 2], 20)
#[tokio::test(flavor = "multi_thread")]
async fn kcl_test_rounded_with_holes() {
let code = r#"fn tarc = (to, sktch, tag?) => {
return tangentialArcTo(to, sktch, tag)
return tangentialArc(sktch, endAbsolute = to, tag = tag)
}
fn roundedRectangle = (pos, w, l, cornerRadius) => {
@ -705,7 +705,7 @@ async fn kcl_test_error_sketch_on_arc_face() {
let code = r#"fn cube = (pos, scale) => {
sg = startSketchOn(XY)
|> startProfileAt(pos, %)
|> tangentialArcToRelative([0, scale], %, $here)
|> tangentialArc(end = [0, scale], tag = $here)
|> line(end = [scale, 0])
|> line(end = [0, -scale])
@ -1342,7 +1342,7 @@ async fn kcl_test_error_empty_start_sketch_on_string() {
|> line(end = [190.03, -118.13])
|> line(end = [-33.38, -202.86])
|> line(end = [-315.86, -64.2])
|> tangentialArcTo([-147.66, 121.34], %)
|> tangentialArc(endAbsolute = [-147.66, 121.34])
|> close()
|> extrude(length = 100)
@ -1352,10 +1352,11 @@ secondSketch = startSketchOn(part001, '')
"#;
let result = execute_and_snapshot(code, None).await;
assert!(result.is_err());
let err = result.unwrap_err();
let err = err.as_kcl_error().unwrap();
assert_eq!(
result.err().unwrap().to_string(),
r#"semantic: KclErrorDetails { source_ranges: [SourceRange([297, 299, 0])], message: "Argument at index 1 was supposed to be type Option<FaceTag> but found string (text)" }"#
err.message(),
"Argument at index 1 was supposed to be type Option<FaceTag> but found string (text)"
);
}

View File

@ -7,6 +7,7 @@ use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use super::types::NumericType;
use crate::{
errors::{KclError, KclErrorDetails, Severity},
execution::{
@ -22,8 +23,6 @@ use crate::{
CompilationError,
};
use super::types::NumericType;
/// State for executing a program.
#[derive(Debug, Clone)]
pub struct ExecState {

View File

@ -807,6 +807,7 @@ pub enum UnitAngle {
impl UnitAngle {
fn adjust_to(self, value: f64, to: UnitAngle) -> f64 {
use std::f64::consts::PI;
use UnitAngle::*;
if !*CHECK_NUMERIC_TYPES {
@ -1171,9 +1172,8 @@ impl KclValue {
#[cfg(test)]
mod test {
use crate::execution::{parse_execute, ExecTestResults};
use super::*;
use crate::execution::{parse_execute, ExecTestResults};
fn values(exec_state: &mut ExecState) -> Vec<KclValue> {
vec![

View File

@ -241,15 +241,9 @@ pub async fn appearance(exec_state: &mut ExecState, args: Args) -> Result<KclVal
/// sweepPath = startSketchOn(XZ)
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// pipeHole = startSketchOn(XY)

View File

@ -151,6 +151,10 @@ impl Args {
let Some(arg) = self.kw_args.labeled.get(label) else {
return Ok(None);
};
if let KclValue::KclNone { .. } = arg.value {
// It is set, but it's an optional parameter that wasn't provided.
return Ok(None);
}
T::from_kcl_val(&arg.value).map(Some).ok_or_else(|| {
KclError::Type(KclErrorDetails {

View File

@ -9,8 +9,7 @@ use kcmc::{
length_unit::LengthUnit,
ok_response::OkModelingCmdResponse,
output::ExtrusionFaceInfo,
shared::ExtrusionFaceCapType,
shared::Opposite,
shared::{ExtrusionFaceCapType, Opposite},
websocket::{ModelingCmdReq, OkWebSocketResponseData},
ModelingCmd,
};

View File

@ -85,8 +85,6 @@ lazy_static! {
Box::new(crate::std::sketch::Arc),
Box::new(crate::std::sketch::ArcTo),
Box::new(crate::std::sketch::TangentialArc),
Box::new(crate::std::sketch::TangentialArcTo),
Box::new(crate::std::sketch::TangentialArcToRelative),
Box::new(crate::std::sketch::BezierCurve),
Box::new(crate::std::sketch::Hole),
Box::new(crate::std::patterns::PatternLinear2D),

View File

@ -824,7 +824,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result
/// |> startProfileAt([-size, -size], %)
/// |> line(end = [2 * size, 0])
/// |> line(end = [0, 2 * size])
/// |> tangentialArcTo([-size, size], %)
/// |> tangentialArc(endAbsolute = [-size, size])
/// |> close(%)
/// |> extrude(length = 65)
///
@ -852,7 +852,7 @@ pub async fn pattern_linear_3d(exec_state: &mut ExecState, args: Args) -> Result
/// |> startProfileAt([-size, -size], %)
/// |> line(end = [2 * size, 0])
/// |> line(end = [0, 2 * size])
/// |> tangentialArcTo([-size, size], %)
/// |> tangentialArc(endAbsolute = [-size, size])
/// |> close(%)
/// |> extrude(length = 65)
///

View File

@ -1,7 +1,12 @@
//! Standard library revolution surfaces.
use anyhow::Result;
use kcmc::{each_cmd as mcmd, length_unit::LengthUnit, shared::Angle, shared::Opposite, ModelingCmd};
use kcmc::{
each_cmd as mcmd,
length_unit::LengthUnit,
shared::{Angle, Opposite},
ModelingCmd,
};
use kittycad_modeling_cmds::{self as kcmc, shared::Point3d};
use super::DEFAULT_TOLERANCE;

View File

@ -393,10 +393,7 @@ pub async fn segment_length(exec_state: &mut ExecState, args: Args) -> Result<Kc
/// length = 10,
/// tag = $thing,
/// )
/// |> tangentialArc({
/// offset = -120,
/// radius = 5,
/// }, %)
/// |> tangentialArc(angle = -120, radius = 5)
/// |> angledLine(
/// angle = -60,
/// length = segLen(thing),
@ -485,12 +482,12 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result<Kc
/// pillSketch = startSketchOn('XZ')
/// |> startProfileAt([0, 0], %)
/// |> line(end = [20, 0])
/// |> tangentialArcToRelative([0, 10], %, $arc1)
/// |> tangentialArc(end = [0, 10], tag = $arc1)
/// |> angledLine(
/// angle = tangentToEnd(arc1),
/// length = 20,
/// )
/// |> tangentialArcToRelative([0, -10], %)
/// |> tangentialArc(end = [0, -10])
/// |> close()
///
/// pillExtrude = extrude(pillSketch, length = 10)
@ -501,12 +498,12 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result<Kc
/// pillSketch = startSketchOn('XZ')
/// |> startProfileAt([0, 0], %)
/// |> line(end = [0, 20])
/// |> tangentialArcTo([10, 20], %, $arc1)
/// |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)
/// |> angledLine(
/// angle = tangentToEnd(arc1),
/// length = 20,
/// )
/// |> tangentialArcToRelative([-10, 0], %)
/// |> tangentialArc(end = [-10, 0])
/// |> close()
///
/// pillExtrude = extrude(pillSketch, length = 10)

View File

@ -104,7 +104,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// |> startProfileAt([-size, -size], %)
/// |> line(end = [2 * size, 0])
/// |> line(end = [0, 2 * size])
/// |> tangentialArcTo([-size, size], %)
/// |> tangentialArc(endAbsolute = [-size, size])
/// |> close()
/// |> extrude(length = 65)
///
@ -127,7 +127,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// |> startProfileAt([-size, -size], %)
/// |> line(end = [2 * size, 0])
/// |> line(end = [0, 2 * size])
/// |> tangentialArcTo([-size, size], %)
/// |> tangentialArc(endAbsolute = [-size, size])
/// |> close()
/// |> extrude(length = 65)
///
@ -152,7 +152,7 @@ pub async fn shell(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// |> startProfileAt([-size, -size], %)
/// |> line(end = [2 * size, 0])
/// |> line(end = [0, 2 * size])
/// |> tangentialArcTo([-size, size], %)
/// |> tangentialArc(endAbsolute = [-size, size])
/// |> close()
/// |> extrude(length = 65)
///
@ -287,7 +287,7 @@ pub async fn hollow(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// |> startProfileAt([-size, -size], %)
/// |> line(end = [2 * size, 0])
/// |> line(end = [0, 2 * size])
/// |> tangentialArcTo([-size, size], %)
/// |> tangentialArc(endAbsolute = [-size, size])
/// |> close()
/// |> extrude(length = 65)
///

View File

@ -1705,6 +1705,127 @@ pub(crate) async fn inner_arc_to(
Ok(new_sketch)
}
/// Draw a tangential arc to a specific point.
pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let sketch =
args.get_unlabeled_kw_arg_typed("sketch", &RuntimeType::Primitive(PrimitiveType::Sketch), exec_state)?;
let end = args.get_kw_arg_opt("end")?;
let end_absolute = args.get_kw_arg_opt("endAbsolute")?;
let radius = args.get_kw_arg_opt("radius")?;
let angle = args.get_kw_arg_opt("angle")?;
let tag = args.get_kw_arg_opt(NEW_TAG_KW)?;
let new_sketch = inner_tangential_arc(sketch, end_absolute, end, radius, angle, tag, exec_state, args).await?;
Ok(KclValue::Sketch {
value: Box::new(new_sketch),
})
}
/// Starting at the current sketch's origin, draw a curved line segment along
/// some part of an imaginary circle until it reaches the desired (x, y)
/// coordinates.
///
/// When using radius and angle, draw a curved line segment along part of an
/// imaginary circle. The arc is constructed such that the last line segment is
/// placed tangent to the imaginary circle of the specified radius. The
/// resulting arc is the segment of the imaginary circle from that tangent point
/// for 'angle' degrees along the imaginary circle.
///
/// ```no_run
/// exampleSketch = startSketchOn(XZ)
/// |> startProfileAt([0, 0], %)
/// |> angledLine(
/// angle = 45,
/// length = 10,
/// )
/// |> tangentialArc(end = [0, -10])
/// |> line(end = [-10, 0])
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
///
/// ```no_run
/// exampleSketch = startSketchOn(XZ)
/// |> startProfileAt([0, 0], %)
/// |> angledLine(
/// angle = 60,
/// length = 10,
/// )
/// |> tangentialArc(endAbsolute = [15, 15])
/// |> line(end = [10, -15])
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
///
/// ```no_run
/// exampleSketch = startSketchOn(XZ)
/// |> startProfileAt([0, 0], %)
/// |> angledLine(
/// angle = 60,
/// length = 10,
/// )
/// |> tangentialArc(radius = 10, angle = -120)
/// |> angledLine(
/// angle = -60,
/// length = 10,
/// )
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
#[stdlib {
name = "tangentialArc",
keywords = true,
unlabeled_first = true,
args = {
sketch = { docs = "Which sketch should this path be added to?"},
end_absolute = { docs = "Which absolute point should this arc go to? Incompatible with `end`, `radius`, and `offset`."},
end = { docs = "How far away (along the X and Y axes) should this arc go? Incompatible with `endAbsolute`, `radius`, and `offset`.", include_in_snippet = true },
radius = { docs = "Radius of the imaginary circle. `angle` must be given. Incompatible with `end` and `endAbsolute`."},
angle = { docs = "Offset of the arc in degrees. `radius` must be given. Incompatible with `end` and `endAbsolute`."},
tag = { docs = "Create a new tag which refers to this arc"},
}
}]
#[allow(clippy::too_many_arguments)]
async fn inner_tangential_arc(
sketch: Sketch,
end_absolute: Option<[f64; 2]>,
end: Option<[f64; 2]>,
radius: Option<f64>,
angle: Option<f64>,
tag: Option<TagNode>,
exec_state: &mut ExecState,
args: Args,
) -> Result<Sketch, KclError> {
match (end_absolute, end, radius, angle) {
(Some(point), None, None, None) => {
inner_tangential_arc_to_point(sketch, point, true, tag, exec_state, args).await
}
(None, Some(point), None, None) => {
inner_tangential_arc_to_point(sketch, point, false, tag, exec_state, args).await
}
(None, None, Some(radius), Some(angle)) => {
let data = TangentialArcData::RadiusAndOffset { radius, offset: angle };
inner_tangential_arc_radius_angle(data, sketch, tag, exec_state, args).await
}
(Some(_), Some(_), None, None) => Err(KclError::Semantic(KclErrorDetails {
source_ranges: vec![args.source_range],
message: "You cannot give both `end` and `endAbsolute` params, you have to choose one or the other"
.to_owned(),
})),
(None, None, Some(_), None) | (None, None, None, Some(_)) => Err(KclError::Semantic(KclErrorDetails {
source_ranges: vec![args.source_range],
message: "You must supply both `radius` and `angle` arguments".to_owned(),
})),
(_, _, _, _) => Err(KclError::Semantic(KclErrorDetails {
source_ranges: vec![args.source_range],
message: "You must supply `end`, `endAbsolute`, or both `radius` and `angle` arguments".to_owned(),
})),
}
}
/// Data to draw a tangential arc.
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, JsonSchema, ts_rs::TS)]
#[ts(export)]
@ -1719,44 +1840,13 @@ pub enum TangentialArcData {
},
}
/// Draw a tangential arc.
pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let (data, sketch, tag): (TangentialArcData, Sketch, Option<TagNode>) =
args.get_data_and_sketch_and_tag(exec_state)?;
let new_sketch = inner_tangential_arc(data, sketch, tag, exec_state, args).await?;
Ok(KclValue::Sketch {
value: Box::new(new_sketch),
})
}
/// Draw a curved line segment along part of an imaginary circle.
///
/// The arc is constructed such that the last line segment is placed tangent
/// to the imaginary circle of the specified radius. The resulting arc is the
/// segment of the imaginary circle from that tangent point for 'offset'
/// segment of the imaginary circle from that tangent point for 'angle'
/// degrees along the imaginary circle.
///
/// ```no_run
/// exampleSketch = startSketchOn(XZ)
/// |> startProfileAt([0, 0], %)
/// |> angledLine(
/// angle = 60,
/// length = 10,
/// )
/// |> tangentialArc({ radius = 10, offset = -120 }, %)
/// |> angledLine(
/// angle = -60,
/// length = 10,
/// )
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
#[stdlib {
name = "tangentialArc",
}]
async fn inner_tangential_arc(
async fn inner_tangential_arc_radius_angle(
data: TangentialArcData,
sketch: Sketch,
tag: Option<TagNode>,
@ -1847,49 +1937,10 @@ fn tan_arc_to(sketch: &Sketch, to: &[f64; 2]) -> ModelingCmd {
})
}
/// Draw a tangential arc to a specific point.
pub async fn tangential_arc_to(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let (to, sketch, tag): ([f64; 2], Sketch, Option<TagNode>) = args.get_data_and_sketch_and_tag(exec_state)?;
let new_sketch = inner_tangential_arc_to(to, sketch, tag, exec_state, args).await?;
Ok(KclValue::Sketch {
value: Box::new(new_sketch),
})
}
/// Draw a tangential arc to point some distance away..
pub async fn tangential_arc_to_relative(exec_state: &mut ExecState, args: Args) -> Result<KclValue, KclError> {
let (delta, sketch, tag): ([f64; 2], Sketch, Option<TagNode>) = args.get_data_and_sketch_and_tag(exec_state)?;
let new_sketch = inner_tangential_arc_to_relative(delta, sketch, tag, exec_state, args).await?;
Ok(KclValue::Sketch {
value: Box::new(new_sketch),
})
}
/// Starting at the current sketch's origin, draw a curved line segment along
/// some part of an imaginary circle until it reaches the desired (x, y)
/// coordinates.
///
/// ```no_run
/// exampleSketch = startSketchOn(XZ)
/// |> startProfileAt([0, 0], %)
/// |> angledLine(
/// angle = 60,
/// length = 10,
/// )
/// |> tangentialArcTo([15, 15], %)
/// |> line(end = [10, -15])
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
#[stdlib {
name = "tangentialArcTo",
}]
async fn inner_tangential_arc_to(
to: [f64; 2],
async fn inner_tangential_arc_to_point(
sketch: Sketch,
point: [f64; 2],
is_absolute: bool,
tag: Option<TagNode>,
exec_state: &mut ExecState,
args: Args,
@ -1897,6 +1948,12 @@ async fn inner_tangential_arc_to(
let from: Point2d = sketch.current_pen_position()?;
let tangent_info = sketch.get_tangential_info_from_paths();
let tan_previous_point = tangent_info.tan_previous_point(from.into());
let to = if is_absolute {
point
} else {
[from.x + point[0], from.y + point[1]]
};
let [to_x, to_y] = to;
let result = get_tangential_arc_to_info(TangentialArcInfoInput {
arc_start_point: [from.x, from.y],
@ -1905,75 +1962,6 @@ async fn inner_tangential_arc_to(
obtuse: true,
});
let delta = [to_x - from.x, to_y - from.y];
let id = exec_state.next_uuid();
args.batch_modeling_cmd(id, tan_arc_to(&sketch, &delta)).await?;
let current_path = Path::TangentialArcTo {
base: BasePath {
from: from.into(),
to,
tag: tag.clone(),
units: sketch.units,
geo_meta: GeoMeta {
id,
metadata: args.source_range.into(),
},
},
center: result.center,
ccw: result.ccw > 0,
};
let mut new_sketch = sketch.clone();
if let Some(tag) = &tag {
new_sketch.add_tag(tag, &current_path, exec_state);
}
new_sketch.paths.push(current_path);
Ok(new_sketch)
}
/// Starting at the current sketch's origin, draw a curved line segment along
/// some part of an imaginary circle until it reaches a point the given (x, y)
/// distance away.
///
/// ```no_run
/// exampleSketch = startSketchOn(XZ)
/// |> startProfileAt([0, 0], %)
/// |> angledLine(
/// angle = 45,
/// length = 10,
/// )
/// |> tangentialArcToRelative([0, -10], %)
/// |> line(end = [-10, 0])
/// |> close()
///
/// example = extrude(exampleSketch, length = 10)
/// ```
#[stdlib {
name = "tangentialArcToRelative",
}]
async fn inner_tangential_arc_to_relative(
delta: [f64; 2],
sketch: Sketch,
tag: Option<TagNode>,
exec_state: &mut ExecState,
args: Args,
) -> Result<Sketch, KclError> {
let from: Point2d = sketch.current_pen_position()?;
let to = [from.x + delta[0], from.y + delta[1]];
let tangent_info = sketch.get_tangential_info_from_paths();
let tan_previous_point = tangent_info.tan_previous_point(from.into());
let [dx, dy] = delta;
let result = get_tangential_arc_to_info(TangentialArcInfoInput {
arc_start_point: [from.x, from.y],
arc_end_point: [from.x + dx, from.y + dy],
tan_previous_point,
obtuse: true,
});
if result.center[0].is_infinite() {
return Err(KclError::Semantic(KclErrorDetails {
source_ranges: vec![args.source_range],
@ -1990,6 +1978,11 @@ async fn inner_tangential_arc_to_relative(
}));
}
let delta = if is_absolute {
[to_x - from.x, to_y - from.y]
} else {
point
};
let id = exec_state.next_uuid();
args.batch_modeling_cmd(id, tan_arc_to(&sketch, &delta)).await?;

View File

@ -58,15 +58,9 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// sweepPath = startSketchOn(XZ)
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// // Create a hole for the pipe.
@ -127,10 +121,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// sketch002 = startSketchOn(YZ)
/// sweepPath = startProfileAt([0, 0], sketch002)
/// |> yLine(length = 231.81)
/// |> tangentialArc({
/// radius = 80,
/// offset = -90,
/// }, %)
/// |> tangentialArc(radius = 80, angle = -90)
/// |> xLine(length = 384.93)
///
/// sweep([rectangleSketch, circleSketch], path = sweepPath)
@ -144,10 +135,7 @@ pub async fn sweep(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// sketch002 = startSketchOn('YZ')
/// sweepPath = startProfileAt([0, 0], sketch002)
/// |> yLine(length = 231.81)
/// |> tangentialArc({
/// radius = 80,
/// offset = -90,
/// }, %)
/// |> tangentialArc(radius = 80, angle = -90)
/// |> xLine(length = 384.93)
///
/// sweep(circleSketch, path = sweepPath, sectional = true)

View File

@ -67,15 +67,9 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// sweepPath = startSketchOn('XZ')
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// // Create a hole for the pipe.
@ -130,10 +124,7 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
/// sketch002 = startSketchOn('YZ')
/// sweepPath = startProfileAt([0, 0], sketch002)
/// |> yLine(length = 231.81)
/// |> tangentialArc({
/// radius = 80,
/// offset = -90,
/// }, %)
/// |> tangentialArc(radius = 80, angle = -90)
/// |> xLine(length = 384.93)
///
/// parts = sweep([rectangleSketch, circleSketch], path = sweepPath)
@ -241,15 +232,9 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
/// sweepPath = startSketchOn('XZ')
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// // Create a hole for the pipe.
@ -318,10 +303,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
/// sketch002 = startSketchOn('YZ')
/// sweepPath = startProfileAt([0, 0], sketch002)
/// |> yLine(length = 231.81)
/// |> tangentialArc({
/// radius = 80,
/// offset = -90,
/// }, %)
/// |> tangentialArc(radius = 80, angle = -90)
/// |> xLine(length = 384.93)
///
/// parts = sweep([rectangleSketch, circleSketch], path = sweepPath)
@ -575,15 +557,9 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// sweepPath = startSketchOn('XZ')
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// // Create a hole for the pipe.
@ -614,15 +590,9 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// sweepPath = startSketchOn('XZ')
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// // Create a hole for the pipe.
@ -651,15 +621,9 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// sweepPath = startSketchOn('XZ')
/// |> startProfileAt([0.05, 0.05], %)
/// |> line(end = [0, 7])
/// |> tangentialArc({
/// offset: 90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = 90, radius = 5)
/// |> line(end = [-3, 0])
/// |> tangentialArc({
/// offset: -90,
/// radius: 5
/// }, %)
/// |> tangentialArc(angle = -90, radius = 5)
/// |> line(end = [0, 7])
///
/// // Create a hole for the pipe.
@ -716,10 +680,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
/// sketch002 = startSketchOn('YZ')
/// sweepPath = startProfileAt([0, 0], sketch002)
/// |> yLine(length = 231.81)
/// |> tangentialArc({
/// radius = 80,
/// offset = -90,
/// }, %)
/// |> tangentialArc(radius = 80, angle = -90)
/// |> xLine(length = 384.93)
///
/// parts = sweep([rectangleSketch, circleSketch], path = sweepPath)
@ -846,15 +807,9 @@ mod tests {
const PIPE: &str = r#"sweepPath = startSketchOn('XZ')
|> startProfileAt([0.05, 0.05], %)
|> line(end = [0, 7])
|> tangentialArc({
offset: 90,
radius: 5
}, %)
|> tangentialArc(angle = 90, radius = 5)
|> line(end = [-3, 0])
|> tangentialArc({
offset: -90,
radius: 5
}, %)
|> tangentialArc(angle = -90, radius = 5)
|> line(end = [0, 7])
// Create a hole for the pipe.

View File

@ -234,40 +234,37 @@ pub fn is_on_circumference(center: Point2d, point: Point2d, radius: f64) -> bool
(distance_squared - radius.powi(2)).abs() < 1e-9
}
// Calculate the center of 3 points
// To calculate the center of the 3 point circle 2 perpendicular lines are created
// These perpendicular lines will intersect at the center of the circle.
// Calculate the center of 3 points using an algebraic method
// Handles if 3 points lie on the same line (collinear) by returning the average of the points (could return None instead..)
pub fn calculate_circle_center(p1: [f64; 2], p2: [f64; 2], p3: [f64; 2]) -> [f64; 2] {
// y2 - y1
let y_2_1 = p2[1] - p1[1];
// y3 - y2
let y_3_2 = p3[1] - p2[1];
// x2 - x1
let x_2_1 = p2[0] - p1[0];
// x3 - x2
let x_3_2 = p3[0] - p2[0];
let (x1, y1) = (p1[0], p1[1]);
let (x2, y2) = (p2[0], p2[1]);
let (x3, y3) = (p3[0], p3[1]);
// Slope of two perpendicular lines
let slope_a = y_2_1 / x_2_1;
let slope_b = y_3_2 / x_3_2;
// Compute the determinant d = 2 * (x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2))
// Visually d is twice the area of the triangle formed by the points,
// also the same as: cross(p2 - p1, p3 - p1)
let d = 2.0 * (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
// Values for line intersection
// y1 - y3
let y_1_3 = p1[1] - p3[1];
// x1 + x2
let x_1_2 = p1[0] + p2[0];
// x2 + x3
let x_2_3 = p2[0] + p3[0];
// y1 + y2
let y_1_2 = p1[1] + p2[1];
// If d is nearly zero, the points are collinear, and a unique circle cannot be defined.
if d.abs() < f64::EPSILON {
return [(x1 + x2 + x3) / 3.0, (y1 + y2 + y3) / 3.0];
}
// Solve for the intersection of these two lines
let numerator = (slope_a * slope_b * y_1_3) + (slope_b * x_1_2) - (slope_a * x_2_3);
let x = numerator / (2.0 * (slope_b - slope_a));
// squared lengths
let p1_sq = x1 * x1 + y1 * y1;
let p2_sq = x2 * x2 + y2 * y2;
let p3_sq = x3 * x3 + y3 * y3;
let y = ((-1.0 / slope_a) * (x - (x_1_2 / 2.0))) + (y_1_2 / 2.0);
[x, y]
// This formula is derived from the circle equations:
// (x - cx)^2 + (y - cy)^2 = r^2
// All 3 points will satisfy this equation, so we have 3 equations. Radius can be eliminated
// by subtracting one of the equations from the other two and the remaining 2 equations can
// be solved for cx and cy.
[
(p1_sq * (y2 - y3) + p2_sq * (y3 - y1) + p3_sq * (y1 - y2)) / d,
(p1_sq * (x3 - x2) + p2_sq * (x1 - x3) + p3_sq * (x2 - x1)) / d,
]
}
pub struct CircleParams {
@ -286,9 +283,11 @@ pub fn calculate_circle_from_3_points(points: [Point2d; 3]) -> CircleParams {
#[cfg(test)]
mod tests {
// Here you can bring your functions into scope
use approx::assert_relative_eq;
use pretty_assertions::assert_eq;
use std::f64::consts::TAU;
use super::{get_x_component, get_y_component, Angle};
use super::{calculate_circle_center, get_x_component, get_y_component, Angle};
use crate::SourceRange;
static EACH_QUAD: [(i32, [i32; 2]); 12] = [
@ -453,6 +452,75 @@ mod tests {
assert_eq!(angle_start.to_degrees().round(), 0.0);
assert_eq!(angle_end.to_degrees().round(), 180.0);
}
#[test]
fn test_calculate_circle_center() {
const EPS: f64 = 1e-4;
// Test: circle center = (4.1, 1.9)
let p1 = [1.0, 2.0];
let p2 = [4.0, 5.0];
let p3 = [7.0, 3.0];
let center = calculate_circle_center(p1, p2, p3);
assert_relative_eq!(center[0], 4.1, epsilon = EPS);
assert_relative_eq!(center[1], 1.9, epsilon = EPS);
// Tests: Generate a few circles and test its points
let center = [3.2, 0.7];
let radius_array = [0.001, 0.01, 0.6, 1.0, 5.0, 60.0, 500.0, 2000.0, 400_000.0];
let points_array = [[0.0, 0.33, 0.66], [0.0, 0.1, 0.2], [0.0, -0.1, 0.1], [0.0, 0.5, 0.7]];
let get_point = |radius: f64, t: f64| {
let angle = t * TAU;
[center[0] + radius * angle.cos(), center[1] + radius * angle.sin()]
};
for radius in radius_array {
for point in points_array {
let p1 = get_point(radius, point[0]);
let p2 = get_point(radius, point[1]);
let p3 = get_point(radius, point[2]);
let c = calculate_circle_center(p1, p2, p3);
assert_relative_eq!(c[0], center[0], epsilon = EPS);
assert_relative_eq!(c[1], center[1], epsilon = EPS);
}
}
// Test: Equilateral triangle
let p1 = [0.0, 0.0];
let p2 = [1.0, 0.0];
let p3 = [0.5, 3.0_f64.sqrt() / 2.0];
let center = calculate_circle_center(p1, p2, p3);
assert_relative_eq!(center[0], 0.5, epsilon = EPS);
assert_relative_eq!(center[1], 1.0 / (2.0 * 3.0_f64.sqrt()), epsilon = EPS);
// Test: Collinear points (should return the average of the points)
let p1 = [0.0, 0.0];
let p2 = [1.0, 0.0];
let p3 = [2.0, 0.0];
let center = calculate_circle_center(p1, p2, p3);
assert_relative_eq!(center[0], 1.0, epsilon = EPS);
assert_relative_eq!(center[1], 0.0, epsilon = EPS);
// Test: Points forming a circle with radius = 1
let p1 = [0.0, 0.0];
let p2 = [0.0, 2.0];
let p3 = [2.0, 0.0];
let center = calculate_circle_center(p1, p2, p3);
assert_relative_eq!(center[0], 1.0, epsilon = EPS);
assert_relative_eq!(center[1], 1.0, epsilon = EPS);
// Test: Integer coordinates
let p1 = [0.0, 0.0];
let p2 = [0.0, 6.0];
let p3 = [6.0, 0.0];
let center = calculate_circle_center(p1, p2, p3);
assert_relative_eq!(center[0], 3.0, epsilon = EPS);
assert_relative_eq!(center[1], 3.0, epsilon = EPS);
// Verify radius (should be 3 * sqrt(2))
let radius = ((center[0] - p1[0]).powi(2) + (center[1] - p1[1]).powi(2)).sqrt();
assert_relative_eq!(radius, 3.0 * 2.0_f64.sqrt(), epsilon = EPS);
}
}
pub type Coords2d = [f64; 2];

View File

@ -103,9 +103,9 @@ export fn circle(
/// sketch0011 = startSketchOn(XY)
/// |> startProfileAt([6.77, 0], %)
/// |> yLine(length = 1.27)
/// |> tangentialArcTo([5.96, 2.37], %)
/// |> tangentialArcTo([-6.2, 2.44], %)
/// |> tangentialArcTo([-6.6, 1.82], %)
/// |> tangentialArc(endAbsolute = [5.96, 2.37])
/// |> tangentialArc(endAbsolute = [-6.2, 2.44])
/// |> tangentialArc(endAbsolute = [-6.6, 1.82])
/// |> yLine(length = -1.82)
/// |> mirror2d( axis = X )
/// |> extrude(length = 10)

View File

@ -12,8 +12,8 @@ flowchart LR
subgraph path10 [Path]
10["Path<br>[479, 508, 0]"]
11["Segment<br>[514, 539, 0]"]
12["Segment<br>[545, 571, 0]"]
13["Segment<br>[577, 609, 0]"]
12["Segment<br>[545, 580, 0]"]
13["Segment<br>[586, 627, 0]"]
end
1["Plane<br>[12, 31, 0]"]
9["Plane<br>[453, 473, 0]"]

View File

@ -816,116 +816,47 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "0",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.0,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "0",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.0,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"argument": {
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "6.8",
"raw": "0",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 6.8,
"value": 0.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
},
{
"commentStart": 0,
"end": 0,
"raw": "8.17",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 8.17,
"suffix": "None"
{
"commentStart": 0,
"end": 0,
"raw": "0",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.0,
"suffix": "None"
}
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -935,7 +866,7 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -946,8 +877,85 @@ description: Result of parsing artifact_graph_example_code_no_3d.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"argument": {
"commentStart": 0,
"end": 0,
"raw": "6.8",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 6.8,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
},
{
"commentStart": 0,
"end": 0,
"raw": "8.17",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 8.17,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
}
],
"commentStart": 0,

View File

@ -8,5 +8,5 @@ sketch003 = startSketchOn('YZ')
sketch004 = startSketchOn('-XZ')
|> startProfileAt([0, 14.36], %)
|> line(end = [15.49, 0.05])
|> tangentialArcTo([0, 0], %)
|> tangentialArcTo([-6.8, 8.17], %)
|> tangentialArc(endAbsolute = [0, 0])
|> tangentialArc(endAbsolute = [-6.8, 8.17])

View File

@ -12,5 +12,5 @@ sketch003 = startSketchOn(YZ)
sketch004 = startSketchOn(-XZ)
|> startProfileAt([0, 14.36], %)
|> line(end = [15.49, 0.05])
|> tangentialArcTo([0, 0], %)
|> tangentialArcTo([-6.8, 8.17], %)
|> tangentialArc(endAbsolute = [0, 0])
|> tangentialArc(endAbsolute = [-6.8, 8.17])

View File

@ -85,7 +85,7 @@ description: Artifact commands circle_three_point.kcl
"path": "[uuid]",
"to": {
"x": 30.00594901040716,
"y": 19.749999999999996,
"y": 19.75,
"z": 0.0
}
}
@ -109,7 +109,7 @@ description: Artifact commands circle_three_point.kcl
"x": 24.75,
"y": 19.75
},
"radius": 5.255949010407163,
"radius": 5.25594901040716,
"start": {
"unit": "degrees",
"value": 0.0

View File

@ -3,48 +3,48 @@ flowchart LR
subgraph path2 [Path]
2["Path<br>[422, 459, 0]"]
3["Segment<br>[465, 505, 0]"]
4["Segment<br>[511, 569, 0]"]
5["Segment<br>[575, 611, 0]"]
6["Segment<br>[617, 676, 0]"]
7["Segment<br>[682, 747, 0]"]
8["Segment<br>[753, 812, 0]"]
9["Segment<br>[818, 876, 0]"]
10["Segment<br>[882, 940, 0]"]
11["Segment<br>[946, 988, 0]"]
12["Segment<br>[994, 1052, 0]"]
13["Segment<br>[1058, 1094, 0]"]
14["Segment<br>[1100, 1159, 0]"]
15["Segment<br>[1165, 1234, 0]"]
16["Segment<br>[1240, 1300, 0]"]
17["Segment<br>[1306, 1345, 0]"]
18["Segment<br>[1351, 1410, 0]"]
19["Segment<br>[1416, 1458, 0]"]
20["Segment<br>[1464, 1523, 0]"]
21["Segment<br>[1529, 1590, 0]"]
22["Segment<br>[1596, 1656, 0]"]
23["Segment<br>[1662, 1792, 0]"]
24["Segment<br>[1798, 1858, 0]"]
25["Segment<br>[1864, 1903, 0]"]
26["Segment<br>[1909, 1968, 0]"]
27["Segment<br>[1974, 1982, 0]"]
4["Segment<br>[511, 562, 0]"]
5["Segment<br>[568, 604, 0]"]
6["Segment<br>[610, 662, 0]"]
7["Segment<br>[668, 733, 0]"]
8["Segment<br>[739, 791, 0]"]
9["Segment<br>[797, 855, 0]"]
10["Segment<br>[861, 912, 0]"]
11["Segment<br>[918, 960, 0]"]
12["Segment<br>[966, 1017, 0]"]
13["Segment<br>[1023, 1059, 0]"]
14["Segment<br>[1065, 1117, 0]"]
15["Segment<br>[1123, 1192, 0]"]
16["Segment<br>[1198, 1251, 0]"]
17["Segment<br>[1257, 1296, 0]"]
18["Segment<br>[1302, 1354, 0]"]
19["Segment<br>[1360, 1402, 0]"]
20["Segment<br>[1408, 1460, 0]"]
21["Segment<br>[1466, 1527, 0]"]
22["Segment<br>[1533, 1586, 0]"]
23["Segment<br>[1592, 1722, 0]"]
24["Segment<br>[1728, 1781, 0]"]
25["Segment<br>[1787, 1826, 0]"]
26["Segment<br>[1832, 1884, 0]"]
27["Segment<br>[1890, 1898, 0]"]
28[Solid2d]
end
subgraph path30 [Path]
30["Path<br>[2015, 2040, 0]"]
31["Segment<br>[2046, 2065, 0]"]
32["Segment<br>[2071, 2129, 0]"]
33["Segment<br>[2135, 2177, 0]"]
34["Segment<br>[2183, 2242, 0]"]
35["Segment<br>[2248, 2268, 0]"]
36["Segment<br>[2274, 2334, 0]"]
37["Segment<br>[2340, 2385, 0]"]
38["Segment<br>[2391, 2450, 0]"]
39["Segment<br>[2456, 2464, 0]"]
30["Path<br>[1931, 1956, 0]"]
31["Segment<br>[1962, 1981, 0]"]
32["Segment<br>[1987, 2038, 0]"]
33["Segment<br>[2044, 2086, 0]"]
34["Segment<br>[2092, 2144, 0]"]
35["Segment<br>[2150, 2170, 0]"]
36["Segment<br>[2176, 2229, 0]"]
37["Segment<br>[2235, 2280, 0]"]
38["Segment<br>[2286, 2338, 0]"]
39["Segment<br>[2344, 2352, 0]"]
40[Solid2d]
end
1["Plane<br>[399, 416, 0]"]
29["Plane<br>[1992, 2009, 0]"]
41["Sweep Extrusion<br>[2510, 2531, 0]"]
29["Plane<br>[1908, 1925, 0]"]
41["Sweep Extrusion<br>[2398, 2419, 0]"]
42[Wall]
43[Wall]
44[Wall]

File diff suppressed because it is too large Load Diff

View File

@ -10,41 +10,41 @@ corner_radius = 5.0
brace_base = startSketchOn(XY)
|> startProfileAt([corner_radius, 0], %)
|> line(end = [width - corner_radius, 0.0])
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 25.0 - corner_radius)
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -(d_wrist_circumference[0] - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> yLine(length = length - 25.0 - 23.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> xLine(length = 15.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 23.0 - corner_radius)
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -(hand_thickness + 15.0 + 15.0 - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(23.0 - corner_radius))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> xLine(length = 15.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> yLine(length = -(length - 25.0 - 23.0 - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> xLine(length = -(d_wrist_circumference[1] + d_wrist_circumference[2] + d_wrist_circumference[3] - hand_thickness - corner_radius))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(25.0 - corner_radius))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> close(%)
inner = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> xLine(length = 1.0)
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 25.0 - (corner_radius * 2))
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -1.0)
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(25.0 - (corner_radius * 2)))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> close(%)
final = brace_base

View File

@ -14,41 +14,41 @@ corner_radius = 5.0
brace_base = startSketchOn(XY)
|> startProfileAt([corner_radius, 0], %)
|> line(end = [width - corner_radius, 0.0])
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 25.0 - corner_radius)
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -(d_wrist_circumference[0] - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> yLine(length = length - 25.0 - 23.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> xLine(length = 15.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 23.0 - corner_radius)
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -(hand_thickness + 15.0 + 15.0 - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(23.0 - corner_radius))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> xLine(length = 15.0 - (corner_radius * 2))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> yLine(length = -(length - 25.0 - 23.0 - (corner_radius * 2)))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> xLine(length = -(d_wrist_circumference[1] + d_wrist_circumference[2] + d_wrist_circumference[3] - hand_thickness - corner_radius))
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(25.0 - corner_radius))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> close(%)
inner = startSketchOn(XY)
|> startProfileAt([0, 0], %)
|> xLine(length = 1.0)
|> tangentialArcToRelative([corner_radius, corner_radius], %)
|> tangentialArc(end = [corner_radius, corner_radius])
|> yLine(length = 25.0 - (corner_radius * 2))
|> tangentialArcToRelative([-corner_radius, corner_radius], %)
|> tangentialArc(end = [-corner_radius, corner_radius])
|> xLine(length = -1.0)
|> tangentialArcToRelative([-corner_radius, -corner_radius], %)
|> tangentialArc(end = [-corner_radius, -corner_radius])
|> yLine(length = -(25.0 - (corner_radius * 2)))
|> tangentialArcToRelative([corner_radius, -corner_radius], %)
|> tangentialArc(end = [corner_radius, -corner_radius])
|> close(%)
final = brace_base

View File

@ -3,237 +3,237 @@ flowchart LR
subgraph path2 [Path]
2["Path<br>[361, 394, 5]"]
3["Segment<br>[402, 428, 5]"]
4["Segment<br>[436, 489, 5]"]
5["Segment<br>[497, 550, 5]"]
6["Segment<br>[558, 612, 5]"]
7["Segment<br>[620, 645, 5]"]
8["Segment<br>[653, 673, 5]"]
9["Segment<br>[681, 705, 5]"]
10["Segment<br>[713, 766, 5]"]
11["Segment<br>[774, 799, 5]"]
12["Segment<br>[807, 827, 5]"]
13["Segment<br>[835, 859, 5]"]
14["Segment<br>[867, 919, 5]"]
15["Segment<br>[927, 979, 5]"]
16["Segment<br>[987, 1012, 5]"]
17["Segment<br>[1020, 1044, 5]"]
18["Segment<br>[1052, 1105, 5]"]
19["Segment<br>[1113, 1138, 5]"]
20["Segment<br>[1146, 1173, 5]"]
21["Segment<br>[1181, 1233, 5]"]
22["Segment<br>[1241, 1276, 5]"]
23["Segment<br>[1284, 1291, 5]"]
4["Segment<br>[436, 498, 5]"]
5["Segment<br>[506, 568, 5]"]
6["Segment<br>[576, 639, 5]"]
7["Segment<br>[647, 672, 5]"]
8["Segment<br>[680, 700, 5]"]
9["Segment<br>[708, 732, 5]"]
10["Segment<br>[740, 802, 5]"]
11["Segment<br>[810, 835, 5]"]
12["Segment<br>[843, 863, 5]"]
13["Segment<br>[871, 895, 5]"]
14["Segment<br>[903, 964, 5]"]
15["Segment<br>[972, 1033, 5]"]
16["Segment<br>[1041, 1066, 5]"]
17["Segment<br>[1074, 1098, 5]"]
18["Segment<br>[1106, 1168, 5]"]
19["Segment<br>[1176, 1201, 5]"]
20["Segment<br>[1209, 1236, 5]"]
21["Segment<br>[1244, 1305, 5]"]
22["Segment<br>[1313, 1357, 5]"]
23["Segment<br>[1365, 1372, 5]"]
24[Solid2d]
end
subgraph path89 [Path]
89["Path<br>[361, 394, 5]"]
90["Segment<br>[402, 428, 5]"]
91["Segment<br>[436, 489, 5]"]
92["Segment<br>[497, 550, 5]"]
93["Segment<br>[558, 612, 5]"]
94["Segment<br>[620, 645, 5]"]
95["Segment<br>[653, 673, 5]"]
96["Segment<br>[681, 705, 5]"]
97["Segment<br>[713, 766, 5]"]
98["Segment<br>[774, 799, 5]"]
99["Segment<br>[807, 827, 5]"]
100["Segment<br>[835, 859, 5]"]
101["Segment<br>[867, 919, 5]"]
102["Segment<br>[927, 979, 5]"]
103["Segment<br>[987, 1012, 5]"]
104["Segment<br>[1020, 1044, 5]"]
105["Segment<br>[1052, 1105, 5]"]
106["Segment<br>[1113, 1138, 5]"]
107["Segment<br>[1146, 1173, 5]"]
108["Segment<br>[1181, 1233, 5]"]
109["Segment<br>[1241, 1276, 5]"]
110["Segment<br>[1284, 1291, 5]"]
91["Segment<br>[436, 498, 5]"]
92["Segment<br>[506, 568, 5]"]
93["Segment<br>[576, 639, 5]"]
94["Segment<br>[647, 672, 5]"]
95["Segment<br>[680, 700, 5]"]
96["Segment<br>[708, 732, 5]"]
97["Segment<br>[740, 802, 5]"]
98["Segment<br>[810, 835, 5]"]
99["Segment<br>[843, 863, 5]"]
100["Segment<br>[871, 895, 5]"]
101["Segment<br>[903, 964, 5]"]
102["Segment<br>[972, 1033, 5]"]
103["Segment<br>[1041, 1066, 5]"]
104["Segment<br>[1074, 1098, 5]"]
105["Segment<br>[1106, 1168, 5]"]
106["Segment<br>[1176, 1201, 5]"]
107["Segment<br>[1209, 1236, 5]"]
108["Segment<br>[1244, 1305, 5]"]
109["Segment<br>[1313, 1357, 5]"]
110["Segment<br>[1365, 1372, 5]"]
111[Solid2d]
end
subgraph path176 [Path]
176["Path<br>[361, 394, 5]"]
177["Segment<br>[402, 428, 5]"]
178["Segment<br>[436, 489, 5]"]
179["Segment<br>[497, 550, 5]"]
180["Segment<br>[558, 612, 5]"]
181["Segment<br>[620, 645, 5]"]
182["Segment<br>[653, 673, 5]"]
183["Segment<br>[681, 705, 5]"]
184["Segment<br>[713, 766, 5]"]
185["Segment<br>[774, 799, 5]"]
186["Segment<br>[807, 827, 5]"]
187["Segment<br>[835, 859, 5]"]
188["Segment<br>[867, 919, 5]"]
189["Segment<br>[927, 979, 5]"]
190["Segment<br>[987, 1012, 5]"]
191["Segment<br>[1020, 1044, 5]"]
192["Segment<br>[1052, 1105, 5]"]
193["Segment<br>[1113, 1138, 5]"]
194["Segment<br>[1146, 1173, 5]"]
195["Segment<br>[1181, 1233, 5]"]
196["Segment<br>[1241, 1276, 5]"]
197["Segment<br>[1284, 1291, 5]"]
178["Segment<br>[436, 498, 5]"]
179["Segment<br>[506, 568, 5]"]
180["Segment<br>[576, 639, 5]"]
181["Segment<br>[647, 672, 5]"]
182["Segment<br>[680, 700, 5]"]
183["Segment<br>[708, 732, 5]"]
184["Segment<br>[740, 802, 5]"]
185["Segment<br>[810, 835, 5]"]
186["Segment<br>[843, 863, 5]"]
187["Segment<br>[871, 895, 5]"]
188["Segment<br>[903, 964, 5]"]
189["Segment<br>[972, 1033, 5]"]
190["Segment<br>[1041, 1066, 5]"]
191["Segment<br>[1074, 1098, 5]"]
192["Segment<br>[1106, 1168, 5]"]
193["Segment<br>[1176, 1201, 5]"]
194["Segment<br>[1209, 1236, 5]"]
195["Segment<br>[1244, 1305, 5]"]
196["Segment<br>[1313, 1357, 5]"]
197["Segment<br>[1365, 1372, 5]"]
198[Solid2d]
end
subgraph path262 [Path]
262["Path<br>[361, 394, 5]"]
263["Segment<br>[402, 428, 5]"]
264["Segment<br>[436, 489, 5]"]
265["Segment<br>[497, 550, 5]"]
266["Segment<br>[558, 612, 5]"]
267["Segment<br>[620, 645, 5]"]
268["Segment<br>[653, 673, 5]"]
269["Segment<br>[681, 705, 5]"]
270["Segment<br>[713, 766, 5]"]
271["Segment<br>[774, 799, 5]"]
272["Segment<br>[807, 827, 5]"]
273["Segment<br>[835, 859, 5]"]
274["Segment<br>[867, 919, 5]"]
275["Segment<br>[927, 979, 5]"]
276["Segment<br>[987, 1012, 5]"]
277["Segment<br>[1020, 1044, 5]"]
278["Segment<br>[1052, 1105, 5]"]
279["Segment<br>[1113, 1138, 5]"]
280["Segment<br>[1146, 1173, 5]"]
281["Segment<br>[1181, 1233, 5]"]
282["Segment<br>[1241, 1276, 5]"]
283["Segment<br>[1284, 1291, 5]"]
264["Segment<br>[436, 498, 5]"]
265["Segment<br>[506, 568, 5]"]
266["Segment<br>[576, 639, 5]"]
267["Segment<br>[647, 672, 5]"]
268["Segment<br>[680, 700, 5]"]
269["Segment<br>[708, 732, 5]"]
270["Segment<br>[740, 802, 5]"]
271["Segment<br>[810, 835, 5]"]
272["Segment<br>[843, 863, 5]"]
273["Segment<br>[871, 895, 5]"]
274["Segment<br>[903, 964, 5]"]
275["Segment<br>[972, 1033, 5]"]
276["Segment<br>[1041, 1066, 5]"]
277["Segment<br>[1074, 1098, 5]"]
278["Segment<br>[1106, 1168, 5]"]
279["Segment<br>[1176, 1201, 5]"]
280["Segment<br>[1209, 1236, 5]"]
281["Segment<br>[1244, 1305, 5]"]
282["Segment<br>[1313, 1357, 5]"]
283["Segment<br>[1365, 1372, 5]"]
284[Solid2d]
end
subgraph path349 [Path]
349["Path<br>[361, 394, 5]"]
350["Segment<br>[402, 428, 5]"]
351["Segment<br>[436, 489, 5]"]
352["Segment<br>[497, 550, 5]"]
353["Segment<br>[558, 612, 5]"]
354["Segment<br>[620, 645, 5]"]
355["Segment<br>[653, 673, 5]"]
356["Segment<br>[681, 705, 5]"]
357["Segment<br>[713, 766, 5]"]
358["Segment<br>[774, 799, 5]"]
359["Segment<br>[807, 827, 5]"]
360["Segment<br>[835, 859, 5]"]
361["Segment<br>[867, 919, 5]"]
362["Segment<br>[927, 979, 5]"]
363["Segment<br>[987, 1012, 5]"]
364["Segment<br>[1020, 1044, 5]"]
365["Segment<br>[1052, 1105, 5]"]
366["Segment<br>[1113, 1138, 5]"]
367["Segment<br>[1146, 1173, 5]"]
368["Segment<br>[1181, 1233, 5]"]
369["Segment<br>[1241, 1276, 5]"]
370["Segment<br>[1284, 1291, 5]"]
351["Segment<br>[436, 498, 5]"]
352["Segment<br>[506, 568, 5]"]
353["Segment<br>[576, 639, 5]"]
354["Segment<br>[647, 672, 5]"]
355["Segment<br>[680, 700, 5]"]
356["Segment<br>[708, 732, 5]"]
357["Segment<br>[740, 802, 5]"]
358["Segment<br>[810, 835, 5]"]
359["Segment<br>[843, 863, 5]"]
360["Segment<br>[871, 895, 5]"]
361["Segment<br>[903, 964, 5]"]
362["Segment<br>[972, 1033, 5]"]
363["Segment<br>[1041, 1066, 5]"]
364["Segment<br>[1074, 1098, 5]"]
365["Segment<br>[1106, 1168, 5]"]
366["Segment<br>[1176, 1201, 5]"]
367["Segment<br>[1209, 1236, 5]"]
368["Segment<br>[1244, 1305, 5]"]
369["Segment<br>[1313, 1357, 5]"]
370["Segment<br>[1365, 1372, 5]"]
371[Solid2d]
end
subgraph path435 [Path]
435["Path<br>[361, 394, 5]"]
436["Segment<br>[402, 428, 5]"]
437["Segment<br>[436, 489, 5]"]
438["Segment<br>[497, 550, 5]"]
439["Segment<br>[558, 612, 5]"]
440["Segment<br>[620, 645, 5]"]
441["Segment<br>[653, 673, 5]"]
442["Segment<br>[681, 705, 5]"]
443["Segment<br>[713, 766, 5]"]
444["Segment<br>[774, 799, 5]"]
445["Segment<br>[807, 827, 5]"]
446["Segment<br>[835, 859, 5]"]
447["Segment<br>[867, 919, 5]"]
448["Segment<br>[927, 979, 5]"]
449["Segment<br>[987, 1012, 5]"]
450["Segment<br>[1020, 1044, 5]"]
451["Segment<br>[1052, 1105, 5]"]
452["Segment<br>[1113, 1138, 5]"]
453["Segment<br>[1146, 1173, 5]"]
454["Segment<br>[1181, 1233, 5]"]
455["Segment<br>[1241, 1276, 5]"]
456["Segment<br>[1284, 1291, 5]"]
437["Segment<br>[436, 498, 5]"]
438["Segment<br>[506, 568, 5]"]
439["Segment<br>[576, 639, 5]"]
440["Segment<br>[647, 672, 5]"]
441["Segment<br>[680, 700, 5]"]
442["Segment<br>[708, 732, 5]"]
443["Segment<br>[740, 802, 5]"]
444["Segment<br>[810, 835, 5]"]
445["Segment<br>[843, 863, 5]"]
446["Segment<br>[871, 895, 5]"]
447["Segment<br>[903, 964, 5]"]
448["Segment<br>[972, 1033, 5]"]
449["Segment<br>[1041, 1066, 5]"]
450["Segment<br>[1074, 1098, 5]"]
451["Segment<br>[1106, 1168, 5]"]
452["Segment<br>[1176, 1201, 5]"]
453["Segment<br>[1209, 1236, 5]"]
454["Segment<br>[1244, 1305, 5]"]
455["Segment<br>[1313, 1357, 5]"]
456["Segment<br>[1365, 1372, 5]"]
457[Solid2d]
end
subgraph path522 [Path]
522["Path<br>[1685, 1709, 5]"]
522["Path<br>[1766, 1790, 5]"]
end
subgraph path523 [Path]
523["Path<br>[1717, 1847, 5]"]
524["Segment<br>[1717, 1847, 5]"]
525["Segment<br>[1717, 1847, 5]"]
526["Segment<br>[1717, 1847, 5]"]
527["Segment<br>[1717, 1847, 5]"]
528["Segment<br>[1717, 1847, 5]"]
529["Segment<br>[1717, 1847, 5]"]
530["Segment<br>[1717, 1847, 5]"]
523["Path<br>[1798, 1928, 5]"]
524["Segment<br>[1798, 1928, 5]"]
525["Segment<br>[1798, 1928, 5]"]
526["Segment<br>[1798, 1928, 5]"]
527["Segment<br>[1798, 1928, 5]"]
528["Segment<br>[1798, 1928, 5]"]
529["Segment<br>[1798, 1928, 5]"]
530["Segment<br>[1798, 1928, 5]"]
531[Solid2d]
end
subgraph path553 [Path]
553["Path<br>[1685, 1709, 5]"]
553["Path<br>[1766, 1790, 5]"]
end
subgraph path554 [Path]
554["Path<br>[1717, 1847, 5]"]
555["Segment<br>[1717, 1847, 5]"]
556["Segment<br>[1717, 1847, 5]"]
557["Segment<br>[1717, 1847, 5]"]
558["Segment<br>[1717, 1847, 5]"]
559["Segment<br>[1717, 1847, 5]"]
560["Segment<br>[1717, 1847, 5]"]
561["Segment<br>[1717, 1847, 5]"]
554["Path<br>[1798, 1928, 5]"]
555["Segment<br>[1798, 1928, 5]"]
556["Segment<br>[1798, 1928, 5]"]
557["Segment<br>[1798, 1928, 5]"]
558["Segment<br>[1798, 1928, 5]"]
559["Segment<br>[1798, 1928, 5]"]
560["Segment<br>[1798, 1928, 5]"]
561["Segment<br>[1798, 1928, 5]"]
562[Solid2d]
end
subgraph path585 [Path]
585["Path<br>[2123, 2150, 5]"]
586["Segment<br>[2158, 2180, 5]"]
587["Segment<br>[2188, 2210, 5]"]
588["Segment<br>[2218, 2240, 5]"]
589["Segment<br>[2248, 2271, 5]"]
590["Segment<br>[2279, 2302, 5]"]
591["Segment<br>[2310, 2345, 5]"]
592["Segment<br>[2353, 2360, 5]"]
585["Path<br>[2204, 2231, 5]"]
586["Segment<br>[2239, 2261, 5]"]
587["Segment<br>[2269, 2291, 5]"]
588["Segment<br>[2299, 2321, 5]"]
589["Segment<br>[2329, 2352, 5]"]
590["Segment<br>[2360, 2383, 5]"]
591["Segment<br>[2391, 2426, 5]"]
592["Segment<br>[2434, 2441, 5]"]
593[Solid2d]
end
subgraph path618 [Path]
618["Path<br>[2632, 2661, 5]"]
619["Segment<br>[2669, 2704, 5]"]
620["Segment<br>[2712, 2737, 5]"]
621["Segment<br>[2745, 2781, 5]"]
622["Segment<br>[2789, 2813, 5]"]
623["Segment<br>[2821, 2855, 5]"]
624["Segment<br>[2863, 2898, 5]"]
625["Segment<br>[2906, 2913, 5]"]
618["Path<br>[2713, 2742, 5]"]
619["Segment<br>[2750, 2785, 5]"]
620["Segment<br>[2793, 2818, 5]"]
621["Segment<br>[2826, 2862, 5]"]
622["Segment<br>[2870, 2894, 5]"]
623["Segment<br>[2902, 2936, 5]"]
624["Segment<br>[2944, 2979, 5]"]
625["Segment<br>[2987, 2994, 5]"]
626[Solid2d]
end
subgraph path650 [Path]
650["Path<br>[3188, 3215, 5]"]
651["Segment<br>[3223, 3242, 5]"]
652["Segment<br>[3250, 3340, 5]"]
650["Path<br>[3269, 3296, 5]"]
651["Segment<br>[3304, 3323, 5]"]
652["Segment<br>[3331, 3421, 5]"]
end
subgraph path654 [Path]
654["Path<br>[3440, 3473, 5]"]
655["Segment<br>[3481, 3500, 5]"]
656["Segment<br>[3508, 3530, 5]"]
657["Segment<br>[3538, 3561, 5]"]
658["Segment<br>[3569, 3589, 5]"]
659["Segment<br>[3597, 3621, 5]"]
660["Segment<br>[3629, 3652, 5]"]
661["Segment<br>[3660, 3667, 5]"]
654["Path<br>[3521, 3554, 5]"]
655["Segment<br>[3562, 3581, 5]"]
656["Segment<br>[3589, 3611, 5]"]
657["Segment<br>[3619, 3642, 5]"]
658["Segment<br>[3650, 3670, 5]"]
659["Segment<br>[3678, 3702, 5]"]
660["Segment<br>[3710, 3733, 5]"]
661["Segment<br>[3741, 3748, 5]"]
662[Solid2d]
end
subgraph path688 [Path]
688["Path<br>[3188, 3215, 5]"]
689["Segment<br>[3223, 3242, 5]"]
690["Segment<br>[3250, 3340, 5]"]
688["Path<br>[3269, 3296, 5]"]
689["Segment<br>[3304, 3323, 5]"]
690["Segment<br>[3331, 3421, 5]"]
end
subgraph path692 [Path]
692["Path<br>[3440, 3473, 5]"]
693["Segment<br>[3481, 3500, 5]"]
694["Segment<br>[3508, 3530, 5]"]
695["Segment<br>[3538, 3561, 5]"]
696["Segment<br>[3569, 3589, 5]"]
697["Segment<br>[3597, 3621, 5]"]
698["Segment<br>[3629, 3652, 5]"]
699["Segment<br>[3660, 3667, 5]"]
692["Path<br>[3521, 3554, 5]"]
693["Segment<br>[3562, 3581, 5]"]
694["Segment<br>[3589, 3611, 5]"]
695["Segment<br>[3619, 3642, 5]"]
696["Segment<br>[3650, 3670, 5]"]
697["Segment<br>[3678, 3702, 5]"]
698["Segment<br>[3710, 3733, 5]"]
699["Segment<br>[3741, 3748, 5]"]
700[Solid2d]
end
1["Plane<br>[333, 353, 5]"]
25["Sweep Extrusion<br>[1379, 1417, 5]"]
25["Sweep Extrusion<br>[1460, 1498, 5]"]
26[Wall]
27[Wall]
28[Wall]
@ -297,7 +297,7 @@ flowchart LR
86["SweepEdge Opposite"]
87["SweepEdge Adjacent"]
88["Plane<br>[333, 353, 5]"]
112["Sweep Extrusion<br>[1455, 1494, 5]"]
112["Sweep Extrusion<br>[1536, 1575, 5]"]
113[Wall]
114[Wall]
115[Wall]
@ -361,7 +361,7 @@ flowchart LR
173["SweepEdge Opposite"]
174["SweepEdge Adjacent"]
175["Plane<br>[823, 865, 0]"]
199["Sweep Extrusion<br>[1379, 1417, 5]"]
199["Sweep Extrusion<br>[1460, 1498, 5]"]
200[Wall]
201[Wall]
202[Wall]
@ -424,7 +424,7 @@ flowchart LR
259["SweepEdge Adjacent"]
260["SweepEdge Opposite"]
261["SweepEdge Adjacent"]
285["Sweep Extrusion<br>[1455, 1494, 5]"]
285["Sweep Extrusion<br>[1536, 1575, 5]"]
286[Wall]
287[Wall]
288[Wall]
@ -488,7 +488,7 @@ flowchart LR
346["SweepEdge Opposite"]
347["SweepEdge Adjacent"]
348["Plane<br>[875, 916, 0]"]
372["Sweep Extrusion<br>[1379, 1417, 5]"]
372["Sweep Extrusion<br>[1460, 1498, 5]"]
373[Wall]
374[Wall]
375[Wall]
@ -551,7 +551,7 @@ flowchart LR
432["SweepEdge Adjacent"]
433["SweepEdge Opposite"]
434["SweepEdge Adjacent"]
458["Sweep Extrusion<br>[1455, 1494, 5]"]
458["Sweep Extrusion<br>[1536, 1575, 5]"]
459[Wall]
460[Wall]
461[Wall]
@ -615,7 +615,7 @@ flowchart LR
519["SweepEdge Opposite"]
520["SweepEdge Adjacent"]
521["Plane<br>[975, 1017, 0]"]
532["Sweep Extrusion<br>[1949, 1973, 5]"]
532["Sweep Extrusion<br>[2030, 2054, 5]"]
533[Wall]
534[Wall]
535[Wall]
@ -636,7 +636,7 @@ flowchart LR
550["SweepEdge Adjacent"]
551["SweepEdge Opposite"]
552["SweepEdge Adjacent"]
563["Sweep Extrusion<br>[2015, 2039, 5]"]
563["Sweep Extrusion<br>[2096, 2120, 5]"]
564[Wall]
565[Wall]
566[Wall]
@ -658,7 +658,7 @@ flowchart LR
582["SweepEdge Opposite"]
583["SweepEdge Adjacent"]
584["Plane<br>[1068, 1135, 0]"]
594["Sweep Extrusion<br>[2523, 2547, 5]"]
594["Sweep Extrusion<br>[2604, 2628, 5]"]
595[Wall]
596[Wall]
597[Wall]
@ -679,10 +679,10 @@ flowchart LR
612["SweepEdge Adjacent"]
613["SweepEdge Opposite"]
614["SweepEdge Adjacent"]
615["Sweep Extrusion<br>[2523, 2547, 5]"]
616["Sweep Extrusion<br>[2523, 2547, 5]"]
615["Sweep Extrusion<br>[2604, 2628, 5]"]
616["Sweep Extrusion<br>[2604, 2628, 5]"]
617["Plane<br>[1205, 1272, 0]"]
627["Sweep Extrusion<br>[3083, 3107, 5]"]
627["Sweep Extrusion<br>[3164, 3188, 5]"]
628[Wall]
629[Wall]
630[Wall]
@ -703,10 +703,10 @@ flowchart LR
645["SweepEdge Adjacent"]
646["SweepEdge Opposite"]
647["SweepEdge Adjacent"]
648["Sweep Extrusion<br>[3083, 3107, 5]"]
649["Plane<br>[3748, 3783, 5]"]
653["Plane<br>[3814, 3843, 5]"]
663["Sweep Sweep<br>[3855, 3882, 5]"]
648["Sweep Extrusion<br>[3164, 3188, 5]"]
649["Plane<br>[3829, 3864, 5]"]
653["Plane<br>[3895, 3924, 5]"]
663["Sweep Sweep<br>[3936, 3963, 5]"]
664[Wall]
665[Wall]
666[Wall]
@ -730,9 +730,9 @@ flowchart LR
684["SweepEdge Adjacent"]
685["SweepEdge Opposite"]
686["SweepEdge Adjacent"]
687["Plane<br>[3748, 3783, 5]"]
691["Plane<br>[3814, 3843, 5]"]
701["Sweep Sweep<br>[3855, 3882, 5]"]
687["Plane<br>[3829, 3864, 5]"]
691["Plane<br>[3895, 3924, 5]"]
701["Sweep Sweep<br>[3936, 3963, 5]"]
702[Wall]
703[Wall]
704[Wall]
@ -760,14 +760,14 @@ flowchart LR
726["StartSketchOnPlane<br>[333, 353, 5]"]
727["StartSketchOnPlane<br>[333, 353, 5]"]
728["StartSketchOnPlane<br>[333, 353, 5]"]
729["StartSketchOnPlane<br>[1657, 1677, 5]"]
730["StartSketchOnPlane<br>[1657, 1677, 5]"]
731["StartSketchOnPlane<br>[2095, 2115, 5]"]
732["StartSketchOnPlane<br>[2604, 2624, 5]"]
733["StartSketchOnPlane<br>[3160, 3180, 5]"]
734["StartSketchOnPlane<br>[3412, 3432, 5]"]
735["StartSketchOnPlane<br>[3160, 3180, 5]"]
736["StartSketchOnPlane<br>[3412, 3432, 5]"]
729["StartSketchOnPlane<br>[1738, 1758, 5]"]
730["StartSketchOnPlane<br>[1738, 1758, 5]"]
731["StartSketchOnPlane<br>[2176, 2196, 5]"]
732["StartSketchOnPlane<br>[2685, 2705, 5]"]
733["StartSketchOnPlane<br>[3241, 3261, 5]"]
734["StartSketchOnPlane<br>[3493, 3513, 5]"]
735["StartSketchOnPlane<br>[3241, 3261, 5]"]
736["StartSketchOnPlane<br>[3493, 3513, 5]"]
1 --- 2
2 --- 3
2 --- 4

View File

@ -9,8 +9,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "divider",
"functionSourceRange": [
1331,
1606,
1412,
1687,
5
],
"unlabeledArg": null,
@ -25,7 +25,7 @@ description: Operations executed bench.kcl
"name": "dividerSketch",
"functionSourceRange": [
309,
1312,
1393,
5
],
"unlabeledArg": null,
@ -85,7 +85,7 @@ description: Operations executed bench.kcl
"name": "dividerSketch",
"functionSourceRange": [
309,
1312,
1393,
5
],
"unlabeledArg": null,
@ -260,8 +260,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "divider",
"functionSourceRange": [
1331,
1606,
1412,
1687,
5
],
"unlabeledArg": null,
@ -276,7 +276,7 @@ description: Operations executed bench.kcl
"name": "dividerSketch",
"functionSourceRange": [
309,
1312,
1393,
5
],
"unlabeledArg": null,
@ -336,7 +336,7 @@ description: Operations executed bench.kcl
"name": "dividerSketch",
"functionSourceRange": [
309,
1312,
1393,
5
],
"unlabeledArg": null,
@ -511,8 +511,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "divider",
"functionSourceRange": [
1331,
1606,
1412,
1687,
5
],
"unlabeledArg": null,
@ -527,7 +527,7 @@ description: Operations executed bench.kcl
"name": "dividerSketch",
"functionSourceRange": [
309,
1312,
1393,
5
],
"unlabeledArg": null,
@ -587,7 +587,7 @@ description: Operations executed bench.kcl
"name": "dividerSketch",
"functionSourceRange": [
309,
1312,
1393,
5
],
"unlabeledArg": null,
@ -762,8 +762,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "connector",
"functionSourceRange": [
1889,
2052,
1970,
2133,
5
],
"unlabeledArg": null,
@ -777,8 +777,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "connectorSketch",
"functionSourceRange": [
1626,
1868,
1707,
1949,
5
],
"unlabeledArg": null,
@ -842,8 +842,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "connectorSketch",
"functionSourceRange": [
1626,
1868,
1707,
1949,
5
],
"unlabeledArg": null,
@ -935,8 +935,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "seatSlats",
"functionSourceRange": [
2474,
2560,
2555,
2641,
5
],
"unlabeledArg": null,
@ -950,8 +950,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "seatSlatSketch",
"functionSourceRange": [
2071,
2453,
2152,
2534,
5
],
"unlabeledArg": null,
@ -1060,8 +1060,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "backSlats",
"functionSourceRange": [
3029,
3120,
3110,
3201,
5
],
"unlabeledArg": null,
@ -1075,8 +1075,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "backSlatsSketch",
"functionSourceRange": [
2580,
3008,
2661,
3089,
5
],
"unlabeledArg": null,
@ -1154,8 +1154,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "armRest",
"functionSourceRange": [
3707,
3895,
3788,
3976,
5
],
"unlabeledArg": null,
@ -1194,8 +1194,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "armRestPath",
"functionSourceRange": [
3136,
3361,
3217,
3442,
5
],
"unlabeledArg": null,
@ -1257,8 +1257,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "armRestProfile",
"functionSourceRange": [
3380,
3688,
3461,
3769,
5
],
"unlabeledArg": null,
@ -1318,8 +1318,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "armRest",
"functionSourceRange": [
3707,
3895,
3788,
3976,
5
],
"unlabeledArg": null,
@ -1358,8 +1358,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "armRestPath",
"functionSourceRange": [
3136,
3361,
3217,
3442,
5
],
"unlabeledArg": null,
@ -1421,8 +1421,8 @@ description: Operations executed bench.kcl
"type": "FunctionCall",
"name": "armRestProfile",
"functionSourceRange": [
3380,
3688,
3461,
3769,
5
],
"unlabeledArg": null,

View File

@ -152,51 +152,51 @@ flowchart LR
335["Segment<br>[793, 840, 8]"]
336["Segment<br>[848, 884, 8]"]
337["Segment<br>[892, 922, 8]"]
338["Segment<br>[930, 983, 8]"]
339["Segment<br>[991, 1031, 8]"]
340["Segment<br>[1039, 1074, 8]"]
341["Segment<br>[1082, 1120, 8]"]
342["Segment<br>[1128, 1150, 8]"]
343["Segment<br>[1158, 1165, 8]"]
338["Segment<br>[930, 975, 8]"]
339["Segment<br>[983, 1023, 8]"]
340["Segment<br>[1031, 1066, 8]"]
341["Segment<br>[1074, 1112, 8]"]
342["Segment<br>[1120, 1142, 8]"]
343["Segment<br>[1150, 1157, 8]"]
344[Solid2d]
end
subgraph path365 [Path]
365["Path<br>[511, 592, 7]"]
366["Segment<br>[598, 699, 7]"]
367["Segment<br>[705, 790, 7]"]
368["Segment<br>[796, 880, 7]"]
369["Segment<br>[886, 972, 7]"]
370["Segment<br>[978, 1063, 7]"]
371["Segment<br>[1069, 1155, 7]"]
372["Segment<br>[1161, 1284, 7]"]
373["Segment<br>[1290, 1376, 7]"]
374["Segment<br>[1382, 1517, 7]"]
375["Segment<br>[1523, 1609, 7]"]
376["Segment<br>[1615, 1739, 7]"]
377["Segment<br>[1745, 1831, 7]"]
378["Segment<br>[1837, 1922, 7]"]
379["Segment<br>[1928, 2014, 7]"]
380["Segment<br>[2020, 2105, 7]"]
381["Segment<br>[2111, 2196, 7]"]
382["Segment<br>[2202, 2209, 7]"]
367["Segment<br>[705, 763, 7]"]
368["Segment<br>[769, 853, 7]"]
369["Segment<br>[859, 918, 7]"]
370["Segment<br>[924, 1009, 7]"]
371["Segment<br>[1015, 1074, 7]"]
372["Segment<br>[1080, 1203, 7]"]
373["Segment<br>[1209, 1268, 7]"]
374["Segment<br>[1274, 1409, 7]"]
375["Segment<br>[1415, 1474, 7]"]
376["Segment<br>[1480, 1604, 7]"]
377["Segment<br>[1610, 1669, 7]"]
378["Segment<br>[1675, 1760, 7]"]
379["Segment<br>[1766, 1825, 7]"]
380["Segment<br>[1831, 1916, 7]"]
381["Segment<br>[1922, 1980, 7]"]
382["Segment<br>[1986, 1993, 7]"]
383[Solid2d]
end
subgraph path439 [Path]
439["Path<br>[487, 544, 9]"]
440["Segment<br>[550, 684, 9]"]
441["Segment<br>[690, 745, 9]"]
442["Segment<br>[751, 848, 9]"]
443["Segment<br>[854, 886, 9]"]
444["Segment<br>[892, 924, 9]"]
445["Segment<br>[930, 961, 9]"]
446["Segment<br>[967, 1082, 9]"]
447["Segment<br>[1088, 1120, 9]"]
448["Segment<br>[1126, 1158, 9]"]
449["Segment<br>[1164, 1195, 9]"]
450["Segment<br>[1201, 1294, 9]"]
451["Segment<br>[1300, 1355, 9]"]
452["Segment<br>[1361, 1434, 9]"]
453["Segment<br>[1440, 1447, 9]"]
441["Segment<br>[690, 737, 9]"]
442["Segment<br>[743, 840, 9]"]
443["Segment<br>[846, 878, 9]"]
444["Segment<br>[884, 916, 9]"]
445["Segment<br>[922, 953, 9]"]
446["Segment<br>[959, 1074, 9]"]
447["Segment<br>[1080, 1112, 9]"]
448["Segment<br>[1118, 1150, 9]"]
449["Segment<br>[1156, 1187, 9]"]
450["Segment<br>[1193, 1286, 9]"]
451["Segment<br>[1292, 1339, 9]"]
452["Segment<br>[1345, 1418, 9]"]
453["Segment<br>[1424, 1431, 9]"]
454[Solid2d]
end
1["Plane<br>[548, 565, 6]"]
@ -425,7 +425,7 @@ flowchart LR
331["SweepEdge Adjacent"]
332["SweepEdge Adjacent"]
333["Plane<br>[711, 737, 8]"]
345["Sweep Revolve<br>[1173, 1190, 8]"]
345["Sweep Revolve<br>[1165, 1182, 8]"]
346[Wall]
347[Wall]
348[Wall]
@ -445,7 +445,7 @@ flowchart LR
362["SweepEdge Adjacent"]
363["SweepEdge Adjacent"]
364["Plane<br>[488, 505, 7]"]
384["Sweep Revolve<br>[2247, 2297, 7]"]
384["Sweep Revolve<br>[2031, 2081, 7]"]
385[Wall]
386[Wall]
387[Wall]
@ -500,7 +500,7 @@ flowchart LR
436["SweepEdge Opposite"]
437["SweepEdge Adjacent"]
438["Plane<br>[464, 481, 9]"]
455["Sweep Revolve<br>[1490, 1519, 9]"]
455["Sweep Revolve<br>[1474, 1503, 9]"]
456[Wall]
457[Wall]
458[Wall]

View File

@ -2129,7 +2129,7 @@ description: Operations executed car-wheel-assembly.kcl
"name": "lug",
"functionSourceRange": [
669,
1280,
1272,
8
],
"unlabeledArg": null,

View File

@ -3,43 +3,43 @@ flowchart LR
subgraph path2 [Path]
2["Path<br>[631, 865, 0]"]
3["Segment<br>[875, 1008, 0]"]
4["Segment<br>[1018, 1109, 0]"]
5["Segment<br>[1119, 1174, 0]"]
6["Segment<br>[1184, 1275, 0]"]
7["Segment<br>[1285, 1340, 0]"]
8["Segment<br>[1350, 1406, 0]"]
9["Segment<br>[1416, 1424, 0]"]
4["Segment<br>[1018, 1070, 0]"]
5["Segment<br>[1080, 1127, 0]"]
6["Segment<br>[1137, 1189, 0]"]
7["Segment<br>[1199, 1246, 0]"]
8["Segment<br>[1256, 1321, 0]"]
9["Segment<br>[1331, 1339, 0]"]
10[Solid2d]
end
subgraph path11 [Path]
11["Path<br>[1439, 1489, 0]"]
12["Segment<br>[1439, 1489, 0]"]
11["Path<br>[1354, 1404, 0]"]
12["Segment<br>[1354, 1404, 0]"]
13[Solid2d]
end
subgraph path15 [Path]
15["Path<br>[631, 865, 0]"]
16["Segment<br>[875, 1008, 0]"]
17["Segment<br>[1018, 1109, 0]"]
18["Segment<br>[1119, 1174, 0]"]
19["Segment<br>[1184, 1275, 0]"]
20["Segment<br>[1285, 1340, 0]"]
21["Segment<br>[1350, 1406, 0]"]
22["Segment<br>[1416, 1424, 0]"]
17["Segment<br>[1018, 1070, 0]"]
18["Segment<br>[1080, 1127, 0]"]
19["Segment<br>[1137, 1189, 0]"]
20["Segment<br>[1199, 1246, 0]"]
21["Segment<br>[1256, 1321, 0]"]
22["Segment<br>[1331, 1339, 0]"]
23[Solid2d]
end
subgraph path24 [Path]
24["Path<br>[1439, 1489, 0]"]
25["Segment<br>[1439, 1489, 0]"]
24["Path<br>[1354, 1404, 0]"]
25["Segment<br>[1354, 1404, 0]"]
26[Solid2d]
end
subgraph path28 [Path]
28["Path<br>[631, 865, 0]"]
35["Segment<br>[1416, 1424, 0]"]
35["Segment<br>[1331, 1339, 0]"]
36[Solid2d]
end
subgraph path37 [Path]
37["Path<br>[1439, 1489, 0]"]
38["Segment<br>[1439, 1489, 0]"]
37["Path<br>[1354, 1404, 0]"]
38["Segment<br>[1354, 1404, 0]"]
39[Solid2d]
end
1["Plane<br>[587, 620, 0]"]
@ -51,7 +51,7 @@ flowchart LR
32["SweepEdge Opposite"]
33["SweepEdge Opposite"]
34["SweepEdge Opposite"]
40["Sweep Loft<br>[1619, 1708, 0]"]
40["Sweep Loft<br>[1534, 1623, 0]"]
41[Wall]
42[Wall]
43[Wall]

View File

@ -866,310 +866,433 @@ description: Result of parsing cycloidal-gear.kcl
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"properties": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"left": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"key": {
"name": {
"commentStart": 0,
"end": 0,
"name": "radius",
"name": "gearPitch",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "ObjectProperty",
"type": "Name",
"type": "Name"
},
"operator": "*",
"right": {
"commentStart": 0,
"end": 0,
"raw": "1.67",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.67,
"suffix": "None"
}
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
}
},
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"raw": "60",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 60.0,
"suffix": "None"
}
}
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"arg": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "gearPitch",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
},
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"argument": {
"commentStart": 0,
"end": 0,
"raw": "180",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 180.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"left": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"left": {
"name": "gearPitch",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"operator": "*",
"right": {
"commentStart": 0,
"end": 0,
"raw": "1.67",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.67,
"suffix": "None"
}
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
}
},
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"raw": "60",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 60.0,
"suffix": "None"
}
}
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"arg": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "gearPitch",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
},
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"argument": {
"commentStart": 0,
"end": 0,
"raw": "180",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 180.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "gearPitch",
"name": "profileStartX",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"operator": "*",
"right": {
"commentStart": 0,
"end": 0,
"raw": "1.67",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.67,
"suffix": "None"
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
}
},
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "offset",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"commentStart": 0,
"end": 0,
"raw": "60",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 60.0,
"suffix": "None"
}
}
}
],
"start": 0,
"type": "ObjectExpression",
"type": "ObjectExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"properties": [
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "gearPitch",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
},
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "offset",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"argument": {
"commentStart": 0,
"end": 0,
"raw": "180",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 180.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
}
],
"start": 0,
"type": "ObjectExpression",
"type": "ObjectExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"properties": [
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"commentStart": 0,
"end": 0,
"left": {
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "gearPitch",
"name": "profileStartY",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"operator": "*",
"right": {
"commentStart": 0,
"end": 0,
"raw": "1.67",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.67,
"suffix": "None"
}
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
}
},
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "offset",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"commentStart": 0,
"end": 0,
"raw": "60",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 60.0,
"suffix": "None"
}
"type": "CallExpression",
"type": "CallExpression"
}
}
],
"start": 0,
"type": "ObjectExpression",
"type": "ObjectExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -1190,212 +1313,9 @@ description: Result of parsing cycloidal-gear.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"properties": [
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "gearPitch",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
}
},
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "offset",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"argument": {
"commentStart": 0,
"end": 0,
"raw": "180",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 180.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
}
],
"start": 0,
"type": "ObjectExpression",
"type": "ObjectExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "profileStartX",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "profileStartY",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [

View File

@ -10,7 +10,7 @@ description: Operations executed cycloidal-gear.kcl
"name": "cycloidalGear",
"functionSourceRange": [
265,
1729,
1644,
0
],
"unlabeledArg": null,
@ -25,7 +25,7 @@ description: Operations executed cycloidal-gear.kcl
"name": "gearSketch",
"functionSourceRange": [
491,
1520,
1435,
0
],
"unlabeledArg": null,
@ -186,7 +186,7 @@ description: Operations executed cycloidal-gear.kcl
"name": "gearSketch",
"functionSourceRange": [
491,
1520,
1435,
0
],
"unlabeledArg": null,
@ -342,7 +342,7 @@ description: Operations executed cycloidal-gear.kcl
"name": "gearSketch",
"functionSourceRange": [
491,
1520,
1435,
0
],
"unlabeledArg": null,

View File

@ -102,14 +102,14 @@ flowchart LR
subgraph path276 [Path]
276["Path<br>[6877, 6927, 0]"]
277["Segment<br>[6933, 6970, 0]"]
278["Segment<br>[6976, 7060, 0]"]
279["Segment<br>[7066, 7102, 0]"]
280["Segment<br>[7108, 7200, 0]"]
281["Segment<br>[7206, 7242, 0]"]
278["Segment<br>[6976, 7069, 0]"]
279["Segment<br>[7075, 7111, 0]"]
280["Segment<br>[7117, 7218, 0]"]
281["Segment<br>[7224, 7260, 0]"]
end
subgraph path283 [Path]
283["Path<br>[7305, 7416, 0]"]
284["Segment<br>[7305, 7416, 0]"]
283["Path<br>[7323, 7434, 0]"]
284["Segment<br>[7323, 7434, 0]"]
285[Solid2d]
end
1["Plane<br>[565, 582, 0]"]
@ -310,8 +310,8 @@ flowchart LR
273["SweepEdge Adjacent"]
274["Sweep Extrusion<br>[6482, 6510, 0]"]
275["Plane<br>[6803, 6854, 0]"]
282["Plane<br>[7264, 7281, 0]"]
286["Sweep Sweep<br>[7430, 7483, 0]"]
282["Plane<br>[7282, 7299, 0]"]
286["Sweep Sweep<br>[7448, 7501, 0]"]
287[Wall]
288["Cap Start"]
289["Cap Start"]

View File

@ -10274,84 +10274,87 @@ description: Result of parsing dual-basin-utility-sink.kcl
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"left": {
"abs_path": false,
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"name": {
"left": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": "handleFillet",
"name": {
"commentStart": 0,
"end": 0,
"name": "handleFillet",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Identifier"
"type": "Name",
"type": "Name"
},
"operator": "+",
"right": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleOffset",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
"type": "BinaryExpression",
"type": "BinaryExpression"
},
"operator": "+",
"right": {
"abs_path": false,
{
"argument": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleDepth",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleOffset",
"start": 0,
"type": "Identifier"
},
"path": [],
"operator": "-",
"start": 0,
"type": "Name",
"type": "Name"
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
},
{
"argument": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleDepth",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
"type": "UnaryExpression",
"type": "UnaryExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -10361,7 +10364,7 @@ description: Result of parsing dual-basin-utility-sink.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -10372,8 +10375,9 @@ description: Result of parsing dual-basin-utility-sink.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
@ -10429,84 +10433,87 @@ description: Result of parsing dual-basin-utility-sink.kcl
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"left": {
"abs_path": false,
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"name": {
"left": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": "handleOffset",
"name": {
"commentStart": 0,
"end": 0,
"name": "handleOffset",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Identifier"
"type": "Name",
"type": "Name"
},
"operator": "+",
"right": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleWidth",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
"type": "BinaryExpression",
"type": "BinaryExpression"
},
"operator": "+",
"right": {
"abs_path": false,
{
"argument": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleLengthSegmentA",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleWidth",
"start": 0,
"type": "Identifier"
},
"path": [],
"operator": "-",
"start": 0,
"type": "Name",
"type": "Name"
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
},
{
"argument": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "handleLengthSegmentA",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
"type": "UnaryExpression",
"type": "UnaryExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -10516,7 +10523,7 @@ description: Result of parsing dual-basin-utility-sink.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -10527,8 +10534,9 @@ description: Result of parsing dual-basin-utility-sink.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [

View File

@ -3,170 +3,170 @@ flowchart LR
subgraph path2 [Path]
2["Path<br>[817, 852, 0]"]
3["Segment<br>[860, 886, 0]"]
4["Segment<br>[894, 957, 0]"]
5["Segment<br>[965, 1024, 0]"]
6["Segment<br>[1032, 1094, 0]"]
7["Segment<br>[1102, 1161, 0]"]
4["Segment<br>[894, 955, 0]"]
5["Segment<br>[963, 1022, 0]"]
6["Segment<br>[1030, 1090, 0]"]
7["Segment<br>[1098, 1157, 0]"]
end
subgraph path9 [Path]
9["Path<br>[1263, 1325, 0]"]
10["Segment<br>[1263, 1325, 0]"]
9["Path<br>[1259, 1321, 0]"]
10["Segment<br>[1259, 1321, 0]"]
11[Solid2d]
end
subgraph path12 [Path]
12["Path<br>[1338, 1416, 0]"]
13["Segment<br>[1338, 1416, 0]"]
12["Path<br>[1334, 1412, 0]"]
13["Segment<br>[1334, 1412, 0]"]
14[Solid2d]
end
subgraph path22 [Path]
22["Path<br>[817, 852, 0]"]
23["Segment<br>[860, 886, 0]"]
24["Segment<br>[894, 957, 0]"]
25["Segment<br>[965, 1024, 0]"]
26["Segment<br>[1032, 1094, 0]"]
27["Segment<br>[1102, 1161, 0]"]
24["Segment<br>[894, 955, 0]"]
25["Segment<br>[963, 1022, 0]"]
26["Segment<br>[1030, 1090, 0]"]
27["Segment<br>[1098, 1157, 0]"]
end
subgraph path29 [Path]
29["Path<br>[1263, 1325, 0]"]
30["Segment<br>[1263, 1325, 0]"]
29["Path<br>[1259, 1321, 0]"]
30["Segment<br>[1259, 1321, 0]"]
31[Solid2d]
end
subgraph path32 [Path]
32["Path<br>[1338, 1416, 0]"]
33["Segment<br>[1338, 1416, 0]"]
32["Path<br>[1334, 1412, 0]"]
33["Segment<br>[1334, 1412, 0]"]
34[Solid2d]
end
subgraph path42 [Path]
42["Path<br>[817, 852, 0]"]
43["Segment<br>[860, 886, 0]"]
44["Segment<br>[894, 957, 0]"]
45["Segment<br>[965, 1024, 0]"]
46["Segment<br>[1032, 1094, 0]"]
47["Segment<br>[1102, 1161, 0]"]
44["Segment<br>[894, 955, 0]"]
45["Segment<br>[963, 1022, 0]"]
46["Segment<br>[1030, 1090, 0]"]
47["Segment<br>[1098, 1157, 0]"]
end
subgraph path49 [Path]
49["Path<br>[1263, 1325, 0]"]
50["Segment<br>[1263, 1325, 0]"]
49["Path<br>[1259, 1321, 0]"]
50["Segment<br>[1259, 1321, 0]"]
51[Solid2d]
end
subgraph path52 [Path]
52["Path<br>[1338, 1416, 0]"]
53["Segment<br>[1338, 1416, 0]"]
52["Path<br>[1334, 1412, 0]"]
53["Segment<br>[1334, 1412, 0]"]
54[Solid2d]
end
subgraph path62 [Path]
62["Path<br>[817, 852, 0]"]
63["Segment<br>[860, 886, 0]"]
64["Segment<br>[894, 957, 0]"]
65["Segment<br>[965, 1024, 0]"]
66["Segment<br>[1032, 1094, 0]"]
67["Segment<br>[1102, 1161, 0]"]
64["Segment<br>[894, 955, 0]"]
65["Segment<br>[963, 1022, 0]"]
66["Segment<br>[1030, 1090, 0]"]
67["Segment<br>[1098, 1157, 0]"]
end
subgraph path69 [Path]
69["Path<br>[1263, 1325, 0]"]
70["Segment<br>[1263, 1325, 0]"]
69["Path<br>[1259, 1321, 0]"]
70["Segment<br>[1259, 1321, 0]"]
71[Solid2d]
end
subgraph path72 [Path]
72["Path<br>[1338, 1416, 0]"]
73["Segment<br>[1338, 1416, 0]"]
72["Path<br>[1334, 1412, 0]"]
73["Segment<br>[1334, 1412, 0]"]
74[Solid2d]
end
subgraph path82 [Path]
82["Path<br>[1743, 1778, 0]"]
83["Segment<br>[1784, 1818, 0]"]
84["Segment<br>[1824, 1871, 0]"]
85["Segment<br>[1877, 1923, 0]"]
86["Segment<br>[1929, 1976, 0]"]
87["Segment<br>[1982, 2016, 0]"]
88["Segment<br>[2022, 2065, 0]"]
89["Segment<br>[2071, 2104, 0]"]
90["Segment<br>[2110, 2157, 0]"]
91["Segment<br>[2163, 2210, 0]"]
92["Segment<br>[2216, 2263, 0]"]
93["Segment<br>[2269, 2312, 0]"]
94["Segment<br>[2318, 2369, 0]"]
95["Segment<br>[2375, 2419, 0]"]
96["Segment<br>[2425, 2472, 0]"]
97["Segment<br>[2478, 2524, 0]"]
98["Segment<br>[2530, 2586, 0]"]
99["Segment<br>[2592, 2599, 0]"]
82["Path<br>[1739, 1774, 0]"]
83["Segment<br>[1780, 1814, 0]"]
84["Segment<br>[1820, 1859, 0]"]
85["Segment<br>[1865, 1903, 0]"]
86["Segment<br>[1909, 1948, 0]"]
87["Segment<br>[1954, 1988, 0]"]
88["Segment<br>[1994, 2037, 0]"]
89["Segment<br>[2043, 2076, 0]"]
90["Segment<br>[2082, 2121, 0]"]
91["Segment<br>[2127, 2166, 0]"]
92["Segment<br>[2172, 2211, 0]"]
93["Segment<br>[2217, 2260, 0]"]
94["Segment<br>[2266, 2317, 0]"]
95["Segment<br>[2323, 2367, 0]"]
96["Segment<br>[2373, 2412, 0]"]
97["Segment<br>[2418, 2456, 0]"]
98["Segment<br>[2462, 2527, 0]"]
99["Segment<br>[2533, 2540, 0]"]
100[Solid2d]
end
subgraph path101 [Path]
101["Path<br>[2671, 2744, 0]"]
102["Segment<br>[2671, 2744, 0]"]
101["Path<br>[2612, 2685, 0]"]
102["Segment<br>[2612, 2685, 0]"]
103[Solid2d]
end
subgraph path104 [Path]
104["Path<br>[2759, 2832, 0]"]
105["Segment<br>[2759, 2832, 0]"]
104["Path<br>[2700, 2773, 0]"]
105["Segment<br>[2700, 2773, 0]"]
106[Solid2d]
end
subgraph path107 [Path]
107["Path<br>[2847, 2920, 0]"]
108["Segment<br>[2847, 2920, 0]"]
107["Path<br>[2788, 2861, 0]"]
108["Segment<br>[2788, 2861, 0]"]
109[Solid2d]
end
subgraph path110 [Path]
110["Path<br>[2935, 3008, 0]"]
111["Segment<br>[2935, 3008, 0]"]
110["Path<br>[2876, 2949, 0]"]
111["Segment<br>[2876, 2949, 0]"]
112[Solid2d]
end
subgraph path113 [Path]
113["Path<br>[3062, 3201, 0]"]
114["Segment<br>[3062, 3201, 0]"]
113["Path<br>[3003, 3142, 0]"]
114["Segment<br>[3003, 3142, 0]"]
115[Solid2d]
end
subgraph path116 [Path]
116["Path<br>[3216, 3353, 0]"]
117["Segment<br>[3216, 3353, 0]"]
116["Path<br>[3157, 3294, 0]"]
117["Segment<br>[3157, 3294, 0]"]
118[Solid2d]
end
subgraph path119 [Path]
119["Path<br>[3368, 3515, 0]"]
120["Segment<br>[3368, 3515, 0]"]
119["Path<br>[3309, 3456, 0]"]
120["Segment<br>[3309, 3456, 0]"]
121[Solid2d]
end
subgraph path122 [Path]
122["Path<br>[3530, 3676, 0]"]
123["Segment<br>[3530, 3676, 0]"]
122["Path<br>[3471, 3617, 0]"]
123["Segment<br>[3471, 3617, 0]"]
124[Solid2d]
end
1["Plane<br>[784, 809, 0]"]
8["Plane<br>[1238, 1255, 0]"]
15["Sweep Sweep<br>[1428, 1451, 0]"]
8["Plane<br>[1234, 1251, 0]"]
15["Sweep Sweep<br>[1424, 1447, 0]"]
16[Wall]
17["Cap Start"]
18["Cap End"]
19["SweepEdge Opposite"]
20["SweepEdge Adjacent"]
21["Plane<br>[784, 809, 0]"]
28["Plane<br>[1238, 1255, 0]"]
35["Sweep Sweep<br>[1428, 1451, 0]"]
28["Plane<br>[1234, 1251, 0]"]
35["Sweep Sweep<br>[1424, 1447, 0]"]
36[Wall]
37["Cap Start"]
38["Cap End"]
39["SweepEdge Opposite"]
40["SweepEdge Adjacent"]
41["Plane<br>[784, 809, 0]"]
48["Plane<br>[1238, 1255, 0]"]
55["Sweep Sweep<br>[1428, 1451, 0]"]
48["Plane<br>[1234, 1251, 0]"]
55["Sweep Sweep<br>[1424, 1447, 0]"]
56[Wall]
57["Cap Start"]
58["Cap End"]
59["SweepEdge Opposite"]
60["SweepEdge Adjacent"]
61["Plane<br>[784, 809, 0]"]
68["Plane<br>[1238, 1255, 0]"]
75["Sweep Sweep<br>[1428, 1451, 0]"]
68["Plane<br>[1234, 1251, 0]"]
75["Sweep Sweep<br>[1424, 1447, 0]"]
76[Wall]
77["Cap Start"]
78["Cap End"]
79["SweepEdge Opposite"]
80["SweepEdge Adjacent"]
81["Plane<br>[1720, 1737, 0]"]
125["Sweep Extrusion<br>[3732, 3761, 0]"]
81["Plane<br>[1716, 1733, 0]"]
125["Sweep Extrusion<br>[3673, 3702, 0]"]
126[Wall]
127[Wall]
128[Wall]
@ -217,10 +217,10 @@ flowchart LR
173["SweepEdge Adjacent"]
174["SweepEdge Opposite"]
175["SweepEdge Adjacent"]
176["EdgeCut Fillet<br>[3767, 3901, 0]"]
177["EdgeCut Fillet<br>[3767, 3901, 0]"]
178["EdgeCut Fillet<br>[3907, 4041, 0]"]
179["EdgeCut Fillet<br>[3907, 4041, 0]"]
176["EdgeCut Fillet<br>[3708, 3842, 0]"]
177["EdgeCut Fillet<br>[3708, 3842, 0]"]
178["EdgeCut Fillet<br>[3848, 3982, 0]"]
179["EdgeCut Fillet<br>[3848, 3982, 0]"]
1 --- 2
2 --- 3
2 --- 4

File diff suppressed because it is too large Load Diff

View File

@ -10,7 +10,7 @@ description: Operations executed exhaust-manifold.kcl
"name": "primaryTube",
"functionSourceRange": [
330,
1468,
1464,
0
],
"unlabeledArg": null,
@ -317,7 +317,7 @@ description: Operations executed exhaust-manifold.kcl
"name": "primaryTube",
"functionSourceRange": [
330,
1468,
1464,
0
],
"unlabeledArg": null,
@ -624,7 +624,7 @@ description: Operations executed exhaust-manifold.kcl
"name": "primaryTube",
"functionSourceRange": [
330,
1468,
1464,
0
],
"unlabeledArg": null,
@ -931,7 +931,7 @@ description: Operations executed exhaust-manifold.kcl
"name": "primaryTube",
"functionSourceRange": [
330,
1468,
1464,
0
],
"unlabeledArg": null,

View File

@ -28,9 +28,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 1811,
"end": 1817,
"start": 1811,
"commentStart": 1807,
"end": 1813,
"start": 1807,
"type": "TagDeclarator",
"value": "seg01"
},
@ -62,9 +62,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2009,
"end": 2015,
"start": 2009,
"commentStart": 1981,
"end": 1987,
"start": 1981,
"type": "TagDeclarator",
"value": "seg03"
},
@ -75,9 +75,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2058,
"end": 2064,
"start": 2058,
"commentStart": 2030,
"end": 2036,
"start": 2030,
"type": "TagDeclarator",
"value": "seg04"
},
@ -88,9 +88,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2097,
"end": 2103,
"start": 2097,
"commentStart": 2069,
"end": 2075,
"start": 2069,
"type": "TagDeclarator",
"value": "seg05"
},
@ -122,9 +122,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2305,
"end": 2311,
"start": 2305,
"commentStart": 2253,
"end": 2259,
"start": 2253,
"type": "TagDeclarator",
"value": "seg07"
},
@ -135,9 +135,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2362,
"end": 2368,
"start": 2362,
"commentStart": 2310,
"end": 2316,
"start": 2310,
"type": "TagDeclarator",
"value": "seg08"
},
@ -148,9 +148,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2412,
"end": 2418,
"start": 2412,
"commentStart": 2360,
"end": 2366,
"start": 2360,
"type": "TagDeclarator",
"value": "seg09"
},
@ -192,9 +192,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.25
],
"tag": {
"commentStart": 1811,
"end": 1817,
"start": 1811,
"commentStart": 1807,
"end": 1813,
"start": 1807,
"type": "TagDeclarator",
"value": "seg01"
},
@ -289,9 +289,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.25
],
"tag": {
"commentStart": 2009,
"end": 2015,
"start": 2009,
"commentStart": 1981,
"end": 1987,
"start": 1981,
"type": "TagDeclarator",
"value": "seg03"
},
@ -314,9 +314,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.25
],
"tag": {
"commentStart": 2058,
"end": 2064,
"start": 2058,
"commentStart": 2030,
"end": 2036,
"start": 2030,
"type": "TagDeclarator",
"value": "seg04"
},
@ -339,9 +339,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
1.35
],
"tag": {
"commentStart": 2097,
"end": 2103,
"start": 2097,
"commentStart": 2069,
"end": 2075,
"start": 2069,
"type": "TagDeclarator",
"value": "seg05"
},
@ -436,9 +436,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
1.35
],
"tag": {
"commentStart": 2305,
"end": 2311,
"start": 2305,
"commentStart": 2253,
"end": 2259,
"start": 2253,
"type": "TagDeclarator",
"value": "seg07"
},
@ -461,9 +461,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
1.35
],
"tag": {
"commentStart": 2362,
"end": 2368,
"start": 2362,
"commentStart": 2310,
"end": 2316,
"start": 2310,
"type": "TagDeclarator",
"value": "seg08"
},
@ -486,9 +486,9 @@ description: Variables in memory after executing exhaust-manifold.kcl
-1.25
],
"tag": {
"commentStart": 2412,
"end": 2418,
"start": 2412,
"commentStart": 2360,
"end": 2366,
"start": 2360,
"type": "TagDeclarator",
"value": "seg09"
},

View File

@ -1,76 +1,76 @@
```mermaid
flowchart LR
subgraph path2 [Path]
2["Path<br>[1444, 1498, 0]"]
3["Segment<br>[1504, 1536, 0]"]
4["Segment<br>[1542, 1579, 0]"]
5["Segment<br>[1585, 1618, 0]"]
6["Segment<br>[1624, 1724, 0]"]
7["Segment<br>[1730, 1737, 0]"]
2["Path<br>[1445, 1499, 0]"]
3["Segment<br>[1505, 1537, 0]"]
4["Segment<br>[1543, 1580, 0]"]
5["Segment<br>[1586, 1619, 0]"]
6["Segment<br>[1625, 1725, 0]"]
7["Segment<br>[1731, 1738, 0]"]
8[Solid2d]
end
subgraph path9 [Path]
9["Path<br>[1001, 1042, 0]"]
10["Segment<br>[1050, 1090, 0]"]
11["Segment<br>[1098, 1152, 0]"]
12["Segment<br>[1160, 1201, 0]"]
13["Segment<br>[1209, 1265, 0]"]
14["Segment<br>[1273, 1280, 0]"]
11["Segment<br>[1098, 1144, 0]"]
12["Segment<br>[1152, 1193, 0]"]
13["Segment<br>[1201, 1266, 0]"]
14["Segment<br>[1274, 1281, 0]"]
15[Solid2d]
end
subgraph path16 [Path]
16["Path<br>[1001, 1042, 0]"]
17["Segment<br>[1050, 1090, 0]"]
18["Segment<br>[1098, 1152, 0]"]
19["Segment<br>[1160, 1201, 0]"]
20["Segment<br>[1209, 1265, 0]"]
21["Segment<br>[1273, 1280, 0]"]
18["Segment<br>[1098, 1144, 0]"]
19["Segment<br>[1152, 1193, 0]"]
20["Segment<br>[1201, 1266, 0]"]
21["Segment<br>[1274, 1281, 0]"]
22[Solid2d]
end
subgraph path23 [Path]
23["Path<br>[1001, 1042, 0]"]
24["Segment<br>[1050, 1090, 0]"]
25["Segment<br>[1098, 1152, 0]"]
26["Segment<br>[1160, 1201, 0]"]
27["Segment<br>[1209, 1265, 0]"]
28["Segment<br>[1273, 1280, 0]"]
25["Segment<br>[1098, 1144, 0]"]
26["Segment<br>[1152, 1193, 0]"]
27["Segment<br>[1201, 1266, 0]"]
28["Segment<br>[1274, 1281, 0]"]
29[Solid2d]
end
subgraph path49 [Path]
49["Path<br>[2740, 2793, 0]"]
50["Segment<br>[2799, 2858, 0]"]
51["Segment<br>[2864, 2899, 0]"]
52["Segment<br>[2905, 2938, 0]"]
53["Segment<br>[2944, 3003, 0]"]
54["Segment<br>[3009, 3045, 0]"]
55["Segment<br>[3051, 3075, 0]"]
56["Segment<br>[3081, 3088, 0]"]
49["Path<br>[2741, 2794, 0]"]
50["Segment<br>[2800, 2859, 0]"]
51["Segment<br>[2865, 2900, 0]"]
52["Segment<br>[2906, 2939, 0]"]
53["Segment<br>[2945, 3004, 0]"]
54["Segment<br>[3010, 3046, 0]"]
55["Segment<br>[3052, 3076, 0]"]
56["Segment<br>[3082, 3089, 0]"]
57[Solid2d]
end
subgraph path83 [Path]
83["Path<br>[3707, 3754, 0]"]
84["Segment<br>[3760, 3810, 0]"]
85["Segment<br>[3816, 3915, 0]"]
86["Segment<br>[3921, 3972, 0]"]
87["Segment<br>[3978, 4076, 0]"]
88["Segment<br>[4082, 4135, 0]"]
89["Segment<br>[4141, 4241, 0]"]
90["Segment<br>[4247, 4321, 0]"]
91["Segment<br>[4327, 4428, 0]"]
92["Segment<br>[4434, 4441, 0]"]
83["Path<br>[3708, 3755, 0]"]
84["Segment<br>[3761, 3811, 0]"]
85["Segment<br>[3817, 3916, 0]"]
86["Segment<br>[3922, 3973, 0]"]
87["Segment<br>[3979, 4077, 0]"]
88["Segment<br>[4083, 4136, 0]"]
89["Segment<br>[4142, 4242, 0]"]
90["Segment<br>[4248, 4322, 0]"]
91["Segment<br>[4328, 4429, 0]"]
92["Segment<br>[4435, 4442, 0]"]
93[Solid2d]
end
subgraph path121 [Path]
121["Path<br>[1001, 1042, 0]"]
122["Segment<br>[1050, 1090, 0]"]
123["Segment<br>[1098, 1152, 0]"]
124["Segment<br>[1160, 1201, 0]"]
125["Segment<br>[1209, 1265, 0]"]
126["Segment<br>[1273, 1280, 0]"]
123["Segment<br>[1098, 1144, 0]"]
124["Segment<br>[1152, 1193, 0]"]
125["Segment<br>[1201, 1266, 0]"]
126["Segment<br>[1274, 1281, 0]"]
127[Solid2d]
end
1["Plane<br>[1373, 1390, 0]"]
30["Sweep Extrusion<br>[2312, 2362, 0]"]
1["Plane<br>[1374, 1391, 0]"]
30["Sweep Extrusion<br>[2313, 2363, 0]"]
31[Wall]
32[Wall]
33[Wall]
@ -88,8 +88,8 @@ flowchart LR
45["SweepEdge Adjacent"]
46["SweepEdge Opposite"]
47["SweepEdge Adjacent"]
48["Plane<br>[2637, 2679, 0]"]
58["Sweep Extrusion<br>[3122, 3166, 0]"]
48["Plane<br>[2638, 2680, 0]"]
58["Sweep Extrusion<br>[3123, 3167, 0]"]
59[Wall]
60[Wall]
61[Wall]
@ -113,8 +113,8 @@ flowchart LR
79["SweepEdge Adjacent"]
80["SweepEdge Opposite"]
81["SweepEdge Adjacent"]
82["Plane<br>[3633, 3659, 0]"]
94["Sweep Extrusion<br>[4497, 4539, 0]"]
82["Plane<br>[3634, 3660, 0]"]
94["Sweep Extrusion<br>[4498, 4540, 0]"]
95[Wall]
96[Wall]
97[Wall]
@ -141,7 +141,7 @@ flowchart LR
118["SweepEdge Adjacent"]
119["SweepEdge Opposite"]
120["SweepEdge Adjacent"]
128["Sweep Extrusion<br>[4767, 4817, 0]"]
128["Sweep Extrusion<br>[4768, 4818, 0]"]
129[Wall]
130[Wall]
131[Wall]
@ -154,12 +154,12 @@ flowchart LR
138["SweepEdge Adjacent"]
139["SweepEdge Opposite"]
140["SweepEdge Adjacent"]
141["EdgeCut Fillet<br>[2399, 2540, 0]"]
142["EdgeCut Fillet<br>[2399, 2540, 0]"]
143["EdgeCut Fillet<br>[3209, 3340, 0]"]
144["EdgeCut Fillet<br>[3209, 3340, 0]"]
145["StartSketchOnPlane<br>[2623, 2680, 0]"]
146["StartSketchOnFace<br>[4598, 4630, 0]"]
141["EdgeCut Fillet<br>[2400, 2541, 0]"]
142["EdgeCut Fillet<br>[2400, 2541, 0]"]
143["EdgeCut Fillet<br>[3210, 3341, 0]"]
144["EdgeCut Fillet<br>[3210, 3341, 0]"]
145["StartSketchOnPlane<br>[2624, 2681, 0]"]
146["StartSketchOnFace<br>[4599, 4631, 0]"]
1 --- 2
1 --- 9
1 --- 16

View File

@ -1887,94 +1887,72 @@ description: Result of parsing food-service-spatula.kcl
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"properties": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"left": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"key": {
"name": {
"commentStart": 0,
"end": 0,
"name": "radius",
"name": "width",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "ObjectProperty",
"type": "Name",
"type": "Name"
},
"operator": "/",
"right": {
"commentStart": 0,
"end": 0,
"raw": "2",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"commentStart": 0,
"end": 0,
"left": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "width",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name",
"type": "Name"
},
"operator": "/",
"right": {
"commentStart": 0,
"end": 0,
"raw": "2",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 2.0,
"suffix": "None"
}
},
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
"value": 2.0,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "offset",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"commentStart": 0,
"end": 0,
"raw": "180",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 180.0,
"suffix": "None"
}
}
}
],
"start": 0,
"type": "ObjectExpression",
"type": "ObjectExpression"
"start": 0,
"type": "BinaryExpression",
"type": "BinaryExpression"
}
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"raw": "180",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 180.0,
"suffix": "None"
}
}
}
],
"callee": {
@ -1995,8 +1973,9 @@ description: Result of parsing food-service-spatula.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
@ -2086,82 +2065,85 @@ description: Result of parsing food-service-spatula.kcl
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"arguments": [
{
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "profileStartX",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "profileStartX",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
"type": "CallExpression",
"type": "CallExpression"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
},
{
"arguments": [
{
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "profileStartY",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
}
],
"callee": {
"abs_path": false,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"name": {
"commentStart": 0,
"end": 0,
"name": "profileStartY",
"start": 0,
"type": "Identifier"
},
"path": [],
"start": 0,
"type": "Name"
},
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
"type": "CallExpression",
"type": "CallExpression"
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -2171,7 +2153,7 @@ description: Result of parsing food-service-spatula.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -2182,8 +2164,9 @@ description: Result of parsing food-service-spatula.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [],

View File

@ -25,7 +25,7 @@ description: Operations executed food-service-spatula.kcl
"name": "slot",
"functionSourceRange": [
462,
1302,
1303,
0
],
"unlabeledArg": null,
@ -79,7 +79,7 @@ description: Operations executed food-service-spatula.kcl
"name": "slot",
"functionSourceRange": [
462,
1302,
1303,
0
],
"unlabeledArg": null,
@ -133,7 +133,7 @@ description: Operations executed food-service-spatula.kcl
"name": "slot",
"functionSourceRange": [
462,
1302,
1303,
0
],
"unlabeledArg": null,
@ -719,7 +719,7 @@ description: Operations executed food-service-spatula.kcl
"name": "slot",
"functionSourceRange": [
462,
1302,
1303,
0
],
"unlabeledArg": null,

View File

@ -27,9 +27,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 1569,
"end": 1578,
"start": 1569,
"commentStart": 1570,
"end": 1579,
"start": 1570,
"type": "TagDeclarator",
"value": "backEdge"
},
@ -90,9 +90,9 @@ description: Variables in memory after executing food-service-spatula.kcl
-30.0
],
"tag": {
"commentStart": 1569,
"end": 1578,
"start": 1569,
"commentStart": 1570,
"end": 1579,
"start": 1570,
"type": "TagDeclarator",
"value": "backEdge"
},
@ -297,9 +297,9 @@ description: Variables in memory after executing food-service-spatula.kcl
-30.0
],
"tag": {
"commentStart": 1569,
"end": 1578,
"start": 1569,
"commentStart": 1570,
"end": 1579,
"start": 1570,
"type": "TagDeclarator",
"value": "backEdge"
},
@ -547,9 +547,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -709,9 +709,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0
],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -1051,9 +1051,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -1213,9 +1213,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0
],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -1529,9 +1529,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0
],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -1718,9 +1718,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2840,
"end": 2857,
"start": 2840,
"commentStart": 2841,
"end": 2858,
"start": 2841,
"type": "TagDeclarator",
"value": "handleBottomEdge"
},
@ -1745,9 +1745,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 2988,
"end": 3002,
"start": 2988,
"commentStart": 2989,
"end": 3003,
"start": 2989,
"type": "TagDeclarator",
"value": "handleTopEdge"
},
@ -1789,9 +1789,9 @@ description: Variables in memory after executing food-service-spatula.kcl
3.5
],
"tag": {
"commentStart": 2840,
"end": 2857,
"start": 2840,
"commentStart": 2841,
"end": 2858,
"start": 2841,
"type": "TagDeclarator",
"value": "handleBottomEdge"
},
@ -1852,9 +1852,9 @@ description: Variables in memory after executing food-service-spatula.kcl
91.3213
],
"tag": {
"commentStart": 2988,
"end": 3002,
"start": 2988,
"commentStart": 2989,
"end": 3003,
"start": 2989,
"type": "TagDeclarator",
"value": "handleTopEdge"
},
@ -2203,9 +2203,9 @@ description: Variables in memory after executing food-service-spatula.kcl
3.5
],
"tag": {
"commentStart": 2840,
"end": 2857,
"start": 2840,
"commentStart": 2841,
"end": 2858,
"start": 2841,
"type": "TagDeclarator",
"value": "handleBottomEdge"
},
@ -2266,9 +2266,9 @@ description: Variables in memory after executing food-service-spatula.kcl
91.3213
],
"tag": {
"commentStart": 2988,
"end": 3002,
"start": 2988,
"commentStart": 2989,
"end": 3003,
"start": 2989,
"type": "TagDeclarator",
"value": "handleTopEdge"
},
@ -2525,9 +2525,9 @@ description: Variables in memory after executing food-service-spatula.kcl
"id": "[uuid]",
"sourceRange": [],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -2687,9 +2687,9 @@ description: Variables in memory after executing food-service-spatula.kcl
7.0
],
"tag": {
"commentStart": 4308,
"end": 4320,
"start": 4308,
"commentStart": 4309,
"end": 4321,
"start": 4309,
"type": "TagDeclarator",
"value": "gripEdgeTop"
},
@ -3354,9 +3354,9 @@ description: Variables in memory after executing food-service-spatula.kcl
-30.0
],
"tag": {
"commentStart": 1569,
"end": 1578,
"start": 1569,
"commentStart": 1570,
"end": 1579,
"start": 1570,
"type": "TagDeclarator",
"value": "backEdge"
},

View File

@ -61,63 +61,63 @@ flowchart LR
143["Segment<br>[3558, 3576, 0]"]
144["Segment<br>[3582, 3602, 0]"]
145["Segment<br>[3608, 3628, 0]"]
146["Segment<br>[3634, 3682, 0]"]
147["Segment<br>[3688, 3744, 0]"]
148["Segment<br>[3750, 3757, 0]"]
146["Segment<br>[3634, 3674, 0]"]
147["Segment<br>[3680, 3736, 0]"]
148["Segment<br>[3742, 3749, 0]"]
149[Solid2d]
end
subgraph path166 [Path]
166["Path<br>[3861, 3920, 0]"]
167["Segment<br>[3861, 3920, 0]"]
166["Path<br>[3853, 3912, 0]"]
167["Segment<br>[3853, 3912, 0]"]
168[Solid2d]
end
subgraph path169 [Path]
169["Path<br>[3931, 3968, 0]"]
170["Segment<br>[3931, 3968, 0]"]
169["Path<br>[3923, 3960, 0]"]
170["Segment<br>[3923, 3960, 0]"]
171[Solid2d]
end
subgraph path178 [Path]
178["Path<br>[4110, 4148, 0]"]
179["Segment<br>[4110, 4148, 0]"]
178["Path<br>[4102, 4140, 0]"]
179["Segment<br>[4102, 4140, 0]"]
180[Solid2d]
end
subgraph path192 [Path]
192["Path<br>[4421, 4459, 0]"]
193["Segment<br>[4421, 4459, 0]"]
192["Path<br>[4413, 4451, 0]"]
193["Segment<br>[4413, 4451, 0]"]
194[Solid2d]
end
subgraph path203 [Path]
203["Path<br>[4711, 4763, 0]"]
204["Segment<br>[4711, 4763, 0]"]
203["Path<br>[4703, 4755, 0]"]
204["Segment<br>[4703, 4755, 0]"]
205[Solid2d]
end
subgraph path213 [Path]
213["Path<br>[5010, 5054, 0]"]
214["Segment<br>[5060, 5100, 0]"]
215["Segment<br>[5106, 5125, 0]"]
216["Segment<br>[5131, 5150, 0]"]
217["Segment<br>[5156, 5175, 0]"]
218["Segment<br>[5181, 5206, 0]"]
219["Segment<br>[5212, 5352, 0]"]
220["Segment<br>[5358, 5414, 0]"]
221["Segment<br>[5420, 5427, 0]"]
213["Path<br>[5002, 5046, 0]"]
214["Segment<br>[5052, 5092, 0]"]
215["Segment<br>[5098, 5117, 0]"]
216["Segment<br>[5123, 5142, 0]"]
217["Segment<br>[5148, 5167, 0]"]
218["Segment<br>[5173, 5198, 0]"]
219["Segment<br>[5204, 5344, 0]"]
220["Segment<br>[5350, 5406, 0]"]
221["Segment<br>[5412, 5419, 0]"]
222[Solid2d]
end
subgraph path239 [Path]
239["Path<br>[5557, 5586, 0]"]
240["Segment<br>[5592, 5613, 0]"]
241["Segment<br>[5619, 5650, 0]"]
242["Segment<br>[5656, 5687, 0]"]
243["Segment<br>[5693, 5725, 0]"]
244["Segment<br>[5731, 5753, 0]"]
245["Segment<br>[5759, 5780, 0]"]
246["Segment<br>[5786, 5811, 0]"]
247["Segment<br>[5817, 5848, 0]"]
248["Segment<br>[5854, 5886, 0]"]
249["Segment<br>[5892, 5924, 0]"]
250["Segment<br>[5930, 5951, 0]"]
251["Segment<br>[5957, 6013, 0]"]
252["Segment<br>[6019, 6026, 0]"]
239["Path<br>[5549, 5578, 0]"]
240["Segment<br>[5584, 5605, 0]"]
241["Segment<br>[5611, 5651, 0]"]
242["Segment<br>[5657, 5697, 0]"]
243["Segment<br>[5703, 5744, 0]"]
244["Segment<br>[5750, 5772, 0]"]
245["Segment<br>[5778, 5799, 0]"]
246["Segment<br>[5805, 5830, 0]"]
247["Segment<br>[5836, 5876, 0]"]
248["Segment<br>[5882, 5923, 0]"]
249["Segment<br>[5929, 5970, 0]"]
250["Segment<br>[5976, 5997, 0]"]
251["Segment<br>[6003, 6059, 0]"]
252["Segment<br>[6065, 6072, 0]"]
253[Solid2d]
end
1["Plane<br>[242, 259, 0]"]
@ -215,7 +215,7 @@ flowchart LR
137["SweepEdge Adjacent"]
138["SweepEdge Adjacent"]
139["Plane<br>[3427, 3444, 0]"]
150["Sweep Revolve<br>[3763, 3780, 0]"]
150["Sweep Revolve<br>[3755, 3772, 0]"]
151[Wall]
152[Wall]
153[Wall]
@ -230,40 +230,40 @@ flowchart LR
162["SweepEdge Adjacent"]
163["SweepEdge Adjacent"]
164["SweepEdge Adjacent"]
165["Plane<br>[3824, 3854, 0]"]
172["Sweep Extrusion<br>[3987, 4021, 0]"]
165["Plane<br>[3816, 3846, 0]"]
172["Sweep Extrusion<br>[3979, 4013, 0]"]
173[Wall]
174["Cap Start"]
175["Cap End"]
176["SweepEdge Opposite"]
177["SweepEdge Adjacent"]
181["Sweep Extrusion<br>[4297, 4332, 0]"]
181["Sweep Extrusion<br>[4289, 4324, 0]"]
182[Wall]
183["SweepEdge Opposite"]
184["SweepEdge Adjacent"]
185["Sweep Extrusion<br>[4297, 4332, 0]"]
186["Sweep Extrusion<br>[4297, 4332, 0]"]
187["Sweep Extrusion<br>[4297, 4332, 0]"]
188["Sweep Extrusion<br>[4297, 4332, 0]"]
189["Sweep Extrusion<br>[4297, 4332, 0]"]
190["Sweep Extrusion<br>[4297, 4332, 0]"]
191["Sweep Extrusion<br>[4297, 4332, 0]"]
195["Sweep Extrusion<br>[4608, 4643, 0]"]
185["Sweep Extrusion<br>[4289, 4324, 0]"]
186["Sweep Extrusion<br>[4289, 4324, 0]"]
187["Sweep Extrusion<br>[4289, 4324, 0]"]
188["Sweep Extrusion<br>[4289, 4324, 0]"]
189["Sweep Extrusion<br>[4289, 4324, 0]"]
190["Sweep Extrusion<br>[4289, 4324, 0]"]
191["Sweep Extrusion<br>[4289, 4324, 0]"]
195["Sweep Extrusion<br>[4600, 4635, 0]"]
196[Wall]
197["SweepEdge Opposite"]
198["SweepEdge Adjacent"]
199["Sweep Extrusion<br>[4608, 4643, 0]"]
200["Sweep Extrusion<br>[4608, 4643, 0]"]
201["Sweep Extrusion<br>[4608, 4643, 0]"]
202["Plane<br>[4688, 4705, 0]"]
206["Sweep Extrusion<br>[4859, 4900, 0]"]
199["Sweep Extrusion<br>[4600, 4635, 0]"]
200["Sweep Extrusion<br>[4600, 4635, 0]"]
201["Sweep Extrusion<br>[4600, 4635, 0]"]
202["Plane<br>[4680, 4697, 0]"]
206["Sweep Extrusion<br>[4851, 4892, 0]"]
207[Wall]
208["Cap Start"]
209["Cap End"]
210["SweepEdge Opposite"]
211["SweepEdge Adjacent"]
212["Plane<br>[4987, 5004, 0]"]
223["Sweep Revolve<br>[5433, 5450, 0]"]
212["Plane<br>[4979, 4996, 0]"]
223["Sweep Revolve<br>[5425, 5442, 0]"]
224[Wall]
225[Wall]
226[Wall]
@ -278,8 +278,8 @@ flowchart LR
235["SweepEdge Adjacent"]
236["SweepEdge Adjacent"]
237["SweepEdge Adjacent"]
238["Plane<br>[5505, 5550, 0]"]
254["Sweep Extrusion<br>[6040, 6085, 0]"]
238["Plane<br>[5497, 5542, 0]"]
254["Sweep Extrusion<br>[6086, 6131, 0]"]
255[Wall]
256[Wall]
257[Wall]
@ -320,10 +320,10 @@ flowchart LR
292["SweepEdge Adjacent"]
293["StartSketchOnPlane<br>[2337, 2379, 0]"]
294["StartSketchOnFace<br>[2507, 2539, 0]"]
295["StartSketchOnPlane<br>[3810, 3855, 0]"]
296["StartSketchOnFace<br>[4072, 4104, 0]"]
297["StartSketchOnFace<br>[4383, 4415, 0]"]
298["StartSketchOnPlane<br>[5491, 5551, 0]"]
295["StartSketchOnPlane<br>[3802, 3847, 0]"]
296["StartSketchOnFace<br>[4064, 4096, 0]"]
297["StartSketchOnFace<br>[4375, 4407, 0]"]
298["StartSketchOnPlane<br>[5483, 5543, 0]"]
1 --- 2
2 --- 3
2 --- 4

View File

@ -5466,78 +5466,56 @@ description: Result of parsing french-press.kcl
{
"arguments": [
{
"commentStart": 0,
"end": 0,
"properties": [
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"commentStart": 0,
"end": 0,
"raw": "0.6",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.6,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"key": {
"commentStart": 0,
"end": 0,
"name": "offset",
"start": 0,
"type": "Identifier"
},
"start": 0,
"type": "ObjectProperty",
"value": {
"argument": {
"commentStart": 0,
"end": 0,
"raw": "90",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 90.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "radius",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"end": 0,
"raw": "0.6",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.6,
"suffix": "None"
}
],
"start": 0,
"type": "ObjectExpression",
"type": "ObjectExpression"
}
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "angle",
"start": 0,
"type": "Identifier"
},
"arg": {
"argument": {
"commentStart": 0,
"end": 0,
"raw": "90",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 90.0,
"suffix": "None"
}
},
"commentStart": 0,
"end": 0,
"operator": "-",
"start": 0,
"type": "UnaryExpression",
"type": "UnaryExpression"
}
}
],
"callee": {
@ -5558,8 +5536,9 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
@ -8602,44 +8581,47 @@ description: Result of parsing french-press.kcl
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "4.1",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 4.1,
"suffix": "None"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "4.1",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 4.1,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "5.26",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 5.26,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"raw": "5.26",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 5.26,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -8649,7 +8631,7 @@ description: Result of parsing french-press.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -8660,50 +8642,54 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "4.17",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 4.17,
"suffix": "None"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "4.17",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 4.17,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "1.6",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.6,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"raw": "1.6",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.6,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -8713,7 +8699,7 @@ description: Result of parsing french-press.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -8724,50 +8710,54 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "3.13",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.13,
"suffix": "None"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "3.13",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.13,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "0.61",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.61,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"raw": "0.61",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 0.61,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -8777,7 +8767,7 @@ description: Result of parsing french-press.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -8788,8 +8778,9 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
@ -9014,44 +9005,47 @@ description: Result of parsing french-press.kcl
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "3.63",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.63,
"suffix": "None"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "3.63",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.63,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "1.6",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.6,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"raw": "1.6",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 1.6,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -9061,7 +9055,7 @@ description: Result of parsing french-press.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -9072,50 +9066,54 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "3.56",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.56,
"suffix": "None"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "3.56",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 3.56,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "5.15",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 5.15,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"raw": "5.15",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 5.15,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -9125,7 +9123,7 @@ description: Result of parsing french-press.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -9136,50 +9134,54 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [
{
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "2.72",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 2.72,
"suffix": "None"
"type": "LabeledArg",
"label": {
"commentStart": 0,
"end": 0,
"name": "endAbsolute",
"start": 0,
"type": "Identifier"
},
"arg": {
"commentStart": 0,
"elements": [
{
"commentStart": 0,
"end": 0,
"raw": "2.72",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 2.72,
"suffix": "None"
}
},
{
"commentStart": 0,
"end": 0,
"raw": "5.88",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 5.88,
"suffix": "None"
}
}
},
{
"commentStart": 0,
"end": 0,
"raw": "5.88",
"start": 0,
"type": "Literal",
"type": "Literal",
"value": {
"value": 5.88,
"suffix": "None"
}
}
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
},
{
"commentStart": 0,
"end": 0,
"start": 0,
"type": "PipeSubstitution",
"type": "PipeSubstitution"
],
"end": 0,
"start": 0,
"type": "ArrayExpression",
"type": "ArrayExpression"
}
}
],
"callee": {
@ -9189,7 +9191,7 @@ description: Result of parsing french-press.kcl
"name": {
"commentStart": 0,
"end": 0,
"name": "tangentialArcTo",
"name": "tangentialArc",
"start": 0,
"type": "Identifier"
},
@ -9200,8 +9202,9 @@ description: Result of parsing french-press.kcl
"commentStart": 0,
"end": 0,
"start": 0,
"type": "CallExpression",
"type": "CallExpression"
"type": "CallExpressionKw",
"type": "CallExpressionKw",
"unlabeled": null
},
{
"arguments": [

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