From 90acc00369b7acd0e0896f12c9c88421bc23dfa1 Mon Sep 17 00:00:00 2001 From: Adam Chalmers Date: Fri, 18 Apr 2025 17:40:44 -0500 Subject: [PATCH] Kwargs migration: arc/arcTo (#6334) --- .helix/languages.toml | 4 +- docs/kcl/arc.md | 32 +- docs/kcl/arcTo.md | 45 - docs/kcl/extrude.md | 24 +- docs/kcl/index.md | 1 - docs/kcl/std.json | 14066 ++++++++++------ docs/kcl/tangentToEnd.md | 2 +- docs/kcl/types/Path.md | 4 +- e2e/playwright/sketch-tests.spec.ts | 107 +- e2e/playwright/snapshot-tests.spec.ts | 13 +- ...example-snapshots--change-colour.snap.json | 2 +- .../testing-segment-overlays.spec.ts | 102 +- public/kcl-samples/80-20-rail/main.kcl | 120 +- public/kcl-samples/axial-fan/fan.kcl | 36 +- public/kcl-samples/ball-bearing/main.kcl | 12 +- public/kcl-samples/bench/bench-parts.kcl | 6 +- public/kcl-samples/bottle/main.kcl | 5 +- public/kcl-samples/cycloidal-gear/main.kcl | 6 +- .../kcl-samples/food-service-spatula/main.kcl | 30 +- public/kcl-samples/french-press/main.kcl | 42 +- public/kcl-samples/gear/main.kcl | 18 +- .../gridfinity-baseplate-magnets/main.kcl | 24 +- .../gridfinity-bins-stacking-lip/main.kcl | 7 +- public/kcl-samples/keyboard/main.kcl | 30 +- public/kcl-samples/makeup-mirror/main.kcl | 13 +- .../multi-axis-robot/robot-arm-j2.kcl | 12 +- .../multi-axis-robot/robot-arm-j3.kcl | 24 +- .../multi-axis-robot/robot-rotating-base.kcl | 6 +- .../router-template-cross-bar/main.kcl | 15 +- .../router-template-slate/main.kcl | 12 +- public/kcl-samples/walkie-talkie/knob.kcl | 6 +- public/kcl-samples/walkie-talkie/zoo-logo.kcl | 24 +- .../kcl-lib/e2e/executor/inputs/close_arc.kcl | 2 +- .../executor/inputs/pentagon_fillet_sugar.kcl | 8 +- .../executor/inputs/router-template-slate.kcl | 20 +- .../e2e/executor/inputs/server-rack-heavy.kcl | 82 +- .../e2e/executor/inputs/server-rack-lite.kcl | 82 +- rust/kcl-lib/e2e/executor/main.rs | 27 +- rust/kcl-lib/src/docs/mod.rs | 6 +- rust/kcl-lib/src/execution/geometry.rs | 4 +- rust/kcl-lib/src/lsp/tests.rs | 14 +- rust/kcl-lib/src/parsing/parser.rs | 11 - rust/kcl-lib/src/std/args.rs | 33 - rust/kcl-lib/src/std/extrude.rs | 16 +- rust/kcl-lib/src/std/mod.rs | 1 - rust/kcl-lib/src/std/segment.rs | 9 +- rust/kcl-lib/src/std/sketch.rs | 323 +- .../artifact_graph_flowchart.snap.md | 24 +- rust/kcl-lib/tests/import_async/ast.snap | 670 +- rust/kcl-lib/tests/import_async/input.kcl | 22 +- rust/kcl-lib/tests/import_async/unparsed.snap | 18 +- .../artifact_graph_flowchart.snap.md | 200 +- .../tests/kcl_samples/80-20-rail/ast.snap | 4518 +++-- .../tests/kcl_samples/80-20-rail/ops.snap | 2 +- .../artifact_graph_flowchart.snap.md | 24 +- .../tests/kcl_samples/axial-fan/ops.snap | 6 +- .../artifact_graph_flowchart.snap.md | 42 +- .../tests/kcl_samples/ball-bearing/ast.snap | 400 +- .../bench/artifact_graph_flowchart.snap.md | 52 +- rust/kcl-lib/tests/kcl_samples/bench/ops.snap | 20 +- .../bottle/artifact_graph_flowchart.snap.md | 18 +- .../kcl-lib/tests/kcl_samples/bottle/ast.snap | 311 +- .../artifact_graph_flowchart.snap.md | 44 +- .../tests/kcl_samples/cycloidal-gear/ast.snap | 244 +- .../tests/kcl_samples/cycloidal-gear/ops.snap | 8 +- .../artifact_graph_flowchart.snap.md | 64 +- .../kcl_samples/food-service-spatula/ast.snap | 798 +- .../food-service-spatula/program_memory.snap | 78 +- .../artifact_graph_flowchart.snap.md | 216 +- .../tests/kcl_samples/french-press/ast.snap | 1102 +- .../french-press/program_memory.snap | 300 +- .../gear/artifact_graph_flowchart.snap.md | 24 +- rust/kcl-lib/tests/kcl_samples/gear/ast.snap | 670 +- .../artifact_graph_flowchart.snap.md | 116 +- .../gridfinity-baseplate-magnets/ast.snap | 800 +- .../gridfinity-baseplate-magnets/ops.snap | 12 +- .../program_memory.snap | 240 +- .../artifact_graph_flowchart.snap.md | 64 +- .../gridfinity-bins-stacking-lip/ast.snap | 174 +- .../gridfinity-bins-stacking-lip/ops.snap | 8 +- .../program_memory.snap | 288 +- .../keyboard/artifact_graph_flowchart.snap.md | 514 +- .../tests/kcl_samples/keyboard/ast.snap | 1352 +- .../tests/kcl_samples/keyboard/ops.snap | 54 +- .../artifact_graph_flowchart.snap.md | 10 +- .../tests/kcl_samples/makeup-mirror/ast.snap | 608 +- .../tests/kcl_samples/makeup-mirror/ops.snap | 2 +- .../artifact_graph_flowchart.snap.md | 232 +- .../artifact_graph_flowchart.snap.md | 90 +- .../router-template-cross-bar/ast.snap | 422 +- .../program_memory.snap | 1044 +- .../artifact_graph_flowchart.snap.md | 58 +- .../router-template-slate/ast.snap | 380 +- .../router-template-slate/program_memory.snap | 306 +- .../artifact_graph_flowchart.snap.md | 44 +- .../tests/kcl_samples/walkie-talkie/ops.snap | 12 +- ...c_to0.png => serial_test_example_arc1.png} | Bin .../artifact_graph_flowchart.snap.md | 40 +- .../tests/pentagon_fillet_sugar/ast.snap | 235 +- .../tests/pentagon_fillet_sugar/input.kcl | 12 +- .../tests/pentagon_fillet_sugar/ops.snap | 8 +- .../pentagon_fillet_sugar/program_memory.snap | 260 +- .../tests/pentagon_fillet_sugar/unparsed.snap | 12 +- .../artifact_graph_flowchart.snap.md | 4 +- .../tests/tangent_to_3_point_arc/ast.snap | 215 +- .../tests/tangent_to_3_point_arc/input.kcl | 9 +- .../program_memory.snap | 6 +- .../tangent_to_3_point_arc/unparsed.snap | 5 +- src/clientSideScene/segments.ts | 4 +- src/lang/constants.ts | 5 +- src/lang/std/sketch.ts | 453 +- src/lang/std/sketchcombos.ts | 11 +- src/lang/std/stdTypes.ts | 3 +- 113 files changed, 17161 insertions(+), 16314 deletions(-) delete mode 100644 docs/kcl/arcTo.md rename rust/kcl-lib/tests/outputs/{serial_test_example_arc_to0.png => serial_test_example_arc1.png} (100%) diff --git a/.helix/languages.toml b/.helix/languages.toml index 016188b3a..9dd6dff59 100644 --- a/.helix/languages.toml +++ b/.helix/languages.toml @@ -5,6 +5,6 @@ command = "vscode-eslint-language-server" [[language]] name = "typescript" auto-format = true -formatter = { command = "node_modules/.bin/prettier", args = ["--parser", "typescript"] } -language-servers = [ { name = "eslint", only-features = [ "diagnostics" ] }, "typescript-language-server" ] +formatter = { command = "./node_modules/@biomejs/biome/bin/biome", args = ["format", "--write", "--stdin-file-path=foo.ts"] } +# language-servers = [ { name = "eslint", only-features = [ "diagnostics" ] }, "typescript-language-server" ] diff --git a/docs/kcl/arc.md b/docs/kcl/arc.md index 9f9060933..6252581bc 100644 --- a/docs/kcl/arc.md +++ b/docs/kcl/arc.md @@ -12,8 +12,12 @@ Unless this makes a lot of sense and feels like what you're looking for to const ```js arc( - data: ArcData, sketch: Sketch, + angleStart?: number, + angleEnd?: number, + radius?: number, + interiorAbsolute?: [number], + endAbsolute?: [number], tag?: TagDeclarator, ): Sketch ``` @@ -23,9 +27,13 @@ arc( | Name | Type | Description | Required | |----------|------|-------------|----------| -| `data` | [`ArcData`](/docs/kcl/types/ArcData) | Data to draw an arc. | Yes | -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes | -| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No | +| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | Which sketch should this path be added to? | Yes | +| `angleStart` | [`number`](/docs/kcl/types/number) | Where along the circle should this arc start? | No | +| `angleEnd` | [`number`](/docs/kcl/types/number) | Where along the circle should this arc end? | No | +| `radius` | [`number`](/docs/kcl/types/number) | How large should the circle be? | No | +| `interiorAbsolute` | [`[number]`](/docs/kcl/types/number) | Any point between the arc's start and end? Requires `endAbsolute`. Incompatible with `angleStart` or `angleEnd` | No | +| `endAbsolute` | [`[number]`](/docs/kcl/types/number) | Where should this arc end? Requires `interiorAbsolute`. Incompatible with `angleStart` or `angleEnd` | No | +| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | Create a new tag which refers to this line | No | ### Returns @@ -38,15 +46,21 @@ arc( exampleSketch = startSketchOn(XZ) |> startProfileAt([0, 0], %) |> line(end = [10, 0]) - |> arc({ - angleStart = 0, - angleEnd = 280, - radius = 16 - }, %) + |> arc(angleStart = 0, angleEnd = 280, radius = 16) |> close() example = extrude(exampleSketch, length = 10) ``` ![Rendered example of arc 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAADOeklEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqr/gXXXHPNg/lXuO+++27lqquuuuqqq6666qr/CahcddVVV1111VVXXfX/xjXXXPPgM2fOPPiaa6558JkzZx7EM11zzTUPvuaaax4McObMmQdfc801D+Y/wH333Xcrz3T27NlbAe67775bAf7hH/7hdwDuu+++WwH+4R/+4be56qqrrrrqqquuuuo/GnrQgx7EVVddddVVV1111VX/N1xzzTUPBnixF3ux1z5z5syDrrnmmgdfc801Dz5z5syDr7nmmgfzABcvXgRgd3cXgIsXL3Lx4kUAdnd3Abh48SLPbXd3l+d2/Phxnp8TJ04AcPz4cU6cOAHAiRMnADh+/DgnTpzgge67775bAf7hH/7htwH+4R/+4Xfuu+++W8+ePXvrfffddytXXXXVVVddddVVV/1roQc96EFcddVVV1111VVXXfW/zzXXXPPgF3uxF3vtM2fOPOjFX/zFX/vFXuzFXpsHuHjxIru7u1y8eJGLFy+yu7vLxYsXefrTn87/JCdOnADg2LFjnDhxgoc+9KEAHD9+nBMnTnDixAkA7rvvvlsBfuu3fuu7z549+4z77rvv1n/4h3/4ba666qqrrrrqqquuemHQgx70IK666qqrrrrqqquu+p/tmmuuefBrv/Zrv9fZs2ef8Tqv8zrv9WIv9mKvzTNdvHiRpz/96Vy8eJGnP/3pPP3pT+d/O9vc78SJEwA85CEP4aEPfSjHjx/nxIkTnDhxAoD77rvv1n/4h3/47X/4h3/4nfvuu+/Wf/iHf/htrrrqqquuuuqqq666H3rQgx7EVVddddVVV1111VX/s1xzzTUPfu3Xfu33evEXf/HXfrEXe7HXBrh48SK7u7s87WlPY3d3l4sXL/L0pz+dfytJ/EexzX8G27wgJ06c4Pjx45w4cYKHPvShHD9+nIc+9KEA3Hfffbf+wz/8w2//wz/8w+/81m/91ndz1VVXXXXVVVdd9f8XetCDHsRVV1111VVXXXXVVf+9rrnmmge/2Iu92Gu/zuu8znu92Iu92GsDXLx4kac//elcvHiRpz/96Tz96U/n30oS/9Vs8x/FNi+KEydO8JCHPISHPOQhnDhxgoc+9KEA3Hfffbf+wz/8w2//wz/8w+/81m/91ndz1VVXXXXVVVdd9f8HetCDHsRVV1111VVXXXXVVf+1rrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GsDPOlJT7r19ttvf/Du7i5/+Zd/yb+HJP6nsc2/l21eFLYBOHHiBAAv+7Ivy0Mf+lAe+tCHAnDffffd+lu/9Vvf/Q//8A+/8w//8A+/zVVXXXXVVVddddX/XehBD3oQV1111VVXXXXVVVf957vmmmse/Nqv/drv9Tqv8zrvfc011zz44sWLXLx4kac//en8xm/8BgCS+LeSxP8Wtvn3sM2LwjYPdOLECR760IfykIc8hBMnTvDQhz6U++6779Z/+Id/+O1/+Id/+J3f+q3f+m6uuuqqq6666qqr/m9BD3rQg7jqqquuuuqqq6666j/HNddc8+DXfu3Xfq93eqd3+myAixcv8pd/+Zc87WlP4+lPfzr3k8S/hST+t7PNv4VtXhS2eUFOnDjBQx7yEF7u5V6Ohz70odx33323/sM//MNv/8M//MPv/NZv/dZ3c9VVV1111VVXXfW/H3rQgx7EVVddddVVV1111VX/ca655poHv/Zrv/Z7vdM7vdNnA1y8eJG//Mu/5Dd+4zd4fiTxryWJ/4ts869lmxeFbV4Q25w4cYKHPvShPPShD+XlXu7luO+++279h3/4h9/+h3/4h9/5rd/6re/mqquuuuqqq6666n8n9KAHPYirrrrqqquuuuqqq/59rrnmmge/9mu/9nu9zuu8zntfc801D7548SJ/+Zd/yV/+5V9y8eJFnh9J/GtI4v8L2/xr2eZfYpsXxDb3O3HiBA996EN56EMfysu93Mtx33333foP//APv/1bv/Vb3/MP//APv81VV1111VVXXXXV/x7oQQ96EFddddVVV1111VVX/du84zu+42e9+Iu/+Gu/2Iu92GtfvHiRv/iLv+Cv/uqvuHjxIi+MJF5UkvjPIon/CLb5z2Cbfw3b/Ets88LY5oFOnDjBQx/6UF7u5V6Ohz70odx33323/tZv/dZ3/+iP/ujncNVVV1111VVXXfU/H3rQgx7EVVddddVVV1111VUvumuuuebBr/3ar/1e7/RO7/TZAL/+67/O05/+dJ72tKchiRdGEv8akviPIon/Srb5j2SbF5Vt/iW2eUFs8/wcP36cl3u5l+PlX/7lGcfx1n/4h3/47d/6rd/6nn/4h3/4ba666qqrrrrqqqv+Z0IPetCDuOqqq6666qqrrrrqX/Y6r/M67/1iL/Zir/U6r/M6733x4kX+4i/+gt/4jd8AQBL/Ekm8qCTx7yWJ/2ls8+9lmxeFbf4ltnlBbPP82ObEiRM89KEP5WEPexgv93Ivx3333Xfrb/3Wb333j/7oj34OV1111VVXXXXVVf+zoAc96EFcddVVV1111VVXXfX8XXPNNQ9+7dd+7fd6p3d6p88G+PVf/3We/vSn87SnPY37SeJfIokXhST+rSTxv4lt/q1s86KyzQtjmxfENs+Pbe534sQJXu7lXo43eIM34L777rv1t37rt777t3/7t7/nvvvuu5Wrrrrqqquuuuqq/37oQQ96EFddddVVV1111VVXPadrrrnmwa/92q/9Xu/0Tu/02RcvXuQv/uIv+I3f+A2emyReGEm8KCTxbyGJ/wts829hmxeFbV4Y27wgtnl+bPNAJ06c4KEPfSgv93Ivx/b29q2/9Vu/9d3/8A//8Dv/8A//8NtcddVVV1111VVX/fdBD3rQg7jqqquuuuqqq6666oprrrnmwa/92q/9Xu/0Tu/02RcvXuQv/uIv+I3f+A2eH0m8MJJ4UUjiX0sS/1fZ5l/LNi8K27wwtnl+bPP82Oa52eblX/7lebmXezke9rCH8Vu/9Vvf/Vu/9Vvf8w//8A+/zVVXXXXVVVddddV/PfSgBz2Iq6666qqrrrrqqv/vrrnmmge/4zu+42e9zuu8zntfvHiRX//1X+cv/uIvkMTzI4kXRhL/Ekn8a0ji/xPb/GvZ5l9imxfGNs+PbZ4f2zw32wCcOHGCN3iDN+DlX/7l+Yd/+Iff/pEf+ZHP+Yd/+Iff5qqrrrrqqquuuuq/DnrQgx7EVVddddVVV1111f9X11xzzYPf8R3f8bNe53Ve570vXrzIj/3Yj/G0pz0NAEk8P5J4YSTxL5HEi0oS/1kk8R/FNv9ZbPOiss2/xDYvjG2eH9s8P7Z5bra534kTJ3iDN3gDXv7lX5777rvv1q//+q9/n3/4h3/4ba666qqrrrrqqqv+86EHPehBXHXVVVddddVVV/1/c8011zz4Hd/xHT/rdV7ndd774sWL/NiP/RhPe9rTuJ8knh9JvCCS+JdI4kUlif8okvjvYpv/KLZ5UdnmX2KbF8Q2z49tnh/bPJBtntvx48d5wzd8Q17+5V+e3/qt3/ruH/3RH/2c++6771auuuqqq6666qqr/vOgBz3oQVx11VVXXXXVVVf9f3HNNdc8+LVf+7Xf653e6Z0+++LFi/zYj/0YT3va03ggSTw/knhBJPEvkcSLQhL/XpL4n8o2/162eVHZ5oWxzQtim+fHNs+PbR7INs/NNidOnOAN3/ANueWWW279h3/4h9/+0R/90c+57777buWqq6666qqrrrrqPx560IMexFVXXXXVVVddddX/B+/4ju/4We/0Tu/02RcvXuTXfu3X+Mu//EuemySeH0m8IJJ4YSTxopLEv5Uk/rexzb+HbV4UtnlhbPOC2Ob5sc1zs81zs80D2eZ+J06c4J3e6Z3Y3t6+9bd+67e++0d/9Ec/h6uuuuqqq6666qr/WOhBD3oQV1111VVXXXXVVf+Xvc7rvM57f/iHf/h3Xbx4kT//8z/n13/915HEc5PE8yOJF0QSL4wkXhSS+LeQxP8Vtvm3ss2LwjYvjG2eH9s8P7Z5brZ5brZ5INs80Mu93Mvxhm/4hkzTdOtv/dZvffeP/uiPfg5XXXXVVVddddVV/zHQgx70IK666qqrrrrqqqv+L7rmmmse/OEf/uHf9WIv9mKv/Wu/9mv8+q//OgCSeG6SeH4k8YJI4oWRxL9EEv9akvi/zjb/WrZ5UdjmhbHN82Ob58c2z802z802D2SbBzp+/Div8AqvwBu+4Rty33333fr1X//17/MP//APv81VV1111VVXXXXVvw/l+PHjXHXVVVddddVVV/1fcs011zz4zd7szT7qkz7pk3764ODgwd/yLd/C4x73OO4niecmiecmiRdEEi+IJCTxL5HEv4YkJPH/gSQkIYkXlSQk8S+RxAsjiedHEpJ4bpJ4bpJ4bpJ4IEk80HK55KlPfSp/9md/Rinl+Fu+5Vu+9ubm5vF/+Id/+B2uuuqqq6666qqr/u3Qgx70IK666qqrrrrqqqv+r3id13md9/7wD//w77p48SI/+qM/ytOe9jQeSBLPTRLPTRIviCReEEn8SyTxryGJ/2iS+M9im/8MtvnXsM2/xDYviG1eENs8N9s8N9s8N9s8kG3uZ5v7nThxgg/5kA/h7rvv/u2///u//+0f/dEf/Ryuuuqqq6666qqr/vXQgx70IK666qqrrrrqqqv+t7vmmmse/OEf/uHf9WIv9mKv/Wu/9mv82q/9GpJ4IEk8N0k8N0m8IJJ4QSTxL5HEi0oS/xEk8T+Bbf4j2OZFZZt/iW1eENu8ILZ5brZ5brZ5INs8kG0eyDb3O3HiBC//8i/PG73RG/EP//APv/31X//173PffffdylVXXXXVVVddddWLDj3oQQ/iqquuuuqqq6666n+zd3zHd/ysd3qnd/rspz71qfzoj/4oFy9eRBIPJInnJonnJokXRBIviCReGEm8qCTx7yGJ/w1s8+9hmxeVbV4Y27wwtnl+bPPcbPPcbPNAtnkg2zyQbe5nm5MnT/LO7/zObG9v3/qjP/qjn/Nbv/Vb381VV1111VVXXXXViwY96EEP4qqrrrrqqquuuup/o2uuuebBH/7hH/5dL/ZiL/bav/Zrv8av/dqvASCJ5yaJB5LE8yOJ50cSz48k/iWSeFFI4t9KEv+b2ebfyjYvKtu8MLZ5QWzz/NjmudnmudnmgWzzQLZ5INvczzYAb/iGb8gbvdEb8Q//8A+//fVf//Xvc999993KVVddddVVV1111QuHHvSgB3HVVVddddVVV131v807vuM7ftY7vdM7ffZTn/pUfvRHf5SLFy9yP0k8kCQeSBLPjySeH0k8P5J4YSTxopDEv4Uk/j2OHz8OwPHjxzl+/DjHjx/nfidOnOD48ePc7/jx49zv+PHjPNDu7i7Hjx/ngXZ3d3luu7u7AOzu7nK/ixcvsru7C8Du7i67u7tcvHiRfwvbvChs88LY5gWxzfNjm+dmm+dmmweyzQPZ5n62eSDbAJw8eZJ3eqd3Ymdn59bf+q3f+u4f/dEf/Ryuuuqqq6666qqrXjD0oAc9iKuuuuqqq6666qr/La655poHf/iHf/h33XDDDa/9Z3/2Z/z6r/86DySJB5LEc5PEc5PE8yOJ50cSL4wkXhSS+NeSxL/k+PHjADz4wQ/m+PHjADzkIQ8B4Pjx4xw/fpz/yXZ3dwG4ePEiu7u77O7usru7y8WLF9nd3WV3d5cXxDYvCtu8ILZ5QWzz/NjmudnmudnmgWzzQLa5n23uZ5v72eaN3uiNeKM3eiN+5Ed+5LN/9Ed/9HO46qqrrrrqqquuev7Qgx70IK666qqrrrrqqqv+N3ixF3ux1/7cz/3c33rqU5/KN3/zNwMgiftJ4oEk8dwk8dwk8fxI4vmRxAsjiX+JJP41JPH8HD9+nOPHj/PgBz+YEydOcPz4cR784Afzoliv1wCs12vW6zXr9Zr7rddr1us191uv19xvvV7zL5nNZjy32WwGwGw2A2A2mwEwm82YzWYAzGYzZrMZ/5Ld3V0Anv70pwNw6623cvHiRW699VbuZ5t/iW1eGNs8P7Z5fmzz3Gzz3GzzQLa5n20eyDb3s839bHPy5Ek+9EM/lGmabv36r//69/mHf/iH3+aqq6666qqrrrrqOaEHPehBXHXVVVddddVVV/1P947v+I6f9U7v9E6f/au/+qv82q/9GgCSuJ8knpskHkgSz00Sz48knh9JvCCS+JdI4l9DEgDHjx8H4KVf+qUBeMhDHsKDH/xgXpD1eg3A3t4e6/UagL29PQD29vb4n242m2Gb2WzGbDZjNpsxn8+ZzWbs7Ozwguzu7gLw9Kc/nVtvvZWLFy/y9Kc/nRfGNi+MbZ4f2zw/tnlutnkg2zw329zPNg9km/vZ5n62OXnyJC//8i/Py77sy976W7/1W9/9oz/6o5/DVVddddVVV1111bOhBz3oQVx11VVXXXXVVVf9T3XNNdc8+MM//MO/6/rrr3/tH/3RH+WpT30qAJJ4IEk8kCQeSBLPTRLPjySeH0m8IJL4l0jiRXXixAle+qVfGoCHPOQhPPjBD+b5Wa/XrNdrLl26BMDe3h57e3v8e0jiP4pt/jPMZjMAdnZ2OHbsGACz2YydnR2en93dXZ7+9Kfz9Kc/nd3dXZ7+9Kfz3Gzzgtjm+bHN82Ob52abB7LNA9nmgWxzP9s8kG0AbHO/EydO8GEf9mHcfffdv/31X//173PffffdylVXXXXVVVdddRWgBz3oQVx11VVXXXXVVVf9T/RiL/Zir/25n/u5v/XUpz6Vb/7mb+aBJHE/STyQJB5IEs9NEs+PJJ4fSbwgknhhJPEvOX78OC/zMi/DQx7yEB784Afz/KzXa+677z4A9vb22Nvb46rnNJvNANjZ2WFnZ4fZbMaxY8d4bru7u1y8eJHd3V3+6q/+iqc//ekA2OYFsc3zY5vnxzbPzTYPZJsHss0D2eZ+trmfbe5nGwDbnDx5knd5l3dhZ2fn1s/6rM96nfvuu+9Wrrrqqquuuuqq/+/Qgx70IK666qqrrrrqqqv+p3nHd3zHz3qnd3qnz/7VX/1VfvVXfxVJ3E8S95PEA0niuUnigSTx/Eji+ZHECyKJF0YSz8/x48d5mZd5GR784AfzkIc8hOe2Xq+5dOkS6/WaS5cusbe3xwsjif9vbPOimM1mABw7doydnR1msxnHjh3jgXZ3dwH4y7/8S57+9Kfz9Kc/nefHNi+IbZ6bbZ6bbR7INg9kmweyzf1scz/b3M82ALY5efIkr/AKr8DLvuzL3vpbv/Vb3/2jP/qjn8NVV1111VVXXfX/GXrQgx7EVVddddVVV1111f8U11xzzYM//MM//Luuv/761/6RH/kRnvrUpyKJ+0nigSTxQJJ4IEk8N0k8N0k8P5J4QSTxwkjifsePH+dlXuZlePCDH8xDHvIQntt6vea+++7j0qVL7O3t8Z9JEv9T2ea/wmw249ixY8xmM3Z2djh27BgPtLu7y9Oe9jSe/vSns7u7y9Of/nQeyDbPj22em22em20eyDYPZJv72eaBbHM/2wDY5n62AXijN3oj3viN35gf+ZEf+ewf/dEf/Ryuuuqqq6666qr/r9CDHvQgrrrqqquuuuqqq/4neLEXe7HX/tzP/dzfeupTn8o3fdM3ASCJB5LE/STxQJJ4IEk8N0k8N0k8P5J4fiTxwkgC4Pjx47zMy7wML/MyL8Px48d5oPV6zb333sve3h6XLl3i+ZHEVf/xbPPcZrMZ8/mca665htlsxrFjx3igixcv8ld/9Vc8/elP5+lPfzoAtnl+bPPcbPPcbPNAtnkg29zPNvezzf1scz/bANjmfidOnODDP/zDmabp1s/6rM96nfvuu+9Wrrrqqquuuuqq/2/Qgx70IK666qqrrrrqqqv+u73Yi73Ya3/u537ub/3Zn/0ZP/IjP8L9JHE/SdxPEg8kiQeSxHOTxHOTxPMjiedHEi/MiRMneJmXeRle53Vehwdar9esVisuXbrE7bffzr+XJK56wWzz7zGbzTh27BjHjh3jmmuu4YEuXrzI05/+dP7qr/6Kpz3taTw/tnlutnkg2zw329zPNg9km/vZ5n62uZ9tAGwDYJuTJ0/yCq/wCrzcy73crZ/1WZ/1Ovfdd9+tXHXVVVddddVV/5+gBz3oQVx11VVXXXXVVVf9d3rHd3zHz3qnd3qnz/7hH/5h/vzP/5z7SeJ+knggSdxPEs9NEg8kiecmiedHEs+PJJ6f48eP8zIv8zK87uu+Lg+0Wq247777uHTpEpcuXeKBJPGfSRL/l9nmv8psNmM2m3Hs2DGOHTvGsWPHuN/Fixd5+tOfzl/+5V/y9Kc/nQeyzXOzzQPZ5oFs80C2eSDb3M8297MNgG3uZxsA25w8eZJXeIVX4OVe7uVu/a3f+q3v/tEf/dHP4aqrrrrqqquu+v8CPehBD+Kqq6666qqrrrrqv8vnfu7n/tb111//2j/8wz/MU5/6VCRxP0ncTxL3k8QDSeKBJPFAknhuknh+JPH8SOKBjh8/zsu8zMvwuq/7ujzQarXivvvu495772W9XvOvJYn/LpL472Kb/yls88LMZjOuvfZajh07xrFjx7jfxYsXefrTn85f/uVf8vSnPx0A2zw32zyQbR7INg9km/vZ5n62uZ9t7mcbANvczzYAb/RGb8TLvdzL3fpbv/Vb3/2jP/qjn8NVV1111VVXXfX/AXrQgx7EVVddddVVV1111X+Hz/3cz/2t66+//rW/6Zu+iQsXLiCJ+0nifpK4nyQeSBIPJIkHksRzk8TzI4nnRxIAx48f52Ve5mV42Zd9WY4fP879VqsV9957L/fddx+r1Yr7SeI/iiSu+o9lm3+v2WzGtddey7Fjxzh27Bj3u3jxIn/5l3/JX/3VX3HhwgWem20eyDYPZJsHss39bHM/29zPNvezDYBtAGwDYJtXfMVX5N3e7d34kR/5kc/+0R/90c/hqquuuuqqq676vw496EEP4qqrrrrqqquuuuq/0jXXXPPgD//wD/+u2Wz22t/0Td/E/SQBIIn7SeKBJHE/STyQJJ6bJJ6bJJ6bJJ4fSbzMy7wMD3nIQ3iZl3kZ7rdarbj33nu57777WK1WvCgk8Z9BElc9f7b5r2Cb+XzONddcw7XXXst8Pgfg4sWLPP3pT+dpT3saf/mXf8kD2eaBbPNAtnkg29zPNvezzf1sA2Cb+9kGwDYAtjl58iQf8REfwa/92q999o/+6I9+DlddddVVV1111f9l6EEPehBXXXXVVVddddVV/1WuueaaB3/TN33T05/ylKfwjd/4jUgCQBL3k8T9JHE/STyQJB5IEg8kiecmiecmied2/PhxXvZlX5bXfd3X5YGe8YxnsFqtuPfee5HEv5ck/itI4v8a2/x3sM0LM5/POXbsGMeOHePaa6/lfhcvXuQv//Iv+cu//EsuXryIbZ6bbR7INvezzQPZ5n62uZ9tAGwDYJv72cY2ACdOnOAjP/Ij+Zu/+Zvv/vqv//r34aqrrrrqqquu+r8KPehBD+Kqq6666qqrrrrqv8KLvdiLvfbnfu7n/tZTnvIUvvEbvxFJAEjifpK4nyTuJ4kHksQDSeKBJPHcJPHcJPFAx48f53Vf93V52Zd9We63Wq249957ecYznsELIon/KJL4n0IS/9ls8z+Rbf695vM511xzDcePH+fYsWMAXLx4kac//en8xV/8BU972tN4brZ5INvczzb3s839bHM/29zPNgC2AbANgG0ATpw4wUd+5Edy9913//ZnfuZnvg5XXXXVVVddddX/RehBD3oQV1111VVXXXXVVf/ZXuzFXuy1P/dzP/e3/uzP/owf+qEfQhL3k8T9JHE/SdxPEveTxANJ4oEk8dwk8dwkAXD8+HFe9mVflpd5mZfhxIkT3O/WW2/lvvvuY7Va8W8hif9okrjqP5Zt/ivM53NuueUWrr32Wu538eJFfuM3foO/+Iu/4IFscz/bPJBt7meb+9nmfrYBsM39bANgGwDb2ObkyZN85Ed+JNM03fohH/IhD+Gqq6666qqrrvq/Bj3oQQ/iqquuuuqqq6666j/Ti73Yi732h3/4h3/Xb/zGbzz4z/7szwCQBIAk7ieJ+0nifpJ4IEncTxLPTRIPJInnJonjx4/zsi/7srzu674u91utVtxzzz084xnP4LlJ4t9DEv+ZJHHV82eb/w62eW7z+Zxrr72Wa6+9lvl8DsDFixf5i7/4C37jN34DANs8kG0eyDb3s839bHM/2wDYBsA2ALYBsA2AbU6ePMm7vdu7cezYsVs/5EM+5CFcddVVV1111VX/l6AHPehBXHXVVVddddVVV/1nebEXe7HX/tzP/dzf+qEf+iH+7M/+DABJ3E8S95MEgCTuJ4kHksQDSeKBJPFAknhuJ06c4GVf9mV53dd9Xe63Wq14xjOewT333MOLShL/XpL4rySJ/2ts8z+Bbf415vM5x44d49prr+X48eMAXLx4kb/4i7/gL//yL7lw4QIPZJv72eaBbHM/2wDY5n62AbANgG0AbANgmxMnTvDu7/7uHDt27NYP+ZAPeQhXXXXVVVddddX/FehBD3oQV1111VVXXXXVVf8ZXuzFXuy1P/dzP/e3fuiHfog//dM/RRIAkgCQxP0kcT9J3E8S95PEA0nigSTxQJJ4oBMnTvC6r/u6vOzLviz3u+eee7j11ltZrVbcTxL/FpL4jyCJ/4kk8Z/JNv9b2OY/0nw+55GPfCTHjx8H4OLFi/zFX/wFf/EXf8HFixe5n23uZ5v72eZ+trmfbQBscz/bANjGNgC2AThx4gTv/u7vzrFjx279kA/5kIdw1VVXXXXVVVf9X4Ae9KAHcdVVV1111VVXXfUf7cVe7MVe+3M/93N/64d+6If40z/9UyQBIIn7SQJAEveTxP0k8UCSuJ8kHkgSz00SACdOnOB1X/d1edmXfVnud+utt3LPPfewWq14YSTxbyWJ/0iSuOq/lm3+K9gGYD6f86AHPYjrrrsOgIsXL/IXf/EX/MVf/AUXL14EwDb3s839bHM/29zPNgC2AbANgG0AbANgG9ucPHmSd3/3d+fYsWO3fsiHfMhDuOqqq6666qqr/rejHD9+nKuuuuqqq6666qr/SC/2Yi/22p/7uZ/7Wz/4gz/In/3ZnwEgCQBJAEjifpK4nyTuJ4n7SeKBJPFAknggSZw4cYI3e7M34+3e7u24/vrrAXj605/OX//1X3Pp0iWmaeJfQxL/XpL4zyCJq/5tbPNfzTbPzzRNnD9/nnvvvZdaK2fOnOGhD30oL/ZiL8ZiseDixYssl0vuJ4n7SeJ+knhukgCQBIAkACRxP0ksl0ue9KQn8ahHPer4ox/96Af/6Z/+6c9w1VVXXXXVVVf9b0Y5fvw4V1111VVXXXXVVf9RXuzFXuy1P/dzP/e3fvAHf5A/+7M/A0ASAJIAkMT9JHE/SdxPEveTxANJ4oEk8UAnT57kVV/1VXn3d393rr/+egCe/vSn89d//dfs7u7y3CTxbyGJfy9J/FeQxP9XtvnvZJt/rWmaOH/+PPfeey+1Vs6cOcNDH/pQXuzFXozFYsHTnvY07ieJ+0niuUniuUkCQBL3k8T9VqsVT3rSk3irt3qrl37Qgx704D/90z/9Ga666qqrrrrqqv+tKMePH+eqq6666qqrrrrqP8I111zz4K/4iq/4qx/8wR/kT//0T5EEgCQAJAEgiftJAkAS95PEA0nifpJ4IEnc78SJE7zaq70a7/7u785DH/pQAJ7+9Kfz13/91+zu7vKikMS/lST+o0jiv5Mk/qeyzf9UtvmPNE0T58+f595776XWypkzZ3joQx/Ky7/8yzOfz3na057GCyKJ+0kCQBLPjyQAJHG/5XLJ3/7t3/JWb/VWL71YLPiHf/iH3+Gqq6666qqrrvrfiHL8+HGuuuqqq6666qqr/r2uueaaB3/TN33T0//0T/+UX/7lX0YSAJIAkASAJO4niftJ4n6SuJ8k7ieJB5LE/V7v9V6Pd3/3d+ehD30oAE9/+tP5q7/6K3Z3dwGQxL+FJP6tJPEfSRJX/c9gm/9K4zhy7tw57rnnHra2tjhx4gQPe9jDePmXf3mWyyV3330395PE/STx3CQBIAkASQBI4n6SAFgul/zt3/4t7/qu7/rai8WCf/iHf/gdrrrqqquuuuqq/20ox48f56qrrrrqqquuuurf45prrnnwh3/4h3/X3t7eg7/jO74DAEkASAJAEgCSAJDE/SRxP0ncTxIPJIkHksTLvuzL8hEf8RE89KEPBeDixYv81V/9FefOneMFkcS/hST+PSTxn0USV/3Hs81/B9s8P9M0cc8997Bardja2mJ7e5sXe7EX4+Vf/uW5++67uXjxIgCSeG6SeG6SeG6SuJ8klsslf/u3f8tHfMRHvDbAP/zDP/wOV1111VVXXXXV/yaU48ePc9VVV1111VVXXfXv8Umf9Ek/NZvNXvvrvu7rkIQkACQBIAkASdxPEveTBIAkHkgS95PEA508eZJ3f/d359Ve7dUAWK1W/O3f/i233nor0zTxopLEv5Uk/r0k8V9BElc9L9v8T2Cbf42DgwPOnTvHNE3M53O2t7d52MMexmKx4GlPexoPJIn7SQJAEg8kCQBJ3E8S9zs6OuKP//iPead3eqcH33rrrX9z9uzZW7nqqquuuuqqq/63oBw/fpyrrrrqqquuuuqqf6vP/dzP/a3ZbPbaX/d1X4ckACQBIAkASQBIAkAS95PE/SRxP0ncTxL3O3HiBK/+6q/Ou7/7u3PixAlWqxW33XYbf/u3f8tqteKBJPGvJYl/C0n8R5HEfxdJ/F9gm/+pbPMfYZomdnd3OXfuHNM0cf311/Owhz2Ml3/5l2exWPC0pz2N+0nifpIAkASAJAAkcT9J3E8SAMvlktVqdfxd3/VdX/vP/uzPfubw8HCXq6666qqrrrrqfwP0oAc9iKuuuuqqq6666qp/i3d8x3f8rDd4gzf47M/5nM8BQBKSAJAEgCQAJHE/SQBI4n6SuJ8kHkgSAK/3eq/H67/+63O/pz3taTz96U/nXyKJfwtJ/FtJ4j+aJK7638M2/5Xm8zmPfvSjOX78OAAXL17km7/5m7lw4QL3sw2AbQBsA2AbANsA2AbANraxjW1s82Zv9ma8wiu8wq0f8iEf8hCuuuqqq6666qr/DSjHjx/nqquuuuqqq6666l/rxV7sxV77Iz7iI777277t27h48SKSAJAEgCQkcT9JAEjifpK4nyTuJ4n7SeLEiRO8x3u8By/3ci8HwMWLF/mLv/gLzp49iyT+NSTxbyGJfy9J/GeQxFX/fWzz38k2ANM0cc8997Bardje3mZ7e5sXf/EXZ7FY8NSnPpUHkgSAJAAkASAJAEncTxIPdP78ea655prjb/RGb/Tav/Vbv/U9XHXVVVddddVV/9NRjh8/zlVXXXXVVVddddW/xou92Iu99ud+7uf+1td+7dfy1Kc+FQBJSAJAEgCSAJDE/SQBIIn7SeJ+krifJF7v9V6P93iP9+DEiRMsl0ue9KQn8aQnPYlpmnhukvjXkMS/lST+vSTxn00SV/372OZ/Etu8MAcHB5w7d45pmrj++ut52MMexiu8witw1113cfHiRe4nCQBJAEgCQBL3k8QDSWK5XHLHHXfwsi/7sg8+efIk//AP//A7XHXVVVddddVV/5NRjh8/zlVXXXXVVVddddWL6pprrnnwV3zFV/zVL/3SL/Gnf/qnSEISAJKQBIAk7icJAEncTxIAkrifJO534sQJPvIjP5IXe7EXA+BpT3saf/u3f8vBwQH/Ekn8a0ni30oS/1Ek8V9NEv+f2eZ/Ktv8W0zTxO7uLvfccw9nzpxhe3ubhz3sYcznc572tKfxopDE/STxQEdHRzz1qU/lXd/1XV/74ODgGbfeeutfc9VVV1111VVX/U9FOX78OFddddVVV1111VUvqk/6pE/6qUuXLj34B37gB5AEgCQkASAJAEkASAJAEveTxP0kcT9JALz+678+7/me78lisWC5XPI3f/M33HXXXQBI4l9DEv8Wkvi3ksR/JEn8TyOJ/4ls87+Vbf6jTdPEuXPnmKaJ66+/noc97GG8wiu8AnfddRcXL15EEgCSAJAEgCTuJ4n7SeJ+R0dH/P3f/z3v/d7v/dK33nrr35w9e/ZWrrrqqquuuuqq/4kox48f56qrrrrqqquuuupF8bmf+7m/1ff9a3/d130dAJKQBIAkJAEgCQBJ3E8SAJK4nyTuJ4kTJ07wUR/1UbzYi70YAE996lP5m7/5G1arFc9NEv9akvi3kMS/hyT+M0jiqv99bPNfaZomdnd3ueeeezhz5gzb29s8/OEPZ7FY8NSnPhVJAEgCQBL3kwSAJJ6bbVarFdvb28ff6q3e6rV/4Rd+4Wu46qqrrrrqqqv+J6IcP36cq6666qqrrrrqqn/Ji73Yi73267/+63/2t33bt7FarZAEgCQkASAJAEkASAJAEveTBIAk7ieJ13/91+c93/M9WSwWLJdL/uZv/oa7776bF4Uk/rUk8W8hif8IkvjPJImr/vvY5n+aaZo4e/Ys0zRx/fXX87CHPYyXf/mX5+///u9ZLpc8N0kASOJ+kngg2zz1qU/lpV/6pY8/+tGPfvCf/umf/gxXXXXVVVddddX/NJTjx49z1VVXXXXVVVdd9cJcc801D/6Kr/iKv/r2b/927rrrLgAkIQkASUgCQBIAkrifJAAkcT9JAJw4cYL3fM/35OVe7uUAeOpTn8pf//Vfs1wukcS/hiT+LSTxbyWJ/wiS+K8iiav+fWzzv4FtHmiaJnZ3d7n77rs5c+YM29vbvPiLvzgbGxs89alPRRIAkgCQxP0k8dxsI4mnPe1pvOVbvuVLLxYL/uEf/uF3uOqqq6666qqr/iehHD9+nKuuuuqqq6666qoX5n3e532+6vGPf/xL/8mf/AmSkASAJCQBIAkASQBIAkAS95MEgCQAHvrQh/LRH/3RnDhxguVyyV//9V9z11138fxI4l9DEv8Wkvj3kMR/FEn8d5LE/0e2+d/INi+qaZo4e/Ys0zRxww038LCHPQyApz71qUjiuUnifpJ4INusVivuvvtu3uzN3uzBt95669+cPXv2Vq666qqrrrrqqv8pKMePH+eqq6666qqrrrrqBfncz/3c3zpx4sRb/8AP/AAAkpCEJAAkIQkASQBI4n6SAJDE/STx+q//+rzjO74jABcuXOCP//iPWa1W/Esk8a8liX8LSfx7SOI/gyT+p5PEfyfb/F9lm/8I0zSxu7sLwIkTJ3j4wx/OK7zCK/AP//APLJdLJAEgiftJ4oEkYRtJXLx4ke3t7eNv+ZZv+dq/8Au/8DVcddVVV1111VX/U1COHz/OVVddddVVV1111fPzYi/2Yq/9Tu/0Tp/9NV/zNaxWKyQhCQBJSAJAEgCSAJAEgCTuJwmAkydP8l7v9V68/Mu/PABPecpT+Pu//3sAJPGvIYl/LUn8W0jiP4Ik/rNI4qr/O2zzX2F3d5e7776bM2fOsL29zYu/+IuzWCx46lOfiiTuJ4n7SeKBbCOJ3d1dHvnIRx5/1KMe9eA//dM//Rmuuuqqq6666qr/CSjHjx/nqquuuuqqq6666rldc801D/6Kr/iKv/rqr/5q7rzzTiQhCUlIAkASkgCQBIAk7icJAEkAPPShD+WjP/qjOXHiBMvlkr/+67/mrrvu4rlJ4l9DEv8Wkvi3ksR/BEn8Z5PEVf8z2eZ/gmmaOHv2LNM0ccMNN/Dwhz8cgKc+9akASAJAEg8kiftJYrVa8fSnP503fuM3Pn7rrbf+zdmzZ2/lqquuuuqqq67670Y5fvw4V1111VVXXXXVVc/tkz7pk37qaU972oN/+7d/G0lIQhIAkpAEgCQAJAEgCQBJAEgC4A3e4A14p3d6JwAuXLjAH/3RH7FcLnlhJPGvJYl/C0n8W0niP5Ik/itJ4qr/HLb532KaJnZ3dwE4ceIED3/4w3mFV3gF/uEf/oHlcokk7ieJ52YbSazXa6ZpOv6O7/iOr/0Lv/ALX8NVV1111VVXXfXfjXL8+HGuuuqqq6666qqrHuh1Xud13vtVXuVVPvprvuZrkIQkJCEJSQBIQhIAkgCQBIAk7nfy5Ene673ei5d/+ZcH4ClPeQp/93d/hyT+NSTxryWJfwtJ/HtI4j+SJP4nkMRVV9jm/6qLFy9y9913c80117C9vc2Lv/iLs1qtuPPOOwGQxP0k8UCSkMTdd9/NS73USx1/1KMe9eA//dM//Rmuuuqqq6666qr/TpTjx49z1VVXXXXVVVdddb9rrrnmwZ/7uZ/7W9/6rd/KxYsXkYQkJAEgCUkASAJAEgCSAJAEwMmTJ/mUT/kUTp48yXK55K/+6q+48847eSBJ/GtI4l9LEv9Wkvj3ksR/Bkn8byCJ/6ls8/+VbV6QaZo4e/Ys0zRxww03cOONN7JYLHjqU5/K/STx3GwjCUk8/elP543e6I2O33rrrX9z9uzZW7nqqquuuuqqq/67UI4fP85VV1111VVXXXXV/T7pkz7pp572tKc9+Ld+67eQhCQkIQlJAEhCEgCSAJAEgCQAHvawh/ExH/MxAFy4cIE//MM/ZLlc8oJI4l9LEv9akvi3ksR/BEn8Z5LEVVfdzzb/FtM0sVqtmKaJG264gYc//OEAPPWpT+WBJPFAkpDEer1mmqbj7/iO7/jav/ALv/A1XHXVVVddddVV/10ox48f56qrrrrqqquuugrgdV7ndd77VV7lVT76a77ma5CEJCQBIAlJSAJAEgCSAJAEgCTe4A3egHd6p3cC4M477+Sv/uqv+NeQxL+GJP4tJPHvIYn/CJL4ryCJq/5vss1/hmma2N3dBeDEiRM8/OEP5+EPfzh/+qd/iiSeH9tIQhL33HMPL/VSL3X8+PHj/MM//MPvcNVVV1111VVX/XegHD9+nKuuuuqqq6666qprrrnmwZ/7uZ/7W9/yLd/ChQsXkIQkJCEJSQBIQhIAkgCQBIAk3umd3onXeI3XAODJT34yj3/847mfJP41JPGvJYl/C0n8e0jiP5Ik/qtJ4qr/mWzz32l3d5e7776ba665hmuuuYZXfMVX5O/+7u9YLpdI4rlJQhKSuPXWW3mbt3mbB996661/c/bs2Vu56qqrrrrqqqv+q1GOHz/OVVddddVVV1111Sd90if91FOf+tQH/9Zv/RYRgSQkASAJSUgCQBIAkgCQBMCHfMiH8OIv/uIA/Mmf/Al33nknz48k/jUk8a8liX8rSfx7SeI/miT+O0niqv9YtvnfYpomzp49yzXXXMP29jYv8RIvwd///d+zXC65nyQAbBMRSGK9XrO9vX38lV/5lR/8W7/1W9/DVVddddVVV131X41y/Phxrrrqqquuuuqq/99e7MVe7LXf6Z3e6bO/6Iu+CElIQhKSkIQkACQhCQBJAEjixIkTvM/7vA8Pe9jDWC6X/OVf/iUXLlzgXyKJfy1J/GtJ4t9KEv8RJPGfQRL/U0ni/xvb/F82TRNnz55le3ubkydP8hIv8RLceeedXLx4kedHEpK4dOkSr/M6r/Pgpz71qb9z9uzZW7nqqquuuuqqq/4rUY4fP85VV1111VVXXfX/20d8xEd81y//8i8/+I477kASEYEkACQhCUkASAJAEpI4ceIEn/Zpn8bJkydZLpf88R//Mfv7+/xrSOJfSxL/FpL4t5LEfxRJ/GeRxP9lkvj3sM1V/3bTNHHx4kWmaeKGG27gEY94BMvlkjvvvBNJ3M82EYEk1us1wzDwDu/wDq/9C7/wC1/DVVddddVVV131X4ly/Phxrrrqqquuuuqq/7/e8R3f8bNuvPHG9/6xH/sxIgJJSEISkpAEgCQkASAJgIc//OF87Md+LADnz5/n93//95mmiQeSxL+GJP61JPFvIYl/D0n8R5HEfzZJXHXVf4RpmlitVkzTxA033MBNN93EYrHgKU95Cs9NEpK4++67eemXfunjx48f5x/+4R9+h6uuuuqqq6666r8K5fjx41x11VVXXXXVVf9/fe7nfu5vf8/3fA8XL15EEpKQhCQkIQlJAEgCQBIPf/jD+ZAP+RAAzp8/z5/8yZ/wwkjiX0MS/1qS+LeSxL+HJP4jSeK/kiSuuupfY5omdnd3Abjhhhs4deoUi8WCpzzlKTyQJCQREdx666289Vu/9YP/7M/+7GcODw93ueqqq6666qqr/itQjh8/zlVXXXXVVVdd9f/Th3/4h3/XPffc89K/9Vu/RUQgCUlIQhIAkpCEJAAk8bCHPYwP/dAPBeD8+fP8yZ/8CS8qSfxrSOLfQhL/VpL495LEfzRJ/HeRxFX//9jmX3Lx4kUAbrjhBh7xiEcA8OQnPxkA2wBIQhLr9ZoHPehBxx/2sIcd/9M//dOf4aqrrrrqqquu+q9AOX78OFddddVVV1111f8/L/ZiL/ba7/u+7/vV3/zN38xqtUISkpCEJCQhCUkASALg4Q9/OB/6oR8KwB133MFf/MVfACCJfw1J/GtJ4l9LEv8ekvj3ksR/Fkn8TyGJq/7nss1/losXLwJw4sQJHvGIRyCJpzzlKdxPEpKQxD333MMbvMEbHL/11lv/5uzZs7dy1VVXXXXVVVf9Z6McP36cq6666qqrrrrq/5+P+IiP+K4/+ZM/efDf/u3fIomIQBKSkASAJCQhCYCHP/zhfOiHfigAd9xxB3/zN3/Dc5PEv4Yk/rUk8W8hiX8PSfxHkMR/Jkn8byCJq/51bPM/1cWLFwE4ceIEj3jEIwB4ylOewv0kIYn1ek1mHn/MYx7Dn/7pn/4MV1111VVXXXXVfzbK8ePHueqqq6666qqr/n95sRd7sdd+p3d6p8/+qq/6KiICSUhCEpKQhCQkASCJhz3sYXzYh30YAHfccQd/8zd/wwsjiX8NSfxrSeLfShL/HpL4jyKJ/2yS+L9OEv8T2Ob/q4sXLwJw4sQJHvGIRwDw5Cc/GQBJSEIS6/Wad3u3d3vpf/iHf/ids2fP3spVV1111VVXXfWfiXL8+HGuuuqqq6666qr/Xz7iIz7iu37xF3/xwXfeeSeSiAgkIQlJAEhCEpJ42MMexod92IcB8Dd/8zc8+clP5kUliX8NSfxbSOLfShL/HpL4jySJ/yqSuOqq/0gXL14E4MSJE5w6dYrFYsGTn/xkACQhifV6zf7+Pq/1Wq/14N/6rd/6Hq666qqrrrrqqv9MBFddddVVV1111f8rr/M6r/Pe11577Wv/0R/9EQCSeG6SkATAwx72MD7swz4MgNtvv53bb78d27yobGObF5VtbGObfw3b2MY2/1q2sY1t/i1sYxvb2Obfyza2sY1tbPOfxTa2sY1tbGMb21x11b/V0572NJ72tKdx8uRJXvmVX5k3fdM3xTa2yUwykyc/+cnceOONr/1iL/Zir81VV1111VVXXfWfiXL8+HGuuuqqq6666qr/P973fd/3q377t3/7wXfeeScRgSQiAkkASEISknj4wx/Oh33YhwFw++238zd/8zc8N0n8a0jiX0sS/xaS+PeQxL+XJP4zSOK/mySuuuoFuXjxIgA33HADp06d4o477uD8+fNIQhKr1YpxHHmt13qtB//Wb/3W93DVVVddddVVV/1nIbjqqquuuuqqq/7feJ3XeZ33vvbaa1/7j/7oj5CEJCRxP0lIAuDhD384H/ZhHwbA7bffzt/8zd/w/NjGNi8q29jmX8M2tvnXso1tbPNvYRvb2Obfyja2sY1t/qPYxja2sY1t/qvZxja2sY1tbGMb21x11dOe9jSe9rSncfLkSd793d+dhz/84dgmM7HNU5/6VDY2Nl77xV7sxV6bq6666qqrrrrqPwvl+PHjXHXVVVddddVV/z+87/u+71f9+I//+IMvXrxIRCAJSUhCEpKQxKlTp/j4j/94AM6fP8+f//mf86KQxL+WJP4tJPFvIYl/L0n8R5HEfyZJ/E8niav+77p48SIAN954I494xCP4m7/5G1arFZJYrVaUUnjMYx7Dn/7pn/4MV1111VVXXXXVfwbK8ePHueqqq6666qqr/u97ndd5nfd++MMf/tG/8Au/QEQgiYhAEpKQhCROnjzJZ37mZwJw/vx5/vAP/xBJ/GtI4l9LEv8Wkvi3ksS/lyT+I0niP5sk/reTxFX/eyyXS2qtXHvttbzkS74kf/d3f8dqtSIiWK/XPOIRjzi+u7v7N2fPnr2Vq6666qqrrrrqPxrBVVddddVVV131/8LrvM7rvNcf/dEfIQlJSOL5edd3fVcAzp8/zx/+4R8CYBvbvKhsYxvbvKhsYxvb/GvYxja2+deyjW1s829lG9vY5j+CbWxjG9v8Z7CNbWxjG9vY5n8T29jGNraxjW1sYxvb2MY2trGNbWxjG9vY5qr/GqvViqc97WlcvHiRU6dO8REf8RFkJpnJ+fPn+fu///sHv87rvM57cdVVV1111VVX/WcguOqqq6666qqr/s97sRd7sdd+sRd7sdf+oz/6I+4nCUlIQhKS+PAP/3Ae/vCHc3R0xB/+4R/y3Gxjm38N29jmX8M2tvnXso1t/i1sYxvb/FvZxja2sc1/BNvYxja2+c9kG9vYxja2sc3/ZbaxjW1sYxvb2MY2trGNbWxjG9vYxja2sY1tbGMb29jGNraxjW1sYxvb2MY2trGNbWxjG9vY5v+a1WrFP/zDP7BcLjl58iTv+q7vSmaSmTzlKU9hY2Pjtbnqqquuuuqqq/4zUI4fP85VV1111VVXXfV/20d8xEd818///M8/+M477yQiiAgkIQlJSOIjPuIjePjDH87R0RG/8Ru/wYtCEv9akvjXksS/lST+PSTxH0ES/xkk8d9JElf93ySJ/2jTNHH27FnOnDnDgx/8YGzz1Kc+FUlk5vGbbrrpGbfeeutfc9VVV1111VVX/UciuOqqq6666qqr/k+75pprHvxiL/Zir/1Hf/RHSEISAJKQhCTe5E3ehIc//OEA/PVf/zUvKtvY5l/DNrb517CNbf4tbGObfyvb2MY2/x62sY1t/iPZxja2sY1t/ivZxja2sY1tbGObq/53s41tbGMb29jGNraxjW1s86+xWq34i7/4CwDe+I3fmDd4gzcgM3nKU57CK7zCK3w2V1111VVXXXXVfzTK8ePHueqqq6666qqr/u96n/d5n6+66667Xvpv//ZviQgiAklIQhKPeMQjeLd3ezcA/uAP/oDz588jiX8LSfxrSeLfQhL/VpL495LEfxRJ/GeTxP80krjq/wdJPNA0TSyXS6655hpOnjzJnXfeye7uLq21433f/87Zs2dv5aqrrrrqqquu+o9CcNVVV1111VVX/Z/2Oq/zOu/9cz/3c0hCEgCSkMQjHvEIPuIjPgKAv/qrv+L8+fMA2MY2/1q2sc2/hm1s869lG9v8W9jGNrb5t7KNbWzz72Ub29jGNv8ZbGMb29jGNv/dbGMb29jGNraxjW1sc9X/DbaxjW1sY5u7776bpz3taZw8eZJ3eqd34tixYzzlKU/hFV/xFT+Lq6666qqrrrrqPxLl+PHjXHXVVVddddVV/ze9zuu8znuv1+u3/pM/+RMiAklEBJI4deoUn/RJnwTAE5/4RJ72tKfxgkji30IS/1qS+LeSxL+VJP4jSOI/miT+q0jifyNJXPW/z2q1Ynt7m5MnT/JiL/Zi/MEf/AF7e3tM0/Qzh4eHu1x11VVXXXXVVf8RCK666qqrrrrqqv+zXud1Xue9/viP/5iIQBKSAJDEu7/7uwNw7tw5nvjEJ/LC2MY2/1q2sc2/hm1s829hG9v8W9jGNrb597CNbWzzH8U2trGNbf4z2cY2trGNbf43sI1tbGMb29jGNraxjW1sc9X/HMvlkn/4h39guVxy8uRJ3v7t3569vb0HP/jBD34vrrrqqquuuuqq/ygEV1111VVXXXXV/0kv9mIv9trXXnvtaz/5yU/mfpKQxEd8xEfw8Ic/nKOjI/7wD/+QF5VtbPOvZRvb/GvYxja2+deyjW1s829hG9vY5t/DNraxzX8k29jGNrb5z2Yb29jGNraxzf9WtrGNbWxjG9vYxja2sY1tbHPVf67lcslf/MVfAPDyL//yvO7rvi4XLlx4b6666qqrrrrqqv8oBFddddVVV1111f9Jr/M6r/NeP/uzP4skJCEJgEc84hE84hGPAOCv/uqvsI1t/jVs829hG9v8a9nGNv8WtrHNv5VtbGObfw/b2MY2tvmPZBvb2MY2/1VsYxvb2MY2tvm/xja2sY1tbGMb29jGNraxjW2u+tdbLpf8wz/8AwAv93Ivx8Mf/vAHb25uvjZXXXXVVVddddV/BIKrrrrqqquuuur/pNd5ndd57yc96UlIQhIAj3zkI/nIj/xIAP7gD/6Ac+fOcT/b/GvYxjb/Fraxzb+WbWzzb2Eb29jm38o2trHNv5dtbGOb/2i2sY1tbGOb/0q2sY1tbGMb29jm/wPb2MY2trGNbWxjG9vYxjZXPdtdd93FU5/6VE6cOMHbv/3bc/31138XV1111VVXXXXVfwTK8ePHueqqq6666qqr/m95ndd5nfder9dv/Sd/8idEBBGBJN793d+dU6dOce7cOZ74xCfygkjiX0sS/1aS+LeQxL+HJP4jSOI/kiT+s0nifxJJXPWCSeL/g+Vyyc7ODidOnODkyZPH//7v//4Zq9Xqr7nqqquuuuqqq/49CK666qqrrrrqqv9zXud1Xue9/viP/5iIQBIAH/VRH8WNN97IuXPn+IM/+ANeGNvY5l/DNrb5t7CNbf61bGMb2/xb2MY2tvn3sI1tbPMfwTa2sY1t/jPYxja2sY1t/jvZxja2sY1tbGMb2/x/Zxvb2MY2trGNbWzzf8VqteIf/uEfAHi5l3s5Xv/1X/+zuOqqq6666qqr/r0Irrrqqquuuuqq/3Mi4rWf/OQnIwlJPPKRj+QRj3gEGxsbPPGJT+RFZRvb/GvYxjb/Fraxzb+FbWzzb2Ub2/x72cY2tvmPYhvb2OY/k21sYxvb2OZ/CtvYxja2sY1tbHMV2MY2trGNbWzzv9FyueQf/uEfAHijN3qjBz/kIQ95b6666qqrrrrqqn8Pgquuuuqqq6666v+U13md13nvP/qjP0ISAKdOneKjPuqjAPj93/99zp49y7+WbWzzr2Eb2/xb2MY2/xa2sY1t/i1sYxvb/HvZxja2+Y9iG9vYxjb/2WxjG9vYxjb/09jGNraxjW1sY5v/72xjG9vYxja2+Z/urrvu4uLFi5w4cYIP/MAP/Gyuuuqqq6666qp/D4Krrrrqqquuuur/lNd5ndd5rz/6oz9CEpJ40zd9UwDOnTvHuXPnALCNbf61bPOvZRvb/FvYxjb/Vraxzb+VbWxjm38v29jGNv+RbGMb29jmv4JtbGMb29jmfyrb2MY2trGNbWxjm/+vbGMb29jmf6J/+Id/YLlc8shHPvJB7/iO7/hZXHXVVVddddVV/1YEV1111VVXXXXV/ylPfOITHxwRSOLN3uzNeOVXfmWOjo74/d//fZ6bbWzzr2Eb2/xr2cY2/xa2sY1t/i1sY5t/D9vYxjb/XraxjW3+o9nGNraxzX8V29jGNraxzf8GtrGNbWxjG9vY5v8T29jGNrb5n2C5XPK0pz0NgNd5ndd5b6666qqrrrrqqn8rgquuuuqqq6666v+M13md13nvpz71qQ+WxCMf+Uje7M3eDIC//Mu/5IWxjW3+NWxjm38t29jm38o2tvm3sI1tbPPvYRvb2Obfyza2sY1t/qPZxja2sc1/JdvYxja2sc3/JraxjW1sYxvb2Ob/OtvYxjb/ne666y7uuusurrnmmgd/7ud+7m9x1VVXXXXVVVf9WxBcddVVV1111VX/Z1x33XXv9eQnPxlJvPmbvzkAt912G+fOneNFYZt/LdvY5l/LNrb5t7KNbf6tbGObfy/b2OY/im1sY5v/DLaxjW1s81/NNraxjW1sY5v/bWxjG9vYxja2+b/INraxzX+Hpz71qSyXS17sxV7stV/ndV7nvbnqqquuuuqqq/61CK666qqrrrrqqv8z9vb2XjsiePM3f3Me8YhHcHR0xF/8xV/wr2Eb2/xr2cY2/1q2sc2/lW1sY5t/C9vYxjb/HraxjW3+o9jGNraxzX8G29jGNrb572Ib29jGNrb538g2trGNbWxjm/8rbGMb2/xXWa1WPO1pTwPgHd/xHT/rmmuueTBXXXXVVVddddW/BuX48eNcddVVV1111VX/+73O67zOe//FX/zFWz/60Y/mPd/zPQH44z/+Y46OjgCQxL+FJP4tJPFvIYl/L0n8e0niP4Ik/jNI4r+KJP4nkcT/FZL4304S/9n29/c5efIkp0+fPr65uXn8T//0T3+Gq6666qqrrrrqRUVw1VVXXXXVVVf9n3Dx4sXXksSbvdmbAXDbbbdx7tw57mcb2/xr2cY2/1q2sc2/lm1s8+9hG9v8e9jGNv9etrGNbf4j2cY2trHNfybb2MY2tvnvZhvb2MY2tvnfyja2sY1t/jeyjW3+s/3DP/wDAK/zOq/z3i/+4i/+2lx11VVXXXXVVS8qgquuuuqqq6666v+EW2+99bVf9VVflUc+8pEcHR3xF3/xFzw/trHNv5Zt/i1sY5t/LdvYxjb/VraxjW3+rWxjG9v8e9nGNrb5j2Yb29jmP5ttbGMb29jmv5ttbGMb29jGNv/b2MY2trGNbf63sI1t/rMsl0v+4R/+AYAP//AP/26uuuqqq6666qoXFeX48eNcddVVV1111VX/u9Va3/umm25674/7uI8D4I//+I85OjriXyKJfwtJ/FtJ4t9KEv9ekviPIIn/KJL4zySJ/2qS+J9KEv+bSeJ/Okn8Z5imie3tbU6dOnUc4B/+4R9+h6uuuuqqq6666l9CcNVVV1111VVX/a/X9/1rvc/7vA8A586d49y5c7wobGObfy3b2Obfwja2+bewjW3+PWxjm38v29jmP4JtbGMb2/xHs41tbGOb/wq2sY1tbGOb/ylsYxvb2MY2/5vYxja2+Z/KNrb5j7ZcLnnqU58KwOu8zuu89zXXXPNgrrrqqquuuuqqfwnl+PHjXHXVVVddddVV/7u9wiu8wk+/xVu8BQC/+7u/yzRN/FtI4t9CEv9Wkvi3ksR/BEn8R5DEfzRJ/GeSxH8XSfxPJon/TSTxP5Ek/iOtVisWiwXXXXfd8c3NzeN/+qd/+jNcddVVV1111VUvDMFVV1111VVXXfW/Wt/37/0Wb/EWADz+8Y/n6OgI29jmX8s2tvnXso1t/i1sY5t/C9vY5t/LNrb597KNbWzzH8U2trHNfwbb2MY2tvmvZBvb2MY2/9PYxja2sc3/dLaxjW3+J7GNbf4jPfWpTwXgdV7ndd77xV7sxV6bq6666qqrrrrqhSG46qqrrrrqqqv+V3v913/9z3rkIx/J0dERj3/843kg2/xb2Obfwja2+bewjW3+LWxjG9v8e9jGNrb597KNbWzzH8U2trHNfxbb2MY2tvmvZBvb2MY2tvmfxDa2sY1tbPM/lW1sY5v/KWzzH2W1WvEP//APAHz4h3/4d3HVVVddddVVV70wBFddddVVV1111f9atdb3fr/3e78HA/z5n/85z49tbPOvZRvb/FvYxjb/Fraxzb+VbWzz72Ub2/xHsI1t/iPZxja2+c9kG9vYxjb/1WxjG9vY5n8a29jGNrb5n8g2tvmfwDb/US5evMhyueSaa6558Ou8zuu8N1ddddVVV1111QtCcNVVV1111VVX/a/1oR/6oe8FcPbsWc6dO8cLYxvb/GvZxjb/Frb5t7KNbf6tbGObfy/b2MY2/162sY1t/iPZxja2sc1/JtvYxja2+a9mG9vYxja2+Z/ENraxjW3+J7GNbWzz38k2/xGWyyVPe9rTAHjHd3zHz+Kqq6666qqrrnpBCK666qqrrrrqqv+Vrrnmmge/1mu91msDPP7xj+dFZZt/C9vY5l/LNrb5t7KNbf6tbGOb/wi2sc1/BNvYxjb/0WxjG9v8Z7ONbWzz38U2trGNbf4nsY1tbPM/iW1s89/FNv8RLl68yMWLF7nmmmse/Dqv8zrvzVVXXXXVVVdd9fwQXHXVVVddddVV/yt9+Id/+HcBPOMZz+DcuXP8a9jGNv8Wtvm3sI1t/q1sY5t/K9vYxjb/XraxjW3+I9jGNrb5j2Yb29jmP5ttbGMb2/x3sY1tbGOb/ylsYxvb/E9hG9v8b7VcLnnqU58KwDu90zt9NlddddVVV1111fNDcNVVV1111VVX/a/zYi/2Yq/9Yi/2Yq8N8LjHPQ7b/FvYxjb/Wraxzb+FbWzzb2Ub2/x72MY2/xFsY5v/KLaxjW3+o9nGNraxzX8229jGNrb572Ib29jGNv8T2MY2tvmfwDb/1WzzH+HixYtcvHiRM2fOPOh1Xud13purrrrqqquuuuq5EVx11VVXXXXVVf/rvNM7vdNnATzjGc/g6OgIANvY5t/CNv8WtrHNv4VtbPNvZRvb/HvYxjb/EWxjG9v8R7GNbWzzn8E2trHNfwXb2MY2tvnvYhvb2OZ/AtvYxjb/nWxjm/9KtvmP8NSnPhWAd3zHd/wsrrrqqquuuuqq50Zw1VVXXXXVVVf9r/JiL/Zir/1iL/Zirw3w53/+5zw329jmX8s2tvm3sI1t/i1sY5t/K9vY5t/DNraxzX8E29jGNv9RbGMb2/xnsI1tbPNfxTa2sc1/F9vYxja2+e9mG9vY5r+Lbf4r2ebf6+LFi1y8eJFrrrnmwa/zOq/z3lx11VVXXXXVVQ9EcNVVV1111VVX/a/yTu/0Tp8F8LjHPY4Xxjb/Fraxzb+FbWzzb2Eb2/xb2cY2/162sc1/FNvY5j+SbWxjm/8MtrGNbWzzX8E2trGNbf672MY2tvnvZhvb/HewjW3+N3nqU58KwDu+4zt+FlddddVVV1111QMRXHXVVVddddVV/2u82Iu92Gu/2Iu92GsDPP7xj+dfYhvb/FvY5t/KNv9WtrHNv5VtbGObfw/b2OY/im1sY5v/SLaxjW3+s9jGNrb5r2Ib29jmv4ttbGOb/062sc1/B9v8V7DNv9fFixe5ePEi11xzzYNf53Ve57256qqrrrrqqqvuR3DVVVddddVVV/2v8U7v9E6fBfC4xz2Ofw3b/FvYxjb/Fraxzb+VbWzz72Eb2/x72MY2tvmPYhvb2OY/km1sY5v/LLaxjW3+q9jGNraxzX8H29jGNv9dbGOb/2q2+d/iqU99KgDv+I7v+FlcddVVV1111VX3I7jqqquuuuqqq/5XeLEXe7HXfrEXe7HXBnj84x/Pv5ZtbPNvYRvb/FvYxjb/Vraxzb+HbWzz72Ub2/xHso1t/qPZxja2+c9iG9vYxjb/VWxjG9v8d7CNbWzz38E2tvmvZJv/bLb591qtVly8eJFrrrnmwS/2Yi/22lx11VVXXXXVVQAEV1111VVXXXXV/wqv8zqv814At956K7axzb+FbWzzb2Gbfyvb2Obfyja2+fewjW3+vWxjG9v8R7GNbWzzH802trHNfybb2MY2/1VsYxvb/HewjW1s81/NNrb5r2Kb/+mWyyV33XUXAO/0Tu/0WVx11VVXXXXVVQAEV1111VVXXXXV/3jXXHPNg1/ndV7nvQEe97jHcT/b2Obfwjb/Fraxzb+VbWzzb2Ub2/x72MY2/xFsY5v/SLaxjW3+o9nGNrb5z2Qb29jmv4ptbGOb/w62sc1/NdvY5r+Cbf4z2ebf6+LFiwC82Iu92Gu/+Iu/+Gtz1VVXXXXVVVcRXHXVVVddddVV/+O94zu+42cB3HrrrRwdHfHcbPNvYRvb/FvYxjb/Vraxzb+VbWzz72Eb29jm38s2tvmPZhvb/GewjW1s85/JNraxzX8V29jGNv/VbGMb2/xXso1t/rPZ5n+y5XLJU5/6VABe+7Vf+7246qqrrrrqqqsIrrrqqquuuuqq//Fe53Ve570BHve4x/GC2MY2/xa2+beyjW3+rWxjm38r29jm38s2tvn3so1tbPMfyTa2sc1/BtvYxjb/mWxjG9v8V7GNbWzzX802tvmvZJv/bLb5n+zuu+8G4MVf/MVf55prrnkwV1111VVXXfX/G8FVV1111VVXXfU/2uu8zuu8N8Ctt97K0dER/xLb/FvYxjb/Vrb597DNv4dtbPPvZRvb/EewjW3+o9nGNrb5z2Ab29jmP5NtbGOb/yq2sY1t/ivZxjb/VWxjm/9MtvnPYJt/r+VyycWLFzlz5syDXuzFXuy1ueqqq6666qr/3wiuuuqqq6666qr/0d7xHd/xswCe8Yxn8KKyjW3+LWxjm38L29jm38o2tvn3sI1t/r1sY5v/CLaxjW3+o9nGNrb5z2Ab29jmP5NtbGOb/yq2sY1t/qvYxjb/VWzzn8k2/1M99alPBeAd3/EdP4urrrrqqquu+v+N4Kqrrrrqqquu+h/rdV7ndd77mmuuefDh4SFnz57lX8s2/1a2+beyjW3+rWxjm38P29jm38s2trHNfwTb2OY/g21s85/FNrb5z2Yb29jmv4ptbPNfxTa2+a9gm/+PLl68yMWLF7nmmmse/GIv9mKvzVVXXXXVVVf9/0Vw1VVXXXXVVVf9j/U6r/M67wXwuMc9Dtv8W9jGNv8WtrHNv5VtbPNvZRvb/HvYxjb/EWxjm/8ItrGNbf6j2cY2tvnPYBvb2OY/m21sY5v/CraxjW3+K9jGNv/ZbPOfxTb/0WzzH+Guu+4C4J3e6Z0+i6uuuuqqq676/4vKVVddddVVV131P9aLvdiLvTbA2bNnAbCNJP4tbCOJfwvbAEji38I2AJL4t7ANgCT+rWxzP0n8e9gGQBL/EWwDIIn/aLa5nyT+o9nmfpL4z2QbAEn8V7ANgCT+s9kGQBL/WWwDIIn/aLaRxP80Fy5cAODMmTMP5qqrrrrqqqv+/6IcP36cq6666qqrrrrqf54P//AP/66HPOQhL33rrbdy66238twk8W8liX8rSfx7SOLfSxL/ESTxH0ES/9Ek8Z9FEv/ZJPFfQRL/VSTxX0US/5kk8R9NEv+RJPHvNU0TJ0+e5PTp08cB/uEf/uF3uOqqq6666qr/fwiuuuqqq6666qr/kV7sxV7stQFuvfVWnh/b/FvZ5t/KNrb5t7KNbf49bGObfy/b2Obfyza2sc1/FNvY5j+DbWxjm/8strHNfzbb2MY2/9lsY5v/Crb5z2Sb/2i2+Z/oaU97GgAv/uIv/tpcddVVV1111f9PBFddddVVV1111f84r/M6r/Pe11xzzYMBzp49ywtiG9v8W9jGNv9WtrHNv5VtbPPvYRvb/HvZxjb/EWxjm/8otrHNfxbb2OY/i21sY5v/bLaxzX8229jmP5ttbPOfxTb/HyyXSwBe7MVe7LVf7MVe7LW56qqrrrrqqv9/CK666qqrrrrqqv9xXuzFXuy1AP7hH/6BF4Vt/q1sY5t/K9v8e9jGNv8etrHNv5dtbPMfwTa2+Y9iG9vY5j+DbWxjm/8strGNbf4z2cY2/9lsY5v/bLb5z2Kb/0i2+Y9im/8Iq9WKu+66C4AXe7EXey2uuuqqq6666v8fgquuuuqqq6666n+c13md13lvgGc84xm8qGxjm38r2/xb2cY2/x62sc2/h21s8+9lG9v8R7CNbf4j2cY2/1lsYxvb/GexjW3+M9nGNrb5z2Qb2/xnss1V/3Z33303AK/zOq/z3lx11VVXXXXV/z8EV1111VVXXXXV/yiv8zqv894At956K4eHh/xr2ebfyja2+beyjW3+PWzz72Ub2/x72cY2/xFsYxvb/EexjW1s85/FNrb5z2Ib2/xns41t/jPZxjb/WWxjm/9otvmPZJv/KSQBsFwuAbjmmmse/OIv/uKvzVVXXXXVVVf9/0Jw1VVXXXXVVVf9j/JiL/ZirwVw33338W9lG9v8W9nm38M2tvm3so1t/r1sY5t/L9vY5j+KbWzzH8k2tvnPYhvb/GexjW1s85/JNrb5z2Qb2/xnsc1/NNv8X7ZarbjrrrsAeOxjH/taXHXVVVddddX/LwRXXXXVVVddddX/KK/zOq/z3gBnz57FNrb5t7LNv5VtbPPvYZt/D9vY5t/LNrb597KNbf6j2MY2/5FsYxvb/GewjW1s85/FNrb5z2Qb2/xnss1/Ftv8R7PNfxTb/E9z9913A/C6r/u678NVV1111VVX/f9CcNVVV1111VVX/Y/xOq/zOu8NcOutt3J4eMj9bPNvZRvb/FvZxjb/Vraxzb+HbWzz72Ub2/x72cY2/1FsY5v/aLaxzX8W29jmP4ttbPOfyTa2+c9iG9v8Z7DNVS+65XIJwJkzZx70Yi/2Yq/NVVddddVVV/3/QXDVVVddddVVV/2P8WIv9mKvBXDffffx3Gxjm38r2/x72Obfwza2+fewjW3+vWxjm38v29jGNv8RbGMb2/xHso1t/rPYxja2+c9gG9vY5j+LbWzzn8U2/xls8x/JNv9XrVYrLl68CMCLvdiLvRZXXXXVVVdd9f8HwVVXXXXVVVdd9T/G67zO67w3wNmzZ3lBbPNvZRvb/FvZxjb/Hrb597KNbf69bGOb/wi2sc1/FNvY5j+SbWzzn8k2tvnPYhvb/GexjW3+M9jGNv/RbPMfyTb/EWzzP83TnvY0AF78xV/8tbnqqquuuuqq/z8Irrrqqquuuuqq/xFe53Ve570Bbr31Vg4PD3lhbPPvYZt/D9vY5t/KNrb597KNbf69bGOb/wi2sc1/FNvY5j+SbWxjm/8strHNfxbb2OY/i23+s9jmP5ptrvqXLZdLAM6cOfNgrrrqqquuuur/D4Krrrrqqquuuup/hBd7sRd7rcPDQ+677z5eFLaxzb+VbWzz72Gbfw/b2Obfyzb/EWxjm/8ItrHNfxTb2OY/mm1s85/FNrb5z2Ib2/xnsI1t/jPY5j+abf6j2OZ/Atv8R1qtVly8eJFrrrnmwS/2Yi/22lx11VVXXXXV/w8EV1111VVXXXXV/wgv9mIv9tqbm5ucPXuWfw3b/HvY5t/DNrb597CNbf49bGOb/wi2sc1/BNvY5j+KbWzzH802tvnPYhvb/GexjW3+M9jGNv/RbGOb/0i2+Z/ENv/TXLx4EYAXe7EXey2uuuqqq6666v8Hgquuuuqqq6666r/dNddc8+BrrrnmwQCHh4f8a9nGNv9WtrHNv4dt/r1s8+9lG9v8R7CNbf4j2MY2/1FsYxvb/EeyjW3+s9jGNrb5z2Ab2/xnsM1/Btv8R7LNfwTb/G8miefn4sWLALzO67zOe3PVVVddddVV/z8QXHXVVVddddVV/+1e7MVe7LUBnv70p/PvYZt/D9v8e9jGNv8etrHNv5dtbPMfwTb/UWxjm/9ItrHNfyTb2MY2/1lsY5v/DLb5z2Ab2/xHs83/RLb5v2a5XAJwzTXXPPiaa655MFddddVVV131fx/BVVddddVVV1313+51Xud13gvg7Nmz2MY2/1a2sc2/lW1s8+9hG9v8e9jGNv9etrHNv5dtbPMfxTa2+Y9kG9v8R7ONbf6z2MY2/9FsY5v/DLb5j2ab/yi2uer5W61WXLx4EYAzZ848mKuuuuqqq676v4/gqquuuuqqq676b/diL/Zirw1w3333cT/b/HvY5t/DNrb597DNv5dtbPPvZRvb/HvZxjb/UWxjm/9ItrHNfzTb2OY/i21s8x/NNrb5j2Yb2/xHss1/FNv8T2Cb/2kuXrwIwIu92Iu9FlddddVVV131fx/BVVddddVVV1313+p1Xud13hvgvvvu4/DwkAeyzb+HbWzz72Gbfw/b2Obfyzb/EWzzH8E2tvmPYhvb/EeyjW3+o9nGNv9ZbPOfwTa2+Y9mm/9ItvmPYpt/L9v8X3Px4kUAXvzFX/y1ueqqq6666qr/+wiuuuqqq6666qr/VmfOnHkQwOHhIc+PbWzz72Gbfw/b2Obfwza2+fewjW3+vWxjm/8ItrHNfxTb2OY/km1s8x/NNrb5z2Ab2/xnsM1/NNv8R7LNVf95lsslAGfOnHkwV1111VVXXfV/H8FVV1111VVXXfXf6pprrnkwwNmzZ3lhbPPvYRvb/HvY5t/LNv9etrHNv5dtbPMfwTa2+Y9iG9v8R7KNbf6j2cY2/xlsY5v/aLaxzX8k2/xHss1/BNv8e9nm/5LVasXFixe55pprHvxiL/Zir81VV1111VVX/d9GcNVVV1111VVX/bd6ndd5nfcGuO+++/iX2MY2/x62+fewjW3+PWxjm38v29jm38s2tvmPYBvb/EexjW3+I9nGNv/RbGOb/wy2sc1/NNv8R7KNbf6j2OY/gm3+P5HEv+TixYsAvNiLvdhrcdVVV1111VX/txFcddVVV1111VX/bV7sxV7stXmmw8NDXlS2+fewjW3+PWzz72Ub2/x72eY/gm1s8x/BNrb5j2Ib2/xHso1t/qPZ5j+Lbf6j2cY2/5Fs8x/FNv/b2eZ/mosXLwLw4i/+4q/NVVddddVVV/3fRnDVVVddddVVV/23ueaaax4M8PSnP51/Ldv8e9nm38M2tvn3ss2/l21s8x/BNrb5j2Ab2/xHsY1t/iPZxjb/kWxjm/8MtrHNfzTb/Eeyzf8ktvn3sM3/JcvlEoAzZ848mKuuuuqqq676v43gqquuuuqqq676b/NiL/ZirwVw9uxZ/i1sY5t/D9v8e9nm38s2tvn3so1t/iPY5j+KbWzzH8U2tvmPZBvb/EeyjW3+M9jGNv+RbPMfyTb/EWxz1X+Oa6655sFcddVVV1111f9tBFddddVVV1111X+bF3uxF3ttgHvvvZd/D9v8e9jGNv8etrHNv5dt/iPYxjb/XraxzX8U29jmP4ptbPMfyTa2+Y9kG9v8Z7DNfyTb2OY/im3+I9jm38s2V12xWq24ePEiAC/+4i/+2lx11VVXXXXV/10EV1111VVXXXXVf5trrrnmwQCHh4fY5t/DNrb597DNv5dtbPPvYRvb/EewzX8E29jmP4ptbPMfxTa2+Y9kG9v8R7KNbf6j2cY2/5Fs8x/FNv8RbPPfyTb/F505c+bBXHXVVVddddX/XQRXXXXVVVddddV/ixd7sRd7bYDDw0PuZ5t/L9v8e9jGNv9etvn3so1t/r1sY5v/CLaxzX8U2/xHso1t/iPZ5j+abf4z2OY/km3+o9jmfwLb/F8miRfVxYsXAThz5syDuOqqq6666qr/uwiuuuqqq6666qr/Ftdcc82DAe677z4eyDa2+fewzb+Xbf69bGObfy/b/EewjW3+I9jGNv8RbGOb/0i2+Y9kG9v8R7KNbf6j2cY2/1Fs8x/FNv9etrnqP8bFixcBePEXf/HX4aqrrrrqqqv+7yK46qqrrrrqqqv+W7zYi73YawEcHh7y/Njm38M2tvn3sI1t/r1s8+9lG9v8R7DNfxTb/EexjW3+o9jGNv+RbGOb/0i2+c9gm/8otvmPYpt/L9v8e9jm38o2/1csl0sArrnmmgdz1VVXXXXVVf93EVx11VVXXXXVVf+tDg8PeUFs8+9lm38v2/x72cY2/162sc2/l21s8x/BNrb5j2Ib2/xHsY1t/iPZxjb/UWxjm/9otvmPYpv/KLb5/8Y2/9OsVisAzpw58yCuuuqqq6666v8ugquuuuqqq6666r/Fi73Yi702wH333ccLYxvb/HvYxjb/Hraxzb+Xbf4j2OY/gm1s8x/BNrb5j2Ib2/xHsY1t/iPZ5j+SbWzzH8k2tvmPYBvb/E9gm38P2/x/J4mLFy8C8GIv9mKvzVVXXXXVVVf930Rw1VVXXXXVVVf9t7jmmmseDHB4eMiLwjb/Xrb597LNv5dtbPPvZRvb/EewjW3+I9jGNv9RbPMfyTb/kWxjm/9ItvmPZpv/KLb597LNv5dtrrrqqquuuuqqq/4FBFddddVVV1111X+5F3uxF3ttgMPDQ/41bPPvZZt/L9vY5t/LNv8RbGOb/wi2+Y9im/8otrHNfxTb2OY/km3+I9nmP5pt/qPY5t/LNv8b2ea/giT+NSTxr7VarQB4sRd7sdfiqquuuuqqq/5vIrjqqquuuuqqq/7LXXPNNQ8GuO+++/jXso1t/j1sY5t/L9v8e9nGNv8RbPMfwTa2+Y9gG9v8R7GNbf6j2MY2/1FsY5v/KLaxzX8k2/xHsc2/l23+PWzzb2Wb/++WyyVXXXXVVVdd9X8cwVVXXXXVVVdd9b+Sbf69bPPvZRvb/HvZxjb/XraxzX8E29jmP4JtbPMfxTa2+Y9iG9v8R7GNbf6j2OY/km2u+v9NEgC7u7sAvPiLv/hrc9VVV1111VX/NxFcddVVV1111VX/5V7sxV7stQDuu+8+/j1s8+9lG9v8e9nmP4Jt/iPY5j+Kbf6j2MY2/1Fs8x/JNv+RbPMfxTa2+Y9iG9v8e9nm38s2/x62ueqqq6666qqrrnoBCK666qqrrrrqqv82trHNv4dtbPPvZZt/L9vY5t/LNrb597KNbf4j2MY2/1Fs8x/FNrb5j2Ib2/xHsc1/JNv8R7LNv5dt/r1s89/BNv+fLZdLAM6cOfNgrrrqqquuuur/JoKrrrrqqquuuuq/3Iu92Iu9NsB9990HgG3+vWzz72Ub2/x72eY/gm3+I9jGNv8RbGOb/wi2sc1/FNv8R7LNfxTb2OY/im3+I9nm38s2/51sc9VVV1111VVXXfV8EFx11VVXXXXVVf8j2Obfyza2+feyzb+XbWzz72Ub2/xHsM1/FNv8R7HNfxTb2OY/im1s8x/FNv9RbPMfyTb/Xrb597DN/xa2+Z9EEi8qSdxvtVoBcM011zyYq6666qqrrvq/ieCqq6666qqrrvovd8011zwY4PDwkAeyjW3+vWzz72Wb/wi2+Y9gm/8ItrHNfwTb2OY/gm1s8x/FNrb5j2Kb/yi2sc1/BNvY5j+Kbf69bPPvYZt/K9v8W9jm/7PlcgnANddc82Cuuuqqq6666v8egquuuuqqq6666r/UNddc82D+Bbb597LNv5dtbPPvZRvb/HvZxjb/EWzzH8U2/1FsY5v/KLb5j2Ib2/xHsc1/FNv8R7HNVf8/nTlz5sFcddVVV1111f89BFddddVVV1111X+Lw8NDXhjb/HvZxjb/Xrb5j2Cb/wi2+Y9gG9v8R7CNbf6j2OY/im1s8x/FNv9RbPMfxTb/UWzz72Gbfw/bXPVfZ7VacdVVV1111VX/hxFcddVVV1111VX/pc6cOfNggMPDQ/4ltvmPYJt/L9vY5t/LNrb597KNbf4j2MY2/xFsY5v/CLaxzX8U2/xHsY1t/iPYxjb/EWzzH8U2/x62+e9gm6teMElcddVVV1111f8zBFddddVVV1111X+pa6655sEAh4eHvChsY5t/L9v8R7DNfwTb/EewzX8U2/xHsc1/FNv8R7GNbf6j2OY/im3+I9jmfwrb/FvZ5r+Sbf6/Wq1WAFxzzTUP5qqrrrrqqqv+7yG46qqrrrrqqqv+V7DNv5dtbPPvZZv/CLb5j2Ab2/xHsI1t/iPYxjb/EWxjm/8otvmPYpv/KLb5j2Cb/wi2+d/INv+fSOKqq6666qqrrnqBCK666qqrrrrqqv81bPMfwTb/Xraxzb+XbWzzH8E2/1Fs8x/FNv9RbPMfxTa2+Y9gG9v8R7DNfwTb/Eewzb+Hbf6tbPM/mW2uuuqqq6666qr/8Qiuuuqqq6666qr/UmfOnHkQwMHBAf8WtrHNv5dt/iPY5j+Cbf4j2MY2/xFsY5v/CLaxzX8E29jmP4pt/qPY5j+Cbf4j2OY/gm3+PWxz1X8/STw/y+USgDNnzjyIq6666qqrrvq/h+Cqq6666qqrrvpfyTb/Xraxzb+XbWzz72Ub2/xHsM1/FNv8R7HNfxTb/EexzX8U2/xHsI1t/r1s8x/BNv8dbPNvYZt/Ldv8TyGJq6666qqrrrrqPwTBVVddddVVV131X+qaa655MMDh4SH/Xrb5j2Cb/wi2+Y9gm/8ItrHNfwTb2OY/gm1s8x/BNrb5j2Ab2/xHsI1t/iPY5t/LNv/dbHPVVVddddVVV13134Dgqquuuuqqq676b2Obfy/b/EewzX8E2/xHsI1t/iPY5j+Kbf6j2OY/im3+o9jmP4pt/iPY5t/LNv9etvn3sM2/hW2uuuqqq6666qqr/o0Irrrqqquuuuqq/1a2+feyjW3+vWxjm38v29jmP4Jt/iPYxjb/EWxjm/8ItrHNfwTb2OY/gm1s8x/BNv8RbPPvZZt/L9v8b2Gb/+sk8aKQxFVXXXXVVVf9P0Vw1VVXXXXVVVf9t7PNfwTb/EewzX8E2/xHsI1t/iPY5j+Kbf6j2OY/im3+o9jmP4Jt/iPY5t/LNv9etvm3ss2/hW2uuuqqq6666qqr/g0Irrrqqquuuuqq/xFs8x/BNv8RbPMfwTa2+Y9gm/8ItrHNfwTb2OY/gm1s8x/BNv9RbPMfwTb/EWzz72Wbq54/21x11VVXXXXVVf+nEFx11VVXXXXVVf9j2MY2/162sc2/l21s8x/BNv8RbPMfxTb/UWzzH8U2/xFsY5v/CLb5j2Cb/wi2+e9mm38r2/xb2OZfyzZXXXXVVVddddX/awRXXXXVVVddddX/OLb5j2Cb/wi2+Y9gm/8ItrHNfwTb2OY/gm3+o9jmP4pt/iPYxjb/Xraxzb+Xbf49bPPvZZur/ueTxAuzWCwAOHv27DO46qqrrrrqqv97CK666qqrrrrqqv+RbPMfwTb/EWzzH8E2tvmPYJv/KLb5j2Ab2/xHsI1t/iPY5j+Kbf4j2Obfyzb/Hrb572Kb/wtsc9VVV1111VVX/Y9GcNVVV1111VVX/Y9lm/8ItvmPYBvb/EewzX8E29jmP4Jt/qPY5j+Kbf4j2MY2/xFs8x/BNv9etvn3sM2/h23+K9nmqquuuuqqq6666l+B4Kqrrrrqqquu+i9133333QqwubnJi8I2tvn3so1t/iPY5j+Cbf6j2OY/gm1s8x/BNrb5j2Cb/yi2+Y9gm/8Itvn3ss2/h23+PWzzb2Gb/wq2+b9IEv8R5vM5APfdd9+tXHXVVVddddX/PQRXXXXVVVddddX/Crb5j2Cb/wi2+Y9gG9v8R7DNfxTb/EexzX8E29jmP4Jt/iPY5j+Cbf69bHPVfwzb/HeSxFVXXXXVVVdd9R+G4Kqrrrrqqquu+l/DNv8RbPMfwTa2+Y9gm/8ItrHNfwTb2OY/gm3+o9jmP4Jt/iPY5j+Cbf472ebfwzb/Frb517LNVS8aSfxLFosFAGfPnr2Vq6666qqrrvq/h+Cqq6666qqrrvpfxTb/EWzzH8U2/xFs8x/FNv9RbPMfwTa2+Y9gm/8ItrHNv5dtbPPvZZt/D9v8e9jmqquuuuqqq6666v8Ygquuuuqqq6666r/U2bNnnwGwubnJv5Vt/iPYxjb/EWzzH8E2tvmPYJv/KLb5j2Kb/wi2sc1/BNv8R7DNv5dt/j1s8+9hm38r2/xb2OY/m22uev7m8zkA9913361cddVVV1111f89BFddddVVV1111X+p++6771aAzc1N/j1sY5v/CLb5j2Cb/yi2+Y9gG9v8R7CNbf4j2OY/im3+I9jmP4Jt/r1s8+9hm//rbHPVVVddddVVV131IiC46qqrrrrqqqv+V7PNfwTb/EewjW3+I9jmP4pt/qPY5j+CbWzzH8E2/xFs8x/BNv9etvn3sM2/lW3+rWxz1X8+SfxLJPEvWSwWANx33323ctVVV1111VX/N1G56qqrrrrqqqv+S509e/ZWgK2tLWwjiX8v20ji38s2AJL497KNJP69bAMgiX8v20jiP4JtJPEfwTaS+PeyjST+vWwjiX8v20ji38M2kvjf4JGPfCQbGxs8N0nY5oEkYZsHksR/Nkn8d5LEfxZJ2OaBJPEvmc/nAJw9e/ZWrrrqqquuuur/JipXXXXVVVddddV/K9tI4t/LNpL4j2AbSfx72UYS/xFsI4l/L9sASOLfyzYAkvj3so0k/r1sI4l/L9tI4t/LNpL472IbSfxb2EYSL4rXe73XY2Njg6v+d/qHf/iH3/6RH/mRz+Gqq6666qqr/m+ictVVV1111VVX/Ze67777bgXY3NzkfraRxL+XbQAk8e9lG0n8e9kGQBL/XraRxH8E20jiP4JtJPHvZRtJ/HvZBkAS/x62AZDEv4dtJPFvZRtJ/FvZRhL/FraRxAuzsbHBxsYGAF//9V//3oB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDwnA+I5GRDPyYB4TgbEczIgnpMB8ZwMiOdkQDzAfffdd+s//MM//DZXXXXVVVdd9X8Tlauuuuqqq6666r/cfffdd+s111zz4M3NTQ4PDwGwjST+I9hGEv9etpHEfwTbSOLfyzYAkvj3so0k/iPYRhL/XrYBkMS/l20k8e9lG0n8e9hGEv9WtpHEv5VtJPGf4dSpUwD81m/91nf/1m/91vdw1VVXXXXVVVdd9T8LwVVXXXXVVVdd9V/u7NmztwJsbW3xQLb5j2Kb/wi2sc1/BNv8R7HNfwTb2OY/gm3+o9jmP4Jt/iPY5t/LNv8etvnvYJsX5uabbwbgH/7hH36Hq6666qqrrrrqqv95CK666qqrrrrqqv9RbGOb/wi2+Y9im/8ItvmPYpv/KLb5j2Ab2/xHsM1/BNv8R7DNv5dt/j1s829lm38r27wgp06dAuAf/uEffpurrrrqqquuuuqq/3kIrrrqqquuuuqq/3J///d//9sA11xzDS+Ibf4j2OY/im3+I9jGNv8RbPMfxTb/UWzzH8E2/xFs8x/BNv9etvn3sM2/lW3+I918880A/NZv/dZ333fffbdy1VVXXXXVVVdd9T8PwVVXXXXVVVdd9T+Wbf4j2MY2/xFs8x/FNv8RbGOb/wi2+Y9im/8ItvmPYJv/CLb5/8g2z+3UqVNcddVVV1111VVX/Q9HcNVVV1111VVX/Zf7h3/4h98BuPbaa/mX2OY/im3+I9jmP4pt/qPY5j+CbWzzH8E2/xFsY5t/L9v8R7DNv4dt/j1s829lm/8op06dAuC3fuu3voerrrrqqquuuuqq/5kIrrrqqquuuuqq/3Jnz569FWBra4sXhW3+o9jmP4JtbPMfwTb/UWzzH8U2/xFs8x/FNv9etrHNv5dt/j1s8+9hm38r2/xb2OaBNjY2APiHf/iH3+aqq6666qqrrrrqfyaCq6666qqrrrrqfwXb/EexzX8U2/xHsI1t/iPY5j+Kbf4j2MY2/xFs8x/BNv9etvn3sM2/h23+u9x8880A/NZv/dZ3c9VVV1111VVXXfU/F8FVV1111VVXXfVf7r777rv1vvvuu3Vzc5Nrr72WF5VtbPMfwTb/UWzzH8U2/xFsY5v/CLb5j2Kb/wi2+Y9gm38v2/x72Oa/g23+LWwDcOrUKQD+4R/+4Xe46qqrrrrqqquu+p+L4Kqrrrrqqquu+m9x9uzZW/k3ss1/BNvY5j+Cbf6j2OY/im3+I9jGNv8RbPMfwTb/EWzz72Wbfw/b/FvZ5t/KNv9Wp06dAuAf/uEffpurrrrqqquuuuqq/7kIrrrqqquuuuqq/xZ///d//9sA11xzDf8WtvmPYpv/CLaxzX8E2/xHsc1/FNv8R7DNfwTb/EewzX832/xb2ea/0k033cTGxgYA9913361cddVVV1111VVX/c9FcNVVV1111VVX/bf4h3/4h98BuPbaa/m3ss1/FNv8R7HNfwTb2OY/gm3+o9jmP4Jt/iPY5j+Cbf49bPO/kW3+rX7rt37ru7nqqquuuuqqq676n43gqquuuuqqq676b3H27NlbAba2tvj3sM1/FNv8R7HNfxTb/EewjW3+I9jmP4Jt/iPY5j+Cbf49bPPvYZt/K9v8V7n55psB+Id/+Iff4aqrrrrqqquuuup/NoKrrrrqqquuuuq/zX333Xfr5uYm/162+Y9im/8otvmPYpv/KLb5j2Cb/wi2sc2/l23+I9jm38M2/x62+beyzb+Fbf41Tp8+DcBv/dZvfTdXXXXVVVddddVV/7MRXHXVVVddddVV/y3uu+++W8+ePXsrwLXXXsu/l23+o9jmP4pt/qPY5j+Kbf4j2OY/im3+vWzzH8E2/x62+fewzf9UN998MwC/9Vu/9T1cddVVV1111VVX/c9HcNVVV1111VVX/bf5+7//+98GuOaaa/iPYBvb/EewjW3+I9jGNv8RbPMfxTb/EWxjm/8Itvn3ss3/BLb572CbfwvbvChOnz4NwD/8wz/8NlddddVVV1111VX/8xFcddVVV1111VX/bf7hH/7hdwCuvfZabPMfxTb/UWzzH8U2/xFsY5v/CLb5j2Kb/wi2+feyzb+Xbf69bPNvZZt/K9v8Zzl16hQA//AP//DbXHXVVVddddVVV/3PR3DVVVddddVVV/23OXv27K0Am5ubANjmP4pt/qPY5j+Kbf6j2OY/gm3+o9jmP4Jt/r1s8+9lm/9OtvmvZJt/ycbGBgD33XffrVx11VVXXXXVVVf9z0dw1VVXXXXVVVf9t7nvvvtuBdja2mJzcxMA2/xHsc1/FNv8R7HNfxTb/EewjW3+I9jmP4Jt/r1s8+9lm38P2/x3sM2/hW1ekJtvvhmA3/qt3/purrrqqquuuuqqq/53ILjqqquuuuqqq/5b/cM//MNvA2xtbXE/2/xHsc1/FNv8R7HNfxTb/EexzX8E2/xHsM2/l23+vWzz72Gbfyvb/E9x+vRpAP7hH/7hd7jqqquuuuqqq67634Hgqquuuuqqq676b/X3f//3vw3w0Ic+lAeyzX8U2/xHsc1/FNv8R7HNfxTb/EewzX8E2/x72ebfyzb/Hrb5t7LNv4Vt/i1s8/zcfPPNAPzDP/zDb3PVVVddddVVV131vwPBVVddddVVV1313+of/uEffgfg2muv5bnZ5j+Kbf6j2MY2/xFs8x/FNv9RbPMfwTb/EWzz72Wbfy/b/HvY5t/KNv8WtvmPcPPNN3O/++6771auuuqqq6666qqr/ncguOqqq6666qqr/ludPXv2VoCtrS2uvfZanptt/qPYxjb/UWzzH8E2tvmPYJv/KLb5j2Cb/wi2+feyzb+Xbf4/On36NAC/9Vu/9d1cddVVV1111VVX/e9BcNVVV1111VVX/be67777bv2Hf/iH3+aFsM1/JNv8R7HNfxTb/EewjW3+I9jmP4Jt/iPY5t/LNv+dbPNvZZt/C9v8a9nmgU6dOgXAP/zDP/wOV1111VVXXXXVVf97EFx11VVXXXXVVf/tfuu3fut7AF7yJV+SF8Q2tvmPYpv/KLb5j2Kb/yi2+Y9gm/8ItvmPYJt/L9v8e9jm38M2/9tsbGwA8Fu/9VvfzVVXXXXVVVddddX/HgRXXXXVVVddddV/u3/4h3/4bYDNzU3+Jbb5j2Kb/yi2+Y9im/8otvmPYJv/CLb5j2Cbfy/b/HvY5r+Dbf4tbPOvZRuAm2++GYDf+q3f+m6uuuqqq6666qqr/nchuOqqq6666qqr/tvdd999t/7DP/zDb29tbXHttdfyL7HNfxTb/EexzX8U2/xHsc1/BNv8R7DNfwTb/HvZ5t/DNv9Wtvm3ss1/pdOnTwPwD//wD7/DVVddddVVV1111f8uBFddddVVV1111f8If//3f//bANdeey0vCtv8R7HNfxTb/EexzX8U2/xHsM1/BNv8R7DNv5dt/j1s829lm/9KtvnXss2pU6cA+Id/+Iff5qqrrrrqqquuuup/F4Krrrrqqquuuup/hH/4h3/4HYCHPvShvKhs8x/FNv9RbPMfxTb/UWzzH8E2/xFs8x/BNv+b2ebfwjb/FTY2NtjY2ADgvvvuu5Wrrrrqqquuuuqq/10Irrrqqquuuuqq/xHOnj17K8DW1hbXXnstLyrb/EexzX8U2/xHsc1/FNv8R7CNbf69bPMfwTb/Hrb597DN/xa2+dc4ffo0AL/1W7/13Vx11VVXXXXVVVf970Nw1VVXXXXVVVf9j3Dffffd+g//8A+/DXDttdfyr2Gb/yi2+Y9iG9v8R7CNbf4j2OY/im3+vWzzH8E2/x62+fewzb+Vbf4tbPOf7dSpUwD8wz/8w+9w1VVXXXXVVVdd9b8PwVVXXXXVVVdd9T/Gj/zIj3wOwLXXXsu/lm3+o9jmP5Jt/qPY5j+Cbf6j2Obfyzb/E9jm38M2/1a2+bewzb+WbV5Ut9xyCwD/8A//8NtcddVVV1111VVX/e9DcNVVV1111VVX/Y9x9uzZWwGuvfZarr32Wv61bPMfxTa2+Y9im/8otvmPYJv/KLb597LNv5dt/r1sc9UVt9xyCwC/9Vu/9T333XffrVx11VVXXXXVVVf970Nw1VVXXXXVVVf9j3Hffffd+g//8A+/DXDttdfyb2Gb/0i2+Y9im/8otvmPYJv/KLb597LNv5dt/r1s829lm38r2/xb2OZfyzb/klOnTnHVVVddddVVV131vxzBVVddddVVV131P8qP/MiPfA7AQx/6UP6tbPMfyTb/UWzzH8U2/xFs8x/FNv9etvn3ss1/J9v8X3D69GkAfuu3fuu7ueqqq6666qqrrvrfieCqq6666qqrrvof5ezZs7cCbG1tce211/JvZZv/SLb5j2Kb/yi2+Y9gm/8otvn3ss2/l23+PWzz38E2/xa2+deyzQuzsbEBwD/8wz/8NlddddVVV1111VX/OxFcddVVV1111VX/o9x33323/tZv/dZ3Azz0oQ/l38M2/5Fs8x/FNv9RbPMfwTb/k9jm38s2/x62+beyzb+Vbf673XLLLQD81m/91ndz1VVXXXXVVVdd9b8XwVVXXXXVVVdd9T/Oj/7oj34OwLXXXsu/l23+I9nmP4pt/qPY5j+Cbf4j2OY/gm3+vWzz72Gbfyvb/Feyzb+WbZ6fU6dOAfAP//APv8NVV1111VVXXXXV/14EV1111VVXXXXV/zj33Xffrf/wD//w21tbW1x77bX8e9nGNv9RbPMfxTb/UWzzH8E2/xFs8x/BNv+b2ebfwjb/nU6fPg3AP/zDP/w2V1111VVXXXXVVf97EVx11VVXXXXVVf8j/dZv/db3ALzkS74k/1Fs8x/FNv9RbPMfxTb/EWzzH8E2/xFs8+9hm38P2/xvYZt/Lds80C233MLGxgYA9913361cddVVV1111VVX/e9FcNVVV1111VVX/Y/0D//wD78NcO2113LttdfyH8U2/1Fs8x/FNv9RbPMfwTb/EWzzH8E2/x62+fewzb+Vbf4tbPPf6bd+67e+m6uuuuqqq6666qr/3Qiuuuqqq6666qr/ke67775bf+u3fuu7AR760IfyH8k2/1Fs8x/FNv9RbPMfwTb/EWzzP4Ft/j1s81/NNv9atvn3uPnmmwH4h3/4h9/hqquuuuqqq6666n83gquuuuqqq6666n+sH/3RH/0cgGuvvZb/aLb5j2Kb/yi2+Y9im/8ItvmPYJt/L9v8e9nmv4Nt/iezzf1Onz4NwG/91m99N1ddddVVV1111VX/uxFcddVVV1111VX/Y9133323/sM//MNvb21t8dCHPpT/aLb5j2Kb/yi2+Y9im/8ItvmPYJt/L9v8d7LNv5Vt/i1s869lm3+Lm2++GYDf+q3f+m6uuuqqq6666qqr/vcjuOqqq6666qqr/kf7rd/6re8BeMmXfEls8x/NNv9RbPMfxTb/UWzzH8E2/xFs8+9lm38P2/x72Ob/ItucPn0agPvuu+9Wrrrqqquuuuqqq/73I7jqqquuuuqqq/5H+4d/+Iffvu+++27d2tri2muvxTb/0WzzH8U2/1Fs8x/FNv8RbPMfwTb/Xrb597DNfwfb/FvY5l/LNv9ap0+fBuC3f/u3v4errrrqqquuuuqq//0Irrrqqquuuuqq/9Huu+++W3/0R3/0cwBe6qVeCgDb/EezzX8U2/xHsc1/FNv8R7DNfwTb/HvZ5t/DNv9Wtvm3ss3/VBsbGwDcd999t3LVVVddddVVV131vx/BVVddddVVV131P94//MM//DbAtddey7XXXguAbf6j2eY/im3+o9jmP4pt/iPY5j+Cbf43s81/Jdv8a9nmRXXLLbcA8Fu/9VvfzVVXXXXVVVddddX/DQRXXXXVVVddddX/ePfdd9+tv/Vbv/XdAC/1Ui/F/WzzH802/1Fs8x/FNv9RbPMfwTb/E9jm38M2/x1s8z/N6dOnAfiHf/iH3+Gqq6666qqrrrrq/waCq6666qqrrrrqf4Uf/dEf/RyAa6+9lmuvvZb72eY/mm3+o9jmP4pt/qPY5j+Cbf69bPPvZZt/D9v8W9nmv5Jt/rVs86K45ZZbAPiHf/iH3+aqq6666qqrrrrq/waCq6666qqrrrrqf4X77rvv1t/6rd/6boCHPexhPJBt/qPZ5j+Kbf6j2OY/im3+I9jm38s2/162+fewzb+Vbf4tbPM/xS233ML97rvvvlu56qqrrrrqqquu+r+B4Kqrrrrqqquu+l/jR3/0Rz8H4Nprr+Xaa6/lgWzzH802/1Fs8x/FNv9RbPMfwTb/Xra56kVjm/9op0+fBuC3fuu3voerrrrqqquuuuqq/zsIrrrqqquuuuqq/zXuu+++W3/rt37ru7e2tnipl3opnptt/qPZ5j+Kbf6j2OY/im3+p7DNv4dt/j1s829lm38L2/xXsM0Lc/r0aQD+4R/+4be56qqrrrrqqquu+r+D4Kqrrrrqqquu+l/lR3/0Rz8H4Nprr+Xaa6/ludnmP5pt/qPY5j+Kbf4nsc1/BNv8e9jm38M2/9Vs869lm/9IGxsbAPzWb/3Wd3PVVVddddVVV131fwfBVVddddVVV131v8p9991362/91m99N8BLvdRL8fzY5j+abf6j2OY/im3+I9jmP4Jt/iewzX8H2/xPZpvn55ZbbgHgt37rt76bq6666qqrrrrqqv9bCK666qqrrrrqqv91fvRHf/RzAK699lquvfZanh/b/EezzX8U2/xHsc1/BNv8R7DNv5dt/jvZ5t/KNv8WtvnXss1/hNOnTwPwD//wD7/DVVddddVVV1111f8tBFddddVVV1111f869913361f//Vf/z4Ar/qqr8oLYpv/aLb5j2Kb/yi2+Y9gm/8Itvn3ss2/h23+PWzz/8Xp06cB+Id/+Iff5qqrrrrqqquuuur/FoKrrrrqqquuuup/pb//+7//rfvuu+/Wra0tHvawh/GC2OY/mm3+o9jmP4pt/iPY5j+Cbf69bPPvYZv/Drb5t7DNv5Zt/jVs89w2NjYAuO+++27lqquuuuqqq6666v8Wgquuuuqqq6666n+ls2fPPuNHf/RHPwfgJV/yJXlhbPMfzTb/UWzzH8U2/xFs8x/BNv/dbPNvZZv/62655RYAfuu3fuu7ueqqq6666qqrrvq/h+Cqq6666qqrrvpf67d+67e++x/+4R9+e2tri1d91VflhbHNfzTb/EexzX8U2/xHsM3/BLb572Sbfwvb/FvY5l/LNv8atrnf6dOnAfiHf/iH3+Gqq6666qqrrrrq/x6Cq6666qqrrrrqf7Uf+ZEf+RyAa6+9lq2tLV4Y2/xHs81/FNv8R7HNfwTb/HvZ5t/LNv8etvnvYJv/6W655RYA/uEf/uG3ueqqq6666qqrrvq/h+Cqq6666qqrrvpf7R/+4R9++7d+67e+e2tri1d91VflX2Kb/2i2+Y9im/9pbPPvZZt/L9v8e9jm38o2/5Vs81/hlltuAeC3fuu3vvu+++67lauuuuqqq6666qr/ewiuuuqqq6666qr/9X70R3/0cwCuvfZarr32Wv4ltvmfzDb/EWzzP4lt/r1s87+Nbf4r2OZfwzanT5/mqquuuuqqq6666v84gquuuuqqq6666n+9++6779av//qvfx+AV33VV+VFYZv/SLb5j2Sb/wi2+Y9gm/8ItvnvZJt/K9v8V7LNf7bTp08D8Fu/9Vvfw1VXXXXVVVddddX/TQRXXXXVVVddddX/Cf/wD//w23//93//21tbW7zqq74qLwrb/Eeyzf9EtvmPYJv/CWzz72Gbfyvb/FvY5r+Cbf41NjY2APiHf/iH3+aqq6666qqrrrrq/yaCq6666qqrrrrq/4T77rvv1q//+q9/b4Brr72Wa6+9lv8OtvmPYpv/KLb5j2Cbfy/b/HvZ5v8D2/xnueWWWwD4rd/6re/mqquuuuqqq6666v8ugquuuuqqq6666v+Ms2fPPuNHfuRHPntra4tXfdVX5UVhm/9otvmPYpv/KLb5j2Cbfy/b/Heyzb+Vbf4tbPNfwTYvijNnzgDwD//wD7/DVVddddVVV1111f9dBFddddVVV1111f8pv/3bv/09//AP//DbW1tbvORLviQvCtv8R7PNfxTb/EexzX8E2/x72ebfwzb/Hrb538A2/xlOnz4NwD/8wz/8NlddddVVV1111VX/dxFcddVVV1111VX/p9x33323fv3Xf/37ADzsYQ/j2muv5UVhm/9otvmPYpv/KLb5v8I2/x1s829hm/8JbrnlFjY2NgC47777buWqq6666qqrrrrq/y6Cq6666qqrrrrq/5z77rvv1h/5kR/57K2tLV71VV+VF5Vt/qPZ5j+Kbf4nsc2/l23+vWzzb2Wbfyvb/E9lmxfFb/3Wb30PV1111VVXXXXVVf+3EVx11VVXXXXVVf8n/fZv//b3/MM//MNvb21t8aqv+qq8qGzzH802/1Fs8x/BNv8RbPPvZZv/Trb5r2Sbfy3b/Ed60IMeBMA//MM//DZXXXXVVVddddVV/7cRXHXVVVddddVV/yfdd999t37913/9+wA87GEP49prr+VFZZv/aLb5j2Kb/wi2+Y9gm38v2/x72Oa/g23+p7LNC3L69GkAfuu3fuu7ueqqq6666qqrrvq/jeCqq6666qqrrvo/67777rv167/+698H4FVf9VXZ2triRWWb/2i2+Y9im/8ItvmPYJv/brb5t7LNfyXb/GvZ5j/CLbfcAsBv/dZvfTdXXXXVVVddddVV//cRXHXVVVddddVV/6f91m/91nf/1m/91ndvbW3xqq/6qvxr2OY/mm3+p7HN/wS2+d/INv+bnDlzBoD77rvvVq666qqrrrrqqqv+7yO46qqrrrrqqqv+z/vRH/3Rz7nvvvtuvfbaa3nJl3xJ/jVs8z+Vbf6j2Obfyzb/Xrb597DNv5Vt/ivZ5l/LNv8atnlup0+fBuC3f/u3v4errrrqqquuuuqq//sIrrrqqquuuuqq//Puu+++W7/+67/+fQAe9rCHce211/KvYZv/SLb5j2Kb/0ls8+9lm38P2/xb2ebfwjb/W2xsbABw33333cpVV1111VVXXXXV/30EV1111VVXXXXV/wv/8A//8Ns/8iM/8tlbW1u86qu+KltbW/xr2OY/km3+o9jmP4Jt/iPY5qoXjW3+tWzzb3XLLbcA8Fu/9VvfzVVXXXXVVVddddX/DwRXXXXVVVddddX/G7/927/9Pf/wD//w21tbW7zBG7wB/91s8x/FNv8RbPM/gW3+PWzzb2Wbfwvb/E9km/udOXMGgH/4h3/4Ha666qqrrrrqqqv+fyC46qqrrrrqqqv+37jvvvtu/fqv//r3ue+++27d2triVV/1VfnXsM1/NNv8R7HNfwTb/HvZ5t/LNv/b2OZfyzb/VW655RYA/uEf/uG3ueqqq6666qqrrvr/geCqq6666qqrrvp/5b777rv1Mz/zM18b4GEPexgv+ZIvyb+Gbf6j2eZ/Gtv8e9nmv5Nt/q1s8z+Zbf41bHPLLbdwv/vuu+9Wrrrqqquuuuqqq/5/ILjqqquuuuqqq/7fOXv27DO+/uu//n0AHvawh3Httdfyr2Gb/2i2+Y9gm/9JbPPvYZt/D9v8W9nm38I2/1q2+c925swZAH7rt37ru7nqqquuuuqqq676/4Pgqquuuuqqq676f+m3fuu3vvtHfuRHPntra4tXfdVXZWtri38N2/xPZZv/CLb5n8A2Vz0v2/xrnD59GoB/+Id/+B2uuuqqq6666qqr/v+gHD9+nKuuuuqqq6666v+nf/iHf/ida6655sGPetSjXvrmm2/mjjvuYBgG/jUk8R9JEv9RJPEfQRL/XpL495DEv4ck/q0k8W8hiX8tSfxrSOJF9ZIv+ZIAfMmXfMnbcNVVV1111VVXXfX/B8FVV1111VVXXfX/2o/+6I9+zj/8wz/89tbWFm/wBm/Av5Zt/iPZ5j+Kbf4j2Obfyzb/Hrb597DN/2cPetCDAPit3/qt7+aqq6666qqrrrrq/xeCq6666qqrrrrq/7X77rvv1q//+q9/n/vuu+/Wra0tXvVVX5V/Ldv8R7LNfxTb/F9hm/8Otvm3sM2/lm3+NWzzojh9+jQA//AP//A7XHXVVVddddVVV/3/QnDVVVddddVVV/2/d9999936mZ/5ma8N8LCHPYyXfMmX5L+bbf4nsc2/l23+O9nm/6szZ84A8A//8A+/zVVXXXXVVVddddX/LwRXXXXVVVddddVVwNmzZ5/xIR/yIQ8BeKmXeile8iVfkn8N2/xHs81/BNv8R7DNv5dt/j1s89/BNv8WtvnPZpt/ycbGBgD33XffrVx11VVXXXXVVVf9/0Jw1VVXXXXVVVdd9Uz33XffrV//9V//PgAv9VIvxUu91Evxr2Gb/6ls8x/BNv9etvn3sM2/lW3+p7PNf6QHPehBAPzWb/3W93DVVVddddVVV131/w/BVVddddVVV1111QP81m/91nd//dd//fsAvORLviQv+ZIvyb+Gbf4j2eY/im2uAtv8W9jm38I2/51Onz4NwD/8wz/8NlddddVVV1111VX//1COHz/OVVddddVVV1111QPdeuutfw3w4i/+4q+9tbVF3/fce++9/GtI4j+SJP4jSOI/giT+vSTx7yGJfytJ/FtI4t9CEv9akvjXkMTz8yqv8ioAfNd3fdfHHB4e7nLVVVddddVVV131/wvl+PHjXHXVVVddddVVVz23f/iHf/gdgJd92Zd97a2tLfq+59577+VfQxL/kSTxH0ES/xEk8e8liX8PSfxbSeLfQhL/WpL415LEv4YkntuDHvQgbrjhBn7rt37ru3/rt37re7jqqquuuuqqq676/4fKVVddddVVV1111Qvwoz/6o58D8E7v9E6f/bCHPQyAv/3bv+W/i20k8e9lG0n8e9lGEv/f2EYS/xq2kcS/hm0k8aKyjSQe6PTp01x11VVXXXXVVVf9P0c5fvw4V1111VVXXXXVVS/IP/zDP/wOwMu+7Mu+9tbWFrPZjHvvvZcXlST+I0niP4ok/r0k8e8liX8PSfxbSeLfQhL/WpL415LEv4YkHuilXuql6LqO7/qu7/qYs2fP3spVV1111VVXXXXV/z+U48ePc9VVV1111VVXXfXC/MM//MPvALzsy77sa29ubtL3Pffeey8vKkn8R5LEfwRJ/EeQxL+XJP6tJPFvJYl/K0n8a0niX0MS/xqSeKCXfMmXBODrv/7r34errrrqqquuuuqq/58ox48f56qrrrrqqquuuupf8g//8A+/A/CyL/uyr721tUXf99x77728qCTxH0kS/xEk8R9BEv8ekvj3kMS/lST+LSTxryWJfy1J/GtIAuBBD3oQN9xwA7/1W7/13X/6p3/6M1x11VVXXXXVVVf9/0Q5fvw4V111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Jr/wC7/wNbfeeutfc9VVV1111VVXXXXVC0I5fvw4V1111VVXXXXVVf9fHB4e7v7DP/zD7/zWb/3Wd996661/s7m5efymm2568LXXXsvDHvYwTpw4wTiOHB4e8u8liX8PSfxbSeLfShL/WpL415LEi0oSD/QKr/AKAHzXd33XxxweHu5y1VVXXXXVVVddddULQjl+/DhXXXXVVVddddVV/98cHR1duvXWW//6t37rt77nH/7hH34H4JGPfORLnzx5koc97GE89KEPpe977rvvPv49JPHvIYl/K0n8W0jiX0sS/1qS+NeQBMCDHvQgbrzxRn7rt37ru3/rt37re7jqqquuuuqqq6666oWhHD9+nKuuuuqqq6666qr/z86ePXvrn/7pn/7Mb/3Wb3334eHh7ou/+Iu/dt/3XHvttTzsYQ/jxIkTjOPI4eEh/1qS+PeQxL+VJP4tJPFvIYl/DUn8a0gC4BGPeATHjx/nT//0T3/6H/7hH36Hq6666qqrrrrqqqteGMrx48e56qqrrrrqqquuugqOjo4u/cM//MPv/PZv//b33HrrrX+zubl5/MYbb3zwiRMneOhDH8rDHvYwuq5DEoeHh7yoJPHvIYl/K0n8W0jiX0sS/1qSeFFJAuClXuql6Pueb/iGb3ifw8PDXa666qqrrrrqqquuemHQgx70IK666qqrrrrqqquuev7OnDnzoNd5ndd579d5ndd572uuuebBPNPh4SFPfepTue+++7j33nv5l0ji30oS/1aS+LeQxL+FJP41JPGvIYm3f/u3B+Dt3u7txFVXXXXVVVddddVV/xL0oAc9iKuuuuqqq6666qqr/mXXXHPNg9/xHd/xs17ndV7nvXmAw8NDnva0p3Hvvfdy77338vxI4t9DEv9Wkvi3kMS/liT+NSTxr/HgBz+YV3iFV+C3fuu3vvvrv/7r34errrrqqquuuuqqq/4l6EEPehBXXXXVVVddddVVV73ozpw586AXf/EXf50zZ8486J3e6Z0+mwc4PDzk3nvv5WlPexr33nsvDySJfytJ/FtJ4t9CEv9akvjXksSL6hVe4RV48IMfzNd//de/z2/91m99N1ddddVVV1111VVX/UvQgx70IK666qqrrrrqqquu+re55pprHvxiL/Zir/1iL/Zir/U6r/M6780DHB4ecu+993LvvffytKc9DUn8e0ji30oS/xaS+NeSxL+GJF5Ub/qmb8rm5iYf8iEf8pD77rvvVq666qqrrrrqqquu+pegBz3oQVx11VVXXXXVVVdd9e93zTXXPPjMmTMPfrEXe7HXevEXf/HXfrEXe7HX5gEODw+59957edrTnsZ9993Hv5Yk/q0k8W8hiX8tSfxrSeJf8uAHP5hXeIVXAODt3u7txFVXXXXVVVddddVVLwr0oAc9iKuuuuqqq6666qqr/uOdOXPmQS/+4i/+Oq/zOq/zXi/2Yi/22jzA4eEhBwcHHB4e8rSnPY377ruPF4Uk/q0k8W8hiX8tSfxrSOJf8tjHPpYXe7EX47d+67e+++u//uvfh6uuuuqqq6666qqrXhToQQ96EFddddVVV1111VVX/ee65pprHnzmzJkHv9iLvdhrvfiLv/hrv9iLvdhr81wODw+59957ue+++zg4OOC+++7juUni30oS/xaS+NeSxL+GJP4lb/qmb8rm5iZf//Vf/z6/9Vu/9d1cddVVV1111VVXXfWiQA960IO46qqrrrrqqquuuuq/1jXXXPPgF3uxF3vtM2fOPOjFX/zFX/vFXuzFXpvncnh4yMHBAYeHh9x3330cHBxw3333IYl/K0n8a0niX0sS/1qSeGHe4R3eAYC3e7u3E1ddddVVV1111VVXvajQgx70IK666qqrrrrqqquu+u91zTXXPPjMmTMPvuaaax78Yi/2Yq91zTXXPPjFXuzFXpvn4/DwkPvuuw+Ae++9l8PDQ+677z5eFJL4t5DEv5Yk/jUk8YI8+MEP5hVe4RX4rd/6re/5+q//+vfmqquuuuqqq6666qoXFXrQgx7EVVddddVVV1111VX/81xzzTUPPnPmzIOvueaaB7/Yi73Ya11zzTUPfrEXe7HX5gU4PDzk8PCQw8NDAO69914ODw8BuO+++7ifJP61JPGvJYl/ja2tLTY2Ntjc3GRjYwOAa665ho2NDTY3NwH4+q//+vf5rd/6re/mqquuuuqqq6666qoXFXrQgx7EVVddddVVV1111VX/O1xzzTUPBnixF3ux136xF3ux1wK45pprHvxiL/Zir82/4PDwEIDDw0MADg8PATg8POTw8BCAw8ND7nd4eMgDHR0d8YJsbm7y3DY3NwHY3NwEYHNzk/ttbm6ysbEBwDXXXMOL4kd+5Ec++0d/9Ec/h6uuuuqqq6666qqr/jXQgx70IK666qqrrrrqqquu+t/vmmuuefCZM2cefM011zwI0Iu92Iu91jXXXPNggBd7sRd7bf6Hu++++24F+Id/+Iffvu+++24F+Id/+IffAfiHf/iH3+aqq6666qqrrrrqqn8L9KAHPYirrrrqqquuuuqqq/7vu+aaax4McObMmQcDXHPNNQ8CdObMmQddc801D+aZrrnmmgcDnDlz5sE8wDXXXPNgXoD77rvvVp7L2bNnbwW47777bgW47777buWZzp49+4z77rvvVoB/+Id/+G2uuuqqq6666qqrrvrPgh70oAdx1VVXXXXVVVddddVVV1111VVXXXXVVVf9n0Tlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9X8Y+9NHFyDypwVwAAAABJRU5ErkJggg==) +```js +exampleSketch = startSketchOn(XZ) + |> startProfileAt([0, 0], %) + |> arc(endAbsolute = [10, 0], interiorAbsolute = [5, 5]) + |> close() +example = extrude(exampleSketch, length = 10) +``` + +![Rendered example of arc 1](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEB9klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVf9r3HNNdc8GODMmTMPvuaaax4McObMmQcBnD179hkv9mIv9loA11xzzYN5gDNnzjyY5+Ps2bO38gD33XffrTzTfffdd+vZs2efAXDffffdCnD27Nlb77vvvlu56qqrrrrqqquuuup/C/SgBz2Iq6666qqrrrrqqqv+Z7jmmmsefObMmQdfc801Dz5z5syDrrnmmgdfc801Dz5z5syDr7nmmgfzP8R99913K8DZs2dvve+++24F+Id/+Iffue+++249e/bsrffdd9+tXHXVVVddddVVV131PwF60IMexFVXXXXVVVddddVV/7WuueaaB585c+bBL/ZiL/Za11xzzYOvueaaB7/Yi73Ya/MvuHjxIgC7u7sAXLx4kYsXL3K/3d1dAC5cuMD9dnd3eWGOHz/O/U6cOMH9Tpw4AcCJEycAOH78OCdOnODEiRP8S+67775bAf7hH/7ht//hH/7hdwDuu+++W//hH/7ht7nqqquuuuqqq6666r8SetCDHsRVV1111VVXXXXVVf95rrnmmge/2Iu92GufOXPmQS/+4i/+2i/2Yi/22rwAFy9eBODpT386Fy9eZHd3l4sXL7K7u8vFixf597LNf4Tjx48DcOLECU6cOMHx48c5ceIEJ06c4KEPfSgvyH333Xfr2bNnb73vvvtu/Yd/+Iffue+++279h3/4h9/mqquuuuqqq6666qr/LOhBD3oQV1111VVXXXXVVVf9x7jmmmsefObMmQe/2Iu92Gu9+Iu/+Gu/2Iu92GvzfFy8eJHd3V2e9rSnsbu7y8WLF3n605/OfzXb/HvY5vk5ceIEAA996EN5yEMewokTJzhx4gQnTpzgud133323nj179ta///u//+1/+Id/+J1/+Id/+G2uuuqqq6666qqrrvqPgh70oAdx1VVXXXXVVVddddW/zTXXXPPgM2fOPPjFXuzFXuvFX/zFX/vFXuzFXpvncvHiRZ7+9Kdz8eJFnv70p/P0pz+d/4ls829lmxfF8ePHOXHiBCdOnOChD30oJ06c4KEPfSjP7b777rv1H/7hH377t37rt77nH/7hH36bq6666qqrrrrqqqv+rdCDHvQgrrrqqquuuuqqq6560V1zzTUPfu3Xfu33evEXf/HXfrEXe7HX5rlcvHiRv/zLv+RpT3sat956K/8b2ebfwjYvCtvc78SJE5w4cYKHPvShPPShD+WhD30oD3Tffffdevbs2Vv//u///rf/4R/+4Xf+4R/+4be56qqrrrrqqquuuupFhR70oAdx1VVXXXXVVVddddUL92Iv9mKv/WIv9mKv9Tqv8zrvfc011zyYZ7p48SIXL17k6U9/Ok972tN4+tOfDoAk/q+wzb+Wbf4ltnl+Tpw4AcBDHvIQHvawh/FyL/dyPNB999136z/8wz/89j/8wz/8zm/91m99N1ddddVVV1111VVXvTDoQQ96EFddddVVV1111VVXPadrrrnmwa/92q/9Xtdcc82DX+d1Xue9eYCLFy/yl3/5lzztaU/j6U9/Og8kif+rbPOvYZt/iW1eGNucOHGCEydO8NCHPpSHPexhPPShD+V+9913363/8A//8Nv/8A//8Du/9Vu/9d1cddVVV1111VVXXfXc0IMe9CCuuuqqq6666qqrrrriHd/xHT/rmmuuefDrvM7rvDfPdPHiRS5evMjTn/50fuM3foPnJon/aJL4j2Kb/0i2+dewzb/ENi+IbR7oxIkTPPShD+WhD30oL//yL8/97rvvvlv/4R/+4bf/4R/+4Xd+67d+67u56qqrrrrqqquuugoAPehBD+Kqq6666qqrrrrq/7Nr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eEEk8dx2dnZ4sRd7MW6++WZuvvlmHujw8JB7772Xg4MD/u7v/o4XRhJX/d9km3+Nzc1Nrr32Wq699loe+tCH8twuXbrE3//933Pbbbdx++23Y5vnxzbPzTbPzTbPzTYPZJsHss0D2eaBbHM/29zPNvezzf1scz/b3M82ALa5n20AbANgGwDbANjGNgC2AbCNbQBsYxvb2MY2trGNbWyTmWQmmUlrjWEYbh2G4SFcddVVV1111VX/XuhBD3oQV1111VVXXXXVv0/Xde996tSp74oIIgJJRASSkIQkACQhCUkASEISAJIAkASAJO4nCQBJAEjifpK4nyTuJ4kHksT9JPFAknggSTw3STw3STw3STw/knh+JPGCSOJ+N998MzfddBOv+qqvynM7PDzkqU99Kvfddx/33nsv/1EkcdX/TLb5z7S5ucm1117LQx/6UK699loe6NKlS9x+++3cdttt/N3f/R3PzTbPzTbPzTYPZJvnZpsHss0D2eZ+tnkg29zPNvezzf1scz/bANjmfrYBsA2AbQBsA2AbANsA2AbANrYBsI1tbANgG9vYxja2yUxsk5lkJplJa42Dg4PXkfTbXHXVVVddddVV/x7oQQ96EFddddVVV1111b/P8ePHf2uxWLx2RBARSEISkpCEJCQhCQBJSAJAEgCSAJAEgCQAJAEgiftJ4n6SuJ8k7ieJ+0nigSTxQJJ4IEk8kCSemySemySeH0k8P5J4QY4dO8aLvdiLcezYMV7sxV6MBzo8POSpT30q9913H/feey//nSRx1X8s2/xPsrm5ybXXXsu1117LNddcw9bWFve7dOkSt912G7fffjt/93d/x/1s89xs89xs80C2eW62eSDbPJBt7mebB7LN/WxzP9vczzYAtrmfbQBscz/bANgGwDYAtgGwDYBtbANgG9sA2MY2trGNbWxjG9vYJjPJTDKT1hqr1eq3p2l6Ha666qqrrrrqqn8P9KAHPYirrrrqqquuuurf59prr3UphYhAEhGBJCQhCQBJSEISAJKQBIAkACQBIAkASdxPEgCSuJ8k7ieJ+0nifpJ4IEk8kCQeSBIPJInnJonnJonnRxLPjySe287ODi/+4i/OzTffzM0338wDHRwc8LSnPY2nPvWpHB4eIon/bSTx/5Vt/rexzfOzubnJwx72MK699lquvfZa7nfp0iX29vb4u7/7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YRvb2Obf6tixYwCcPXv2Vq666qqrrrrqPw6Vq6666qqrrvpPYhsASfxPYZsHksT/FrZ5fiTx/5ltXlSSuOr/Dttc9S+zzf9mtvmfyDb/0Y4dOwbAfffddytXXXXVVVdd9R+H4Kqrrrrqqqv+A9133323Atx8883czza2sc3/NLaxjW1sY5v/bWxjG9vYxjZXPX+2sY1tbGMb29jGNraxjW1sYxvbXPWfyza2sY1tbGMb29jGNraxjW1sY5urnpdtbGMb29jmfxPb2MY2trHN/yS2sY1trrrqqquuuup/ESpXXXXVVVdd9R/ovvvuu5UXwjYPJIn/aWzzQJL438Y2z48krvrXs81/NEn8b2Sbq/772eb/Atv8T2ab/0o7OzsA3Hfffbdy1VVXXXXVVf9xqFx11VVXXXXVf6CzZ88+A+CWW27hD/7gD/iX2OZ+kvifyDYPJIn/rWzz/Ejiqv9atrnqqn+Jbf4vsc3/dLb573Ls2DEAzp49+wyuuuqqq6666j8Olauuuuqqq676D3Tffffdyr+RbR5IEv8T2ea5SeJ/M9u8IJK46qqr/vPY5v8i2/xvYJv/KY4dOwbAfffddytXXXXVVVdd9R+HylVXXXXVVVf9Bzp79uytAMeOHeOWW27h0qVL/EeRxP8Wkrjqqquu+v/ENv9b2OZ/EtsAHDt2DICzZ8/eylVXXXXVVVf9x6Fy1VVXXXXVVf+B7rvvvlvvu+++W6+55poHv8u7vAtXXXXVVVddddWL7r777rv1vvvuu5Wrrrrqqquu+o+DHvSgB3HVVVddddVV/9G+6Zu+6elcddVVV1111VX/Kh/yIR/yEK666qqrrrrqPxZ60IMexFVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Slauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q/hHYAboqeqs2acAAAAASUVORK5CYII=) + diff --git a/docs/kcl/arcTo.md b/docs/kcl/arcTo.md deleted file mode 100644 index c34d599a3..000000000 --- a/docs/kcl/arcTo.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: "arcTo" -excerpt: "Draw a three point arc." -layout: manual ---- - -Draw a three point arc. - -The arc is constructed such that the start point is the current position of the sketch and two more points defined as the end and interior point. The interior point is placed between the start point and end point. The radius of the arc will be controlled by how far the interior point is placed from the start and end. - -```js -arcTo( - data: ArcToData, - sketch: Sketch, - tag?: TagDeclarator, -): Sketch -``` - - -### Arguments - -| Name | Type | Description | Required | -|----------|------|-------------|----------| -| `data` | [`ArcToData`](/docs/kcl/types/ArcToData) | Data to draw a three point arc (arcTo). | Yes | -| `sketch` | [`Sketch`](/docs/kcl/types/Sketch) | | Yes | -| [`tag`](/docs/kcl/types/tag) | [`TagDeclarator`](/docs/kcl/types#tag-declaration) | | No | - -### Returns - -[`Sketch`](/docs/kcl/types/Sketch) - - -### Examples - -```js -exampleSketch = startSketchOn(XZ) - |> startProfileAt([0, 0], %) - |> arcTo({ end = [10, 0], interior = [5, 5] }, %) - |> close() -example = extrude(exampleSketch, length = 10) -``` - -![Rendered example of arcTo 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAAEB9klEQVR4Ae3AA6AkWZbG8f937o3IzKdyS2Oubdu2bdu2bdu2bWmMnpZKr54yMyLu+Xa3anqmhztr1a8+6EEP4qqrrrrqqquuuuqqq6666qqrrrrqqquu+j+JylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVf9r3HNNdc8GODMmTMPvuaaax4McObMmQcBnD179hkv9mIv9loA11xzzYN5gDNnzjyY5+Ps2bO38gD33XffrTzTfffdd+vZs2efAXDffffdCnD27Nlb77vvvlu56qqrrrrqqquuuup/C/SgBz2Iq6666qqrrrrqqqv+Z7jmmmsefObMmQdfc801Dz5z5syDrrnmmgdfc801Dz5z5syDr7nmmgfzP8R99913K8DZs2dvve+++24F+Id/+Iffue+++249e/bsrffdd9+tXHXVVVddddVVV131PwF60IMexFVXXXXVVVddddVV/7WuueaaB585c+bBL/ZiL/Za11xzzYOvueaaB7/Yi73Ya/MvuHjxIgC7u7sAXLx4kYsXL3K/3d1dAC5cuMD9dnd3eWGOHz/O/U6cOMH9Tpw4AcCJEycAOH78OCdOnODEiRP8S+67775bAf7hH/7ht//hH/7hdwDuu+++W//hH/7ht7nqqquuuuqqq6666r8SetCDHsRVV1111VVXXXXVVf95rrnmmge/2Iu92GufOXPmQS/+4i/+2i/2Yi/22rwAFy9eBODpT386Fy9eZHd3l4sXL7K7u8vFixf597LNf4Tjx48DcOLECU6cOMHx48c5ceIEJ06c4KEPfSgvyH333Xfr2bNnb73vvvtu/Yd/+Iffue+++279h3/4h9/mqquuuuqqq6666qr/LOhBD3oQV1111VVXXXXVVVf9x7jmmmsefObMmQe/2Iu92Gu9+Iu/+Gu/2Iu92GvzfFy8eJHd3V2e9rSnsbu7y8WLF3n605/OfzXb/HvY5vk5ceIEAA996EN5yEMewokTJzhx4gQnTpzgud133323nj179ta///u//+1/+Id/+J1/+Id/+G2uuuqqq6666qqrrvqPgh70oAdx1VVXXXXVVVddddW/zTXXXPPgM2fOPPjFXuzFXuvFX/zFX/vFXuzFXpvncvHiRZ7+9Kdz8eJFnv70p/P0pz+d/4ls829lmxfF8ePHOXHiBCdOnOChD30oJ06c4KEPfSjP7b777rv1H/7hH377t37rt77nH/7hH36bq6666qqrrrrqqqv+rdCDHvQgrrrqqquuuuqqq6560V1zzTUPfu3Xfu33evEXf/HXfrEXe7HX5rlcvHiRv/zLv+RpT3sat956K/8b2ebfwjYvCtvc78SJE5w4cYKHPvShPPShD+WhD30oD3Tffffdevbs2Vv//u///rf/4R/+4Xf+4R/+4be56qqrrrrqqquuuupFhR70oAdx1VVXXXXVVVddddUL92Iv9mKv/WIv9mKv9Tqv8zrvfc011zyYZ7p48SIXL17k6U9/Ok972tN4+tOfDoAk/q+wzb+Wbf4ltnl+Tpw4AcBDHvIQHvawh/FyL/dyPNB999136z/8wz/89j/8wz/8zm/91m99N1ddddVVV1111VVXvTDoQQ96EFddddVVV1111VVXPadrrrnmwa/92q/9Xtdcc82DX+d1Xue9eYCLFy/yl3/5lzztaU/j6U9/Og8kif+rbPOvYZt/iW1eGNucOHGCEydO8NCHPpSHPexhPPShD+V+9913363/8A//8Nv/8A//8Du/9Vu/9d1cddVVV1111VVXXfXc0IMe9CCuuuqqq6666qqrrrriHd/xHT/rmmuuefDrvM7rvDfPdPHiRS5evMjTn/50fuM3foPnJon/aJL4j2Kb/0i2+dewzb/ENi+IbR7oxIkTPPShD+WhD30oL//yL8/97rvvvlv/4R/+4bf/4R/+4Xd+67d+67u56qqrrrrqqquuugoAPehBD+Kqq6666qqrrrrq/7Nr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eEEk8dx2dnZ4sRd7MW6++WZuvvlmHujw8JB7772Xg4MD/u7v/o4XRhJX/d9km3+Nzc1Nrr32Wq699loe+tCH8twuXbrE3//933Pbbbdx++23Y5vnxzbPzTbPzTbPzTYPZJsHss0D2eaBbHM/29zPNvezzf1scz/b3M82ALa5n20AbANgGwDbANjGNgC2AbCNbQBsYxvb2MY2trGNbWyTmWQmmUlrjWEYbh2G4SFcddVVV1111VX/XuhBD3oQV1111VVXXXXVv0/Xde996tSp74oIIgJJRASSkIQkACQhCUkASEISAJIAkASAJO4nCQBJAEjifpK4nyTuJ4kHksT9JPFAknggSTw3STw3STw3STw/knh+JPGCSOJ+N998MzfddBOv+qqvynM7PDzkqU99Kvfddx/33nsv/1EkcdX/TLb5z7S5ucm1117LQx/6UK699loe6NKlS9x+++3cdttt/N3f/R3PzTbPzTbPzTYPZJvnZpsHss0D2eZ+tnkg29zPNvezzf1scz/bANjmfrYBsA2AbQBsA2AbANsA2AbANrYBsI1tbANgG9vYxja2yUxsk5lkJplJa42Dg4PXkfTbXHXVVVddddVV/x7oQQ96EFddddVVV1111b/P8ePHf2uxWLx2RBARSEISkpCEJCQhCQBJSAJAEgCSAJAEgCQAJAEgiftJ4n6SuJ8k7ieJ+0nigSTxQJJ4IEk8kCSemySemySeH0k8P5J4QY4dO8aLvdiLcezYMV7sxV6MBzo8POSpT30q9913H/feey//nSRx1X8s2/xPsrm5ybXXXsu1117LNddcw9bWFve7dOkSt912G7fffjt/93d/x/1s89xs89xs80C2eW62eSDbPJBt7mebB7LN/WxzP9vczzYAtrmfbQBscz/bANgGwDYAtgGwDYBtbANgG9sA2MY2trGNbWxjG9vYJjPJTDKT1hqr1eq3p2l6Ha666qqrrrrqqn8P9KAHPYirrrrqqquuuurf59prr3UphYhAEhGBJCQhCQBJSEISAJKQBIAkACQBIAkASdxPEgCSuJ8k7ieJ+0nifpJ4IEk8kCQeSBIPJInnJonnJonnRxLPjySe287ODi/+4i/OzTffzM0338wDHRwc8LSnPY2nPvWpHB4eIon/bSTx/5Vt/rexzfOzubnJwx72MK699lquvfZa7nfp0iX29vb4u7/7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YRvb2Obf6tixYwCcPXv2Vq666qqrrrrqPw6Vq6666qqrrvpPYhsASfxPYZsHksT/FrZ5fiTx/5ltXlSSuOr/Dttc9S+zzf9mtvmfyDb/0Y4dOwbAfffddytXXXXVVVdd9R+H4Kqrrrrqqqv+A9133323Atx8883czza2sc3/NLaxjW1sY5v/bWxjG9vYxjZXPX+2sY1tbGMb29jGNraxjW1sYxvbXPWfyza2sY1tbGMb29jGNraxjW1sY5urnpdtbGMb29jmfxPb2MY2trHN/yS2sY1trrrqqquuuup/ESpXXXXVVVdd9R/ovvvuu5UXwjYPJIn/aWzzQJL438Y2z48krvrXs81/NEn8b2Sbq/772eb/Atv8T2ab/0o7OzsA3Hfffbdy1VVXXXXVVf9xqFx11VVXXXXVf6CzZ88+A+CWW27hD/7gD/iX2OZ+kvifyDYPJIn/rWzz/Ejiqv9atrnqqn+Jbf4vsc3/dLb573Ls2DEAzp49+wyuuuqqq6666j8Olauuuuqqq676D3Tffffdyr+RbR5IEv8T2ea5SeJ/M9u8IJK46qqr/vPY5v8i2/xvYJv/KY4dOwbAfffddytXXXXVVVdd9R+HylVXXXXVVVf9Bzp79uytAMeOHeOWW27h0qVL/EeRxP8Wkrjqqquu+v/ENv9b2OZ/EtsAHDt2DICzZ8/eylVXXXXVVVf9x6Fy1VVXXXXVVf+B7rvvvlvvu+++W6+55poHv8u7vAtXXXXVVVddddWL7r777rv1vvvuu5Wrrrrqqquu+o+DHvSgB3HVVVddddVV/9G+6Zu+6elcddVVV1111VX/Kh/yIR/yEK666qqrrrrqPxZ60IMexFVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Slauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q/hHYAboqeqs2acAAAAASUVORK5CYII=) - - diff --git a/docs/kcl/extrude.md b/docs/kcl/extrude.md index 6e67c8a67..f3b1610c9 100644 --- a/docs/kcl/extrude.md +++ b/docs/kcl/extrude.md @@ -42,11 +42,7 @@ extrude( example = startSketchOn(XZ) |> startProfileAt([0, 0], %) |> line(end = [10, 0]) - |> arc({ - angleStart = 120, - angleEnd = 0, - radius = 5 - }, %) + |> arc(angleStart = 120, angleEnd = 0, radius = 5) |> line(end = [5, 0]) |> line(end = [0, 10]) |> bezierCurve({ @@ -64,11 +60,7 @@ example = startSketchOn(XZ) ```js exampleSketch = startSketchOn(XZ) |> startProfileAt([-10, 0], %) - |> arc({ - angleStart = 120, - angleEnd = -60, - radius = 5 - }, %) + |> arc(angleStart = 120, angleEnd = -60, radius = 5) |> line(end = [10, 0]) |> line(end = [5, 0]) |> bezierCurve({ @@ -88,11 +80,7 @@ example = extrude(exampleSketch, length = 10) ```js exampleSketch = startSketchOn(XZ) |> startProfileAt([-10, 0], %) - |> arc({ - angleStart = 120, - angleEnd = -60, - radius = 5 - }, %) + |> arc(angleStart = 120, angleEnd = -60, radius = 5) |> line(end = [10, 0]) |> line(end = [5, 0]) |> bezierCurve({ @@ -112,11 +100,7 @@ example = extrude(exampleSketch, length = 20, symmetric = true) ```js exampleSketch = startSketchOn(XZ) |> startProfileAt([-10, 0], %) - |> arc({ - angleStart = 120, - angleEnd = -60, - radius = 5 - }, %) + |> arc(angleStart = 120, angleEnd = -60, radius = 5) |> line(end = [10, 0]) |> line(end = [5, 0]) |> bezierCurve({ diff --git a/docs/kcl/index.md b/docs/kcl/index.md index ccdfb68a4..1c923acd5 100644 --- a/docs/kcl/index.md +++ b/docs/kcl/index.md @@ -48,7 +48,6 @@ layout: manual * [`angledLineThatIntersects`](kcl/angledLineThatIntersects) * [`appearance`](kcl/appearance) * [`arc`](kcl/arc) - * [`arcTo`](kcl/arcTo) * [`asin`](kcl/asin) * [`assert`](kcl/assert) * [`assertEqual`](kcl/assertEqual) diff --git a/docs/kcl/std.json b/docs/kcl/std.json index abf7d4bf3..11126e376 100644 --- a/docs/kcl/std.json +++ b/docs/kcl/std.json @@ -608,7 +608,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -618,7 +618,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -2344,7 +2344,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -2354,7 +2354,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -4047,7 +4047,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -4057,7 +4057,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -5664,7 +5664,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -5674,7 +5674,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -7282,7 +7282,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -7292,7 +7292,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -8899,7 +8899,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -8909,7 +8909,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -10516,7 +10516,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -10526,7 +10526,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -12133,7 +12133,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -12143,7 +12143,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -13750,7 +13750,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -13760,7 +13760,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -15370,7 +15370,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -15380,7 +15380,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -17047,7 +17047,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -17057,7 +17057,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -18736,7 +18736,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -18746,7 +18746,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -20353,7 +20353,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -20363,7 +20363,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -21977,7 +21977,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -21987,7 +21987,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -23598,7 +23598,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -23608,7 +23608,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -25218,7 +25218,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -25228,7 +25228,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -26895,7 +26895,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -26905,7 +26905,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -28938,7 +28938,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -28948,7 +28948,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -30554,7 +30554,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -30564,7 +30564,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -32172,7 +32172,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -32182,7 +32182,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -33789,7 +33789,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -33799,7 +33799,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -35456,7 +35456,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -35466,7 +35466,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -36303,104 +36303,8 @@ "summary": "Draw a curved line segment along an imaginary circle.", "description": "The arc is constructed such that the current position of the sketch is placed along an imaginary circle of the specified radius, at angleStart degrees. The resulting arc is the segment of the imaginary circle from that origin point to angleEnd, radius away from the center of the imaginary circle.\n\nUnless this makes a lot of sense and feels like what you're looking for to construct your shape, you're likely looking for tangentialArc.", "tags": [], - "keywordArguments": false, + "keywordArguments": true, "args": [ - { - "name": "data", - "type": "ArcData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "ArcData", - "description": "Data to draw an arc.", - "anyOf": [ - { - "description": "Angles and radius with an optional tag.", - "type": "object", - "required": [ - "angleEnd", - "angleStart", - "radius" - ], - "properties": { - "angleStart": { - "description": "The start angle.", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ], - "maximum": 360.0, - "minimum": -360.0 - }, - "angleEnd": { - "description": "The end angle.", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ], - "maximum": 360.0, - "minimum": -360.0 - }, - "radius": { - "description": "The radius.", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ] - } - } - }, - { - "description": "Center, to and radius with an optional tag.", - "type": "object", - "required": [ - "center", - "radius", - "to" - ], - "properties": { - "center": { - "description": "The center.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "The radius.", - "allOf": [ - { - "$ref": "#/components/schemas/TyF64" - } - ] - } - } - } - ], - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, { "name": "sketch", "type": "Sketch", @@ -36470,10 +36374,6 @@ } }, "definitions": { - "TyF64": { - "type": "number", - "format": "double" - }, "Path": { "description": "A path.", "oneOf": [ @@ -36890,7 +36790,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -36900,7 +36800,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -38070,11 +37970,8121 @@ } } ] + }, + "TyF64": { + "type": "number", + "format": "double" } } }, "required": true, "includeInSnippet": true, + "description": "Which sketch should this path be added to?", + "labelRequired": false + }, + { + "name": "angleStart", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TyF64", + "allOf": [ + { + "$ref": "#/components/schemas/TyF64" + } + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interiorAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (endAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "units", + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": false, + "includeInSnippet": true, + "description": "Where along the circle should this arc start?", + "labelRequired": true + }, + { + "name": "angleEnd", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TyF64", + "allOf": [ + { + "$ref": "#/components/schemas/TyF64" + } + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interiorAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (endAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "units", + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": false, + "includeInSnippet": true, + "description": "Where along the circle should this arc end?", + "labelRequired": true + }, + { + "name": "radius", + "type": "number", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_TyF64", + "allOf": [ + { + "$ref": "#/components/schemas/TyF64" + } + ], + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interiorAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (endAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "units", + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": false, + "includeInSnippet": true, + "description": "How large should the circle be?", + "labelRequired": true + }, + { + "name": "interiorAbsolute", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Array_size_2_of_TyF64", + "type": "array", + "items": { + "$ref": "#/components/schemas/TyF64" + }, + "maxItems": 2, + "minItems": 2, + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interiorAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (endAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "units", + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": false, + "description": "Any point between the arc's start and end? Requires `endAbsolute`. Incompatible with `angleStart` or `angleEnd`", + "labelRequired": true + }, + { + "name": "endAbsolute", + "type": "[number]", + "schema": { + "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", + "title": "Nullable_Array_size_2_of_TyF64", + "type": "array", + "items": { + "$ref": "#/components/schemas/TyF64" + }, + "maxItems": 2, + "minItems": 2, + "nullable": true, + "definitions": { + "Path": { + "description": "A path.", + "oneOf": [ + { + "description": "A path that goes to a point.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ToPoint" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment that goes to a point", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArcTo" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A arc that is tangential to the last path segment", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "TangentialArc" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "ccw": { + "description": "arc's direction", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "a complete arc", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Circle" + ] + }, + "center": { + "description": "the arc's center", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "the arc's radius", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "arc's direction This is used to compute the tangential angle.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "CircleThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the circle", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "p1", + "p2", + "p3", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "ArcThreePoint" + ] + }, + "p1": { + "description": "Point 1 of the arc (base on the end of previous segment)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p2": { + "description": "Point 2 of the arc (interiorAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "p3": { + "description": "Point 3 of the arc (endAbsolute kwarg)", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A path that is horizontal.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units", + "x" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Horizontal" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "An angled line to.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "AngledLineTo" + ] + }, + "x": { + "description": "The x coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "y": { + "description": "The y coordinate.", + "type": "number", + "format": "double", + "nullable": true + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Base" + ] + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + { + "description": "A circular arc, not necessarily tangential to the current point.", + "type": "object", + "required": [ + "__geoMeta", + "ccw", + "center", + "from", + "radius", + "to", + "type", + "units" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Arc" + ] + }, + "center": { + "description": "Center of the circle that this arc is drawn on.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "radius": { + "description": "Radius of the circle that this arc is drawn on.", + "type": "number", + "format": "double" + }, + "ccw": { + "description": "True if the arc is counterclockwise.", + "type": "boolean" + }, + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + } + ] + }, + "UnitLen": { + "description": "A unit of length.", + "oneOf": [ + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Mm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Cm" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "M" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Inches" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Feet" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Yards" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "Unknown" + ] + } + } + } + ] + }, + "TagDeclarator": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + }, + "digest": { + "type": "array", + "items": { + "type": "integer", + "format": "uint8", + "minimum": 0.0 + }, + "maxItems": 32, + "minItems": 32, + "nullable": true + }, + "start": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "end": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + } + } + }, + "GeoMeta": { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "id", + "sourceRange" + ], + "properties": { + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + "SourceRange": { + "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", + "type": "array", + "items": { + "type": "integer", + "format": "uint", + "minimum": 0.0 + }, + "maxItems": 3, + "minItems": 3 + }, + "SketchSurface": { + "description": "A sketch type.", + "oneOf": [ + { + "type": "object", + "required": [ + "artifactId", + "id", + "origin", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "plane" + ] + }, + "id": { + "description": "The id of the plane.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "$ref": "#/components/schemas/PlaneType" + }, + "origin": { + "description": "Origin of the plane.", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "xAxis": { + "description": "What should the plane's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the plane's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + { + "description": "A face.", + "type": "object", + "required": [ + "artifactId", + "id", + "solid", + "type", + "units", + "value", + "xAxis", + "yAxis", + "zAxis" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "face" + ] + }, + "id": { + "description": "The id of the face.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The tag of the face.", + "type": "string" + }, + "xAxis": { + "description": "What should the face's X axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "yAxis": { + "description": "What should the face's Y axis be?", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "zAxis": { + "description": "The z-axis (normal).", + "allOf": [ + { + "$ref": "#/components/schemas/Point3d" + } + ] + }, + "solid": { + "description": "The solid the face is on.", + "allOf": [ + { + "$ref": "#/components/schemas/Solid" + } + ] + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + } + ] + }, + "ArtifactId": { + "type": "string", + "format": "uuid" + }, + "PlaneType": { + "description": "Type for a plane.", + "oneOf": [ + { + "type": "string", + "enum": [ + "XY", + "XZ", + "YZ" + ] + }, + { + "description": "A custom plane.", + "type": "string", + "enum": [ + "Custom" + ] + }, + { + "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", + "type": "string", + "enum": [ + "Uninit" + ] + } + ] + }, + "Point3d": { + "type": "object", + "required": [ + "units", + "x", + "y", + "z" + ], + "properties": { + "x": { + "type": "number", + "format": "double" + }, + "y": { + "type": "number", + "format": "double" + }, + "z": { + "type": "number", + "format": "double" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "Solid": { + "type": "object", + "required": [ + "artifactId", + "height", + "id", + "sketch", + "units", + "value" + ], + "properties": { + "id": { + "description": "The id of the solid.", + "type": "string", + "format": "uuid" + }, + "artifactId": { + "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "value": { + "description": "The extrude surfaces.", + "type": "array", + "items": { + "$ref": "#/components/schemas/ExtrudeSurface" + } + }, + "sketch": { + "description": "The sketch.", + "allOf": [ + { + "$ref": "#/components/schemas/Sketch" + } + ] + }, + "height": { + "description": "The height of the solid.", + "type": "number", + "format": "double" + }, + "startCapId": { + "description": "The id of the extrusion start cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "endCapId": { + "description": "The id of the extrusion end cap", + "type": "string", + "format": "uuid", + "nullable": true + }, + "edgeCuts": { + "description": "Chamfers or fillets on this solid.", + "type": "array", + "items": { + "$ref": "#/components/schemas/EdgeCut" + } + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "ExtrudeSurface": { + "description": "An extrude surface.", + "oneOf": [ + { + "description": "An extrude plane.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudePlane" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "An extruded arc.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "extrudeArc" + ] + }, + "faceId": { + "description": "The face id for the extrude plane.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "faceId": { + "description": "The id for the chamfer surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + }, + { + "description": "Geometry metadata.", + "type": "object", + "required": [ + "faceId", + "id", + "sourceRange", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "faceId": { + "description": "The id for the fillet surface.", + "type": "string", + "format": "uuid" + }, + "tag": { + "description": "The tag.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "id": { + "description": "The id of the geometry.", + "type": "string", + "format": "uuid" + }, + "sourceRange": { + "description": "The source range.", + "allOf": [ + { + "$ref": "#/components/schemas/SourceRange" + } + ] + } + } + } + ] + }, + "Sketch": { + "type": "object", + "required": [ + "artifactId", + "id", + "on", + "originalId", + "paths", + "start", + "units" + ], + "properties": { + "id": { + "description": "The id of the sketch (this will change when the engine's reference to it changes).", + "type": "string", + "format": "uuid" + }, + "paths": { + "description": "The paths in the sketch.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Path" + } + }, + "on": { + "description": "What the sketch is on (can be a plane or a face).", + "allOf": [ + { + "$ref": "#/components/schemas/SketchSurface" + } + ] + }, + "start": { + "description": "The starting path.", + "allOf": [ + { + "$ref": "#/components/schemas/BasePath" + } + ] + }, + "tags": { + "description": "Tag identifiers that have been declared in this sketch.", + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/TagIdentifier" + } + }, + "artifactId": { + "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", + "allOf": [ + { + "$ref": "#/components/schemas/ArtifactId" + } + ] + }, + "originalId": { + "type": "string", + "format": "uuid" + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + } + } + }, + "BasePath": { + "description": "A base path.", + "type": "object", + "required": [ + "__geoMeta", + "from", + "to", + "units" + ], + "properties": { + "from": { + "description": "The from point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "to": { + "description": "The to point.", + "type": "array", + "items": { + "type": "number", + "format": "double" + }, + "maxItems": 2, + "minItems": 2 + }, + "units": { + "$ref": "#/components/schemas/UnitLen" + }, + "tag": { + "description": "The tag of the path.", + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + }, + "__geoMeta": { + "description": "Metadata.", + "allOf": [ + { + "$ref": "#/components/schemas/GeoMeta" + } + ] + } + } + }, + "TagIdentifier": { + "type": "object", + "required": [ + "value" + ], + "properties": { + "value": { + "type": "string" + } + } + }, + "EdgeCut": { + "description": "A fillet or a chamfer.", + "oneOf": [ + { + "description": "A fillet.", + "type": "object", + "required": [ + "edgeId", + "id", + "radius", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "fillet" + ] + }, + "id": { + "description": "The id of the engine command that called this fillet.", + "type": "string", + "format": "uuid" + }, + "radius": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to fillet.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + }, + { + "description": "A chamfer.", + "type": "object", + "required": [ + "edgeId", + "id", + "length", + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "chamfer" + ] + }, + "id": { + "description": "The id of the engine command that called this chamfer.", + "type": "string", + "format": "uuid" + }, + "length": { + "$ref": "#/components/schemas/TyF64" + }, + "edgeId": { + "description": "The engine id of the edge to chamfer.", + "type": "string", + "format": "uuid" + }, + "tag": { + "allOf": [ + { + "$ref": "#/components/schemas/TagDeclarator" + } + ], + "nullable": true + } + } + } + ] + }, + "TyF64": { + "type": "number", + "format": "double" + } + } + }, + "required": false, + "description": "Where should this arc end? Requires `interiorAbsolute`. Incompatible with `angleStart` or `angleEnd`", "labelRequired": true }, { @@ -38090,10 +46100,6 @@ ], "nullable": true, "definitions": { - "TyF64": { - "type": "number", - "format": "double" - }, "Path": { "description": "A path.", "oneOf": [ @@ -38510,7 +46516,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -38520,7 +46526,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -39690,10 +47696,15 @@ } } ] + }, + "TyF64": { + "type": "number", + "format": "double" } } }, "required": false, + "description": "Create a new tag which refers to this line", "labelRequired": true } ], @@ -40182,7 +48193,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -40192,7 +48203,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -41376,5035 +49387,8 @@ "unpublished": false, "deprecated": false, "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> arc({\n angleStart = 0,\n angleEnd = 280,\n radius = 16\n }, %)\n |> close()\nexample = extrude(exampleSketch, length = 10)" - ] - }, - { - "name": "arcTo", - "summary": "Draw a three point arc.", - "description": "The arc is constructed such that the start point is the current position of the sketch and two more points defined as the end and interior point. The interior point is placed between the start point and end point. The radius of the arc will be controlled by how far the interior point is placed from the start and end.", - "tags": [], - "keywordArguments": false, - "args": [ - { - "name": "data", - "type": "ArcToData", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "ArcToData", - "description": "Data to draw a three point arc (arcTo).", - "type": "object", - "required": [ - "end", - "interior" - ], - "properties": { - "end": { - "description": "End point of the arc. A point in 3D space", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2 - }, - "interior": { - "description": "Interior point of the arc. A point in 3D space", - "type": "array", - "items": { - "$ref": "#/components/schemas/TyF64" - }, - "maxItems": 2, - "minItems": 2 - } - }, - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "sketch", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - { - "name": "tag", - "type": "TagNode", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Nullable_TagDeclarator", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true, - "definitions": { - "TyF64": { - "type": "number", - "format": "double" - }, - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - } - } - }, - "required": false, - "labelRequired": true - } - ], - "returnValue": { - "name": "", - "type": "Sketch", - "schema": { - "$schema": "https://spec.openapis.org/oas/3.0/schema/2019-04-02#/definitions/Schema", - "title": "Sketch", - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - }, - "definitions": { - "Path": { - "description": "A path.", - "oneOf": [ - { - "description": "A path that goes to a point.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ToPoint" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment that goes to a point", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArcTo" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A arc that is tangential to the last path segment", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "TangentialArc" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "ccw": { - "description": "arc's direction", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "a complete arc", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Circle" - ] - }, - "center": { - "description": "the arc's center", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "the arc's radius", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "arc's direction This is used to compute the tangential angle.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "CircleThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the circle", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "p1", - "p2", - "p3", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "ArcThreePoint" - ] - }, - "p1": { - "description": "Point 1 of the arc (base on the end of previous segment)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p2": { - "description": "Point 2 of the arc (interior kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "p3": { - "description": "Point 3 of the arc (end kwarg)", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A path that is horizontal.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units", - "x" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Horizontal" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "An angled line to.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "AngledLineTo" - ] - }, - "x": { - "description": "The x coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "y": { - "description": "The y coordinate.", - "type": "number", - "format": "double", - "nullable": true - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Base" - ] - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - { - "description": "A circular arc, not necessarily tangential to the current point.", - "type": "object", - "required": [ - "__geoMeta", - "ccw", - "center", - "from", - "radius", - "to", - "type", - "units" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Arc" - ] - }, - "center": { - "description": "Center of the circle that this arc is drawn on.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "radius": { - "description": "Radius of the circle that this arc is drawn on.", - "type": "number", - "format": "double" - }, - "ccw": { - "description": "True if the arc is counterclockwise.", - "type": "boolean" - }, - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - } - ] - }, - "UnitLen": { - "description": "A unit of length.", - "oneOf": [ - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Mm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Cm" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "M" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Inches" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Feet" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Yards" - ] - } - } - }, - { - "type": "object", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "Unknown" - ] - } - } - } - ] - }, - "TagDeclarator": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - }, - "digest": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0.0 - }, - "maxItems": 32, - "minItems": 32, - "nullable": true - }, - "start": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "end": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - } - } - }, - "GeoMeta": { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "id", - "sourceRange" - ], - "properties": { - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - "SourceRange": { - "description": "The first two items are the start and end points (byte offsets from the start of the file). The third item is whether the source range belongs to the 'main' file, i.e., the file currently being rendered/displayed in the editor.", - "type": "array", - "items": { - "type": "integer", - "format": "uint", - "minimum": 0.0 - }, - "maxItems": 3, - "minItems": 3 - }, - "SketchSurface": { - "description": "A sketch type.", - "oneOf": [ - { - "type": "object", - "required": [ - "artifactId", - "id", - "origin", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "plane" - ] - }, - "id": { - "description": "The id of the plane.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "$ref": "#/components/schemas/PlaneType" - }, - "origin": { - "description": "Origin of the plane.", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "xAxis": { - "description": "What should the plane's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the plane's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - { - "description": "A face.", - "type": "object", - "required": [ - "artifactId", - "id", - "solid", - "type", - "units", - "value", - "xAxis", - "yAxis", - "zAxis" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "face" - ] - }, - "id": { - "description": "The id of the face.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The tag of the face.", - "type": "string" - }, - "xAxis": { - "description": "What should the face's X axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "yAxis": { - "description": "What should the face's Y axis be?", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "zAxis": { - "description": "The z-axis (normal).", - "allOf": [ - { - "$ref": "#/components/schemas/Point3d" - } - ] - }, - "solid": { - "description": "The solid the face is on.", - "allOf": [ - { - "$ref": "#/components/schemas/Solid" - } - ] - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - } - ] - }, - "ArtifactId": { - "type": "string", - "format": "uuid" - }, - "PlaneType": { - "description": "Type for a plane.", - "oneOf": [ - { - "type": "string", - "enum": [ - "XY", - "XZ", - "YZ" - ] - }, - { - "description": "A custom plane.", - "type": "string", - "enum": [ - "Custom" - ] - }, - { - "description": "A custom plane which has not been sent to the engine. It must be sent before it is used.", - "type": "string", - "enum": [ - "Uninit" - ] - } - ] - }, - "Point3d": { - "type": "object", - "required": [ - "units", - "x", - "y", - "z" - ], - "properties": { - "x": { - "type": "number", - "format": "double" - }, - "y": { - "type": "number", - "format": "double" - }, - "z": { - "type": "number", - "format": "double" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "Solid": { - "type": "object", - "required": [ - "artifactId", - "height", - "id", - "sketch", - "units", - "value" - ], - "properties": { - "id": { - "description": "The id of the solid.", - "type": "string", - "format": "uuid" - }, - "artifactId": { - "description": "The artifact ID of the solid. Unlike `id`, this doesn't change.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "value": { - "description": "The extrude surfaces.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExtrudeSurface" - } - }, - "sketch": { - "description": "The sketch.", - "allOf": [ - { - "$ref": "#/components/schemas/Sketch" - } - ] - }, - "height": { - "description": "The height of the solid.", - "type": "number", - "format": "double" - }, - "startCapId": { - "description": "The id of the extrusion start cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "endCapId": { - "description": "The id of the extrusion end cap", - "type": "string", - "format": "uuid", - "nullable": true - }, - "edgeCuts": { - "description": "Chamfers or fillets on this solid.", - "type": "array", - "items": { - "$ref": "#/components/schemas/EdgeCut" - } - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "ExtrudeSurface": { - "description": "An extrude surface.", - "oneOf": [ - { - "description": "An extrude plane.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudePlane" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "An extruded arc.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "extrudeArc" - ] - }, - "faceId": { - "description": "The face id for the extrude plane.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "faceId": { - "description": "The id for the chamfer surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - }, - { - "description": "Geometry metadata.", - "type": "object", - "required": [ - "faceId", - "id", - "sourceRange", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "faceId": { - "description": "The id for the fillet surface.", - "type": "string", - "format": "uuid" - }, - "tag": { - "description": "The tag.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "id": { - "description": "The id of the geometry.", - "type": "string", - "format": "uuid" - }, - "sourceRange": { - "description": "The source range.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceRange" - } - ] - } - } - } - ] - }, - "Sketch": { - "type": "object", - "required": [ - "artifactId", - "id", - "on", - "originalId", - "paths", - "start", - "units" - ], - "properties": { - "id": { - "description": "The id of the sketch (this will change when the engine's reference to it changes).", - "type": "string", - "format": "uuid" - }, - "paths": { - "description": "The paths in the sketch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Path" - } - }, - "on": { - "description": "What the sketch is on (can be a plane or a face).", - "allOf": [ - { - "$ref": "#/components/schemas/SketchSurface" - } - ] - }, - "start": { - "description": "The starting path.", - "allOf": [ - { - "$ref": "#/components/schemas/BasePath" - } - ] - }, - "tags": { - "description": "Tag identifiers that have been declared in this sketch.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/TagIdentifier" - } - }, - "artifactId": { - "description": "The original id of the sketch. This stays the same even if the sketch is is sketched on face etc.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactId" - } - ] - }, - "originalId": { - "type": "string", - "format": "uuid" - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - } - } - }, - "BasePath": { - "description": "A base path.", - "type": "object", - "required": [ - "__geoMeta", - "from", - "to", - "units" - ], - "properties": { - "from": { - "description": "The from point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "to": { - "description": "The to point.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "maxItems": 2, - "minItems": 2 - }, - "units": { - "$ref": "#/components/schemas/UnitLen" - }, - "tag": { - "description": "The tag of the path.", - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - }, - "__geoMeta": { - "description": "Metadata.", - "allOf": [ - { - "$ref": "#/components/schemas/GeoMeta" - } - ] - } - } - }, - "TagIdentifier": { - "type": "object", - "required": [ - "value" - ], - "properties": { - "value": { - "type": "string" - } - } - }, - "EdgeCut": { - "description": "A fillet or a chamfer.", - "oneOf": [ - { - "description": "A fillet.", - "type": "object", - "required": [ - "edgeId", - "id", - "radius", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "fillet" - ] - }, - "id": { - "description": "The id of the engine command that called this fillet.", - "type": "string", - "format": "uuid" - }, - "radius": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to fillet.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - }, - { - "description": "A chamfer.", - "type": "object", - "required": [ - "edgeId", - "id", - "length", - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "chamfer" - ] - }, - "id": { - "description": "The id of the engine command that called this chamfer.", - "type": "string", - "format": "uuid" - }, - "length": { - "$ref": "#/components/schemas/TyF64" - }, - "edgeId": { - "description": "The engine id of the edge to chamfer.", - "type": "string", - "format": "uuid" - }, - "tag": { - "allOf": [ - { - "$ref": "#/components/schemas/TagDeclarator" - } - ], - "nullable": true - } - } - } - ] - }, - "TyF64": { - "type": "number", - "format": "double" - } - } - }, - "required": true, - "includeInSnippet": true, - "labelRequired": true - }, - "unpublished": false, - "deprecated": false, - "examples": [ - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> arcTo({ end = [10, 0], interior = [5, 5] }, %)\n |> close()\nexample = extrude(exampleSketch, length = 10)" + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> arc(angleStart = 0, angleEnd = 280, radius = 16)\n |> close()\nexample = extrude(exampleSketch, length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> arc(endAbsolute = [10, 0], interiorAbsolute = [5, 5])\n |> close()\nexample = extrude(exampleSketch, length = 10)" ] }, { @@ -47480,7 +50464,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -47490,7 +50474,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -49100,7 +52084,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -49110,7 +52094,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -50772,7 +53756,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -50782,7 +53766,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -52803,7 +55787,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -52813,7 +55797,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -54420,7 +57404,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -54430,7 +57414,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -56039,7 +59023,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -56049,7 +59033,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -57678,7 +60662,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -57688,7 +60672,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -59377,7 +62361,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -59387,7 +62371,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -61391,7 +64375,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -61401,7 +64385,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -63013,7 +65997,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -63023,7 +66007,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -64635,7 +67619,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -64645,7 +67629,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -66257,7 +69241,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -66267,7 +69251,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -67878,7 +70862,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -67888,7 +70872,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -68882,7 +71866,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -68892,7 +71876,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -70571,7 +73555,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -70581,7 +73565,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -72192,7 +75176,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -72202,7 +75186,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -73869,7 +76853,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -73879,7 +76863,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -75593,7 +78577,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -75603,7 +78587,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -77210,7 +80194,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -77220,7 +80204,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -78827,7 +81811,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -78837,7 +81821,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -80444,7 +83428,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -80454,7 +83438,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -82064,7 +85048,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -82074,7 +85058,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -83684,7 +86668,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -83694,7 +86678,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -85603,7 +88587,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -85613,7 +88597,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -86433,10 +89417,10 @@ "unpublished": false, "deprecated": false, "examples": [ - "example = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> arc({\n angleStart = 120,\n angleEnd = 0,\n radius = 5\n }, %)\n |> line(end = [5, 0])\n |> line(end = [0, 10])\n |> bezierCurve({\n control1 = [-10, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-5, -2])\n |> close()\n |> extrude(length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc({\n angleStart = 120,\n angleEnd = -60,\n radius = 5\n }, %)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve({\n control1 = [-3, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc({\n angleStart = 120,\n angleEnd = -60,\n radius = 5\n }, %)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve({\n control1 = [-3, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 20, symmetric = true)", - "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc({\n angleStart = 120,\n angleEnd = -60,\n radius = 5\n }, %)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve({\n control1 = [-3, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10, bidirectionalLength = 50)" + "example = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0])\n |> arc(angleStart = 120, angleEnd = 0, radius = 5)\n |> line(end = [5, 0])\n |> line(end = [0, 10])\n |> bezierCurve({\n control1 = [-10, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-5, -2])\n |> close()\n |> extrude(length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve({\n control1 = [-3, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10)", + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve({\n control1 = [-3, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 20, symmetric = true)", + "exampleSketch = startSketchOn(XZ)\n |> startProfileAt([-10, 0], %)\n |> arc(angleStart = 120, angleEnd = -60, radius = 5)\n |> line(end = [10, 0])\n |> line(end = [5, 0])\n |> bezierCurve({\n control1 = [-3, 0],\n control2 = [2, 10],\n to = [-5, 10]\n }, %)\n |> line(end = [-4, 10])\n |> line(end = [-5, -2])\n |> close()\n\nexample = extrude(exampleSketch, length = 10, bidirectionalLength = 50)" ] }, { @@ -87231,7 +90215,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -87241,7 +90225,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -88848,7 +91832,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -88858,7 +91842,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -90467,7 +93451,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -90477,7 +93461,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -92103,7 +95087,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -92113,7 +95097,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -93741,7 +96725,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -93751,7 +96735,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -95440,7 +98424,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -95450,7 +98434,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -97331,7 +100315,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -97341,7 +100325,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -99007,7 +101991,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -99017,7 +102001,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -100620,7 +103604,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -100630,7 +103614,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -102623,7 +105607,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -102633,7 +105617,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -104304,7 +107288,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -104314,7 +107298,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -106047,7 +109031,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -106057,7 +109041,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -107668,7 +110652,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -107678,7 +110662,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -109287,7 +112271,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -109297,7 +112281,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -110613,7 +113597,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -110623,7 +113607,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -112230,7 +115214,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -112240,7 +115224,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -113847,7 +116831,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -113857,7 +116841,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -115464,7 +118448,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -115474,7 +118458,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -117081,7 +120065,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -117091,7 +120075,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -118701,7 +121685,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -118711,7 +121695,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -120378,7 +123362,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -120388,7 +123372,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -122067,7 +125051,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -122077,7 +125061,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -123771,7 +126755,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -123781,7 +126765,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -125640,7 +128624,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -125650,7 +128634,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -127263,7 +130247,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -127273,7 +130257,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -128885,7 +131869,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -128895,7 +131879,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -130506,7 +133490,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -130516,7 +133500,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -132183,7 +135167,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -132193,7 +135177,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -133920,7 +136904,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -133930,7 +136914,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -135538,7 +138522,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -135548,7 +138532,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -137154,7 +140138,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -137164,7 +140148,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -138773,7 +141757,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -138783,7 +141767,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -140390,7 +143374,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -140400,7 +143384,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -142010,7 +144994,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -142020,7 +145004,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -143630,7 +146614,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -143640,7 +146624,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -145543,7 +148527,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -145553,7 +148537,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -148364,7 +151348,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -148374,7 +151358,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -150877,7 +153861,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -150887,7 +153871,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -153394,7 +156378,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -153404,7 +156388,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -155374,7 +158358,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -155384,7 +158368,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -156992,7 +159976,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -157002,7 +159986,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -158614,7 +161598,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -158624,7 +161608,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -160231,7 +163215,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -160241,7 +163225,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -161847,7 +164831,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -161857,7 +164841,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -163464,7 +166448,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -163474,7 +166458,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -165083,7 +168067,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -165093,7 +168077,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -167014,7 +169998,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -167024,7 +170008,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -168632,7 +171616,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -168642,7 +171626,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -170254,7 +173238,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -170264,7 +173248,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -171876,7 +174860,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -171886,7 +174870,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -173493,7 +176477,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -173503,7 +176487,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -175109,7 +178093,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -175119,7 +178103,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -176726,7 +179710,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -176736,7 +179720,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -178345,7 +181329,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -178355,7 +181339,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -179676,7 +182660,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -179686,7 +182670,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -181294,7 +184278,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -181304,7 +184288,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -182911,7 +185895,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -182921,7 +185905,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -184533,7 +187517,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -184543,7 +187527,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -186150,7 +189134,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -186160,7 +189144,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -187769,7 +190753,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -187779,7 +190763,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -189700,7 +192684,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -189710,7 +192694,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -191318,7 +194302,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -191328,7 +194312,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -192935,7 +195919,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -192945,7 +195929,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -194557,7 +197541,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -194567,7 +197551,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -196174,7 +199158,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -196184,7 +199168,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -197793,7 +200777,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -197803,7 +200787,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -199426,7 +202410,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -199436,7 +202420,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -201044,7 +204028,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -201054,7 +204038,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -202660,7 +205644,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -202670,7 +205654,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -204277,7 +207261,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -204287,7 +207271,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -205896,7 +208880,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -205906,7 +208890,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -207232,7 +210216,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -207242,7 +210226,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -208850,7 +211834,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -208860,7 +211844,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -210466,7 +213450,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -210476,7 +213460,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -212083,7 +215067,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -212093,7 +215077,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -213702,7 +216686,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -213712,7 +216696,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -216033,7 +219017,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -216043,7 +219027,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -217653,7 +220637,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -217663,7 +220647,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -218652,7 +221636,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -218662,7 +221646,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -221629,7 +224613,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -221639,7 +224623,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -224527,7 +227511,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -224537,7 +227521,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -225824,7 +228808,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -225834,7 +228818,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -227532,7 +230516,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -227542,7 +230526,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -229235,7 +232219,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -229245,7 +232229,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -232225,7 +235209,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -232235,7 +235219,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -235121,7 +238105,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -235131,7 +238115,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -238018,7 +241002,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -238028,7 +241012,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -240547,7 +243531,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -240557,7 +243541,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -243443,7 +246427,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -243453,7 +246437,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -245956,7 +248940,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -245966,7 +248950,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -248853,7 +251837,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -248863,7 +251847,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -250528,7 +253512,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -250538,7 +253522,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -252146,7 +255130,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -252156,7 +255140,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -253764,7 +256748,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -253774,7 +256758,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -255382,7 +258366,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -255392,7 +258376,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -257005,7 +259989,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -257015,7 +259999,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -258622,7 +261606,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -258632,7 +261616,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -260238,7 +263222,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -260248,7 +263232,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -261925,7 +264909,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -261935,7 +264919,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -263671,7 +266655,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -263681,7 +266665,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -265289,7 +268273,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -265299,7 +268283,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -266907,7 +269891,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -266917,7 +269901,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -268525,7 +271509,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -268535,7 +271519,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -270142,7 +273126,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -270152,7 +273136,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -271829,7 +274813,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -271839,7 +274823,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -273866,7 +276850,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -273876,7 +276860,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -275483,7 +278467,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -275493,7 +278477,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -277102,7 +280086,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -277112,7 +280096,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -278756,7 +281740,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -278766,7 +281750,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -280756,7 +283740,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -280766,7 +283750,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -282376,7 +285360,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -282386,7 +285370,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -283532,7 +286516,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -283542,7 +286526,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -285859,7 +288843,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -285869,7 +288853,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -287646,7 +290630,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -287656,7 +290640,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -289446,7 +292430,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -289456,7 +292440,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -290926,7 +293910,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -290936,7 +293920,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -292545,7 +295529,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -292555,7 +295539,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -294166,7 +297150,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -294176,7 +297160,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -295785,7 +298769,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -295795,7 +298779,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -297117,7 +300101,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -297127,7 +300111,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -298741,7 +301725,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -298751,7 +301735,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -300408,7 +303392,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -300418,7 +303402,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -302075,7 +305059,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -302085,7 +305069,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -303745,7 +306729,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -303755,7 +306739,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -305415,7 +308399,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -305425,7 +308409,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -307384,7 +310368,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -307394,7 +310378,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -308268,7 +311252,7 @@ "// Horizontal pill.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [20, 0])\n |> tangentialArc(end = [0, 10], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArc(end = [0, -10])\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", "// Vertical pill. Use absolute coordinate for arc.\npillSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [0, 20])\n |> tangentialArc(endAbsolute = [10, 20], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> tangentialArc(end = [-10, 0])\n |> close()\n\npillExtrude = extrude(pillSketch, length = 10)", "rectangleSketch = startSketchOn(XZ)\n |> startProfileAt([0, 0], %)\n |> line(end = [10, 0], tag = $seg1)\n |> angledLine(angle = tangentToEnd(seg1), length = 10)\n |> line(end = [0, 10])\n |> line(end = [-20, 0])\n |> close()\n\nrectangleExtrude = extrude(rectangleSketch, length = 10)", - "bottom = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> arcTo({ end = [10, 10], interior = [5, 1] }, %, $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> close()", + "bottom = startSketchOn(XY)\n |> startProfileAt([0, 0], %)\n |> arc(endAbsolute = [10, 10], interiorAbsolute = [5, 1], tag = $arc1)\n |> angledLine(angle = tangentToEnd(arc1), length = 20)\n |> close()", "circSketch = startSketchOn(XY)\n |> circle(center = [0, 0], radius = 3, tag = $circ)\n\ntriangleSketch = startSketchOn(XY)\n |> startProfileAt([-5, 0], %)\n |> angledLine(angle = tangentToEnd(circ), length = 10)\n |> line(end = [-15, 0])\n |> close()" ] }, @@ -308764,7 +311748,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -308774,7 +311758,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -310387,7 +313371,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -310397,7 +313381,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -312009,7 +314993,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -312019,7 +315003,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -313630,7 +316614,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -313640,7 +316624,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -315250,7 +318234,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -315260,7 +318244,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -316870,7 +319854,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -316880,7 +319864,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -318547,7 +321531,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -318557,7 +321541,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -320724,7 +323708,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -320734,7 +323718,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -322342,7 +325326,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -322352,7 +325336,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -323960,7 +326944,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -323970,7 +326954,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -325578,7 +328562,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -325588,7 +328572,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -327195,7 +330179,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -327205,7 +330189,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -328882,7 +331866,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -328892,7 +331876,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -330517,7 +333501,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -330527,7 +333511,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -332138,7 +335122,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -332148,7 +335132,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -333757,7 +336741,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -333767,7 +336751,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -335084,7 +338068,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -335094,7 +338078,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -336702,7 +339686,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -336712,7 +339696,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -338320,7 +341304,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -338330,7 +341314,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -339940,7 +342924,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -339950,7 +342934,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -341617,7 +344601,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -341627,7 +344611,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -343306,7 +346290,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -343316,7 +346300,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -344924,7 +347908,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -344934,7 +347918,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -346542,7 +349526,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -346552,7 +349536,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -348162,7 +351146,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -348172,7 +351156,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -349839,7 +352823,7 @@ "minItems": 2 }, "p2": { - "description": "Point 2 of the arc (interior kwarg)", + "description": "Point 2 of the arc (interiorAbsolute kwarg)", "type": "array", "items": { "type": "number", @@ -349849,7 +352833,7 @@ "minItems": 2 }, "p3": { - "description": "Point 3 of the arc (end kwarg)", + "description": "Point 3 of the arc (endAbsolute kwarg)", "type": "array", "items": { "type": "number", diff --git a/docs/kcl/tangentToEnd.md b/docs/kcl/tangentToEnd.md index b40491873..5c6a893b3 100644 --- a/docs/kcl/tangentToEnd.md +++ b/docs/kcl/tangentToEnd.md @@ -73,7 +73,7 @@ rectangleExtrude = extrude(rectangleSketch, length = 10) ```js bottom = startSketchOn(XY) |> startProfileAt([0, 0], %) - |> arcTo({ end = [10, 10], interior = [5, 1] }, %, $arc1) + |> arc(endAbsolute = [10, 10], interiorAbsolute = [5, 1], tag = $arc1) |> angledLine(angle = tangentToEnd(arc1), length = 20) |> close() ``` diff --git a/docs/kcl/types/Path.md b/docs/kcl/types/Path.md index 7ae908090..629d108d1 100644 --- a/docs/kcl/types/Path.md +++ b/docs/kcl/types/Path.md @@ -141,8 +141,8 @@ A base path. |----------|------|-------------|----------| | `type` |enum: `ArcThreePoint`| | No | | `p1` |`[number, number]`| Point 1 of the arc (base on the end of previous segment) | No | -| `p2` |`[number, number]`| Point 2 of the arc (interior kwarg) | No | -| `p3` |`[number, number]`| Point 3 of the arc (end kwarg) | No | +| `p2` |`[number, number]`| Point 2 of the arc (interiorAbsolute kwarg) | No | +| `p3` |`[number, number]`| Point 3 of the arc (endAbsolute kwarg) | No | | `from` |`[number, number]`| The from point. | No | | `to` |`[number, number]`| The to point. | No | | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A unit of length. | No | diff --git a/e2e/playwright/sketch-tests.spec.ts b/e2e/playwright/sketch-tests.spec.ts index 47d50b6ca..9b0822c47 100644 --- a/e2e/playwright/sketch-tests.spec.ts +++ b/e2e/playwright/sketch-tests.spec.ts @@ -45,11 +45,7 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => { screwHole = startSketchOn(XY) ${startProfileAt1} - |> arc({ - radius = screwRadius, - angleStart = 0, - angleEnd = 360 - }, %) + |> arc(angleStart = 0, angleEnd = 360, radius = screwRadius) part001 = startSketchOn(XY) ${startProfileAt2} @@ -66,11 +62,7 @@ test.describe('Sketch tests', { tag: ['@skipWin'] }, () => { |> tangentialArc(endAbsolute = [width / 2, 0]) |> xLine(length = -width / 4 + wireRadius) |> yLine(length = wireOffset) - |> arc({ - radius = wireRadius, - angleStart = 0, - angleEnd = 180 - }, %) + |> arc(angleStart = 0, angleEnd = 180, radius = wireRadius) |> yLine(length = -wireOffset) |> xLine(length = -width / 4) |> close() @@ -214,15 +206,8 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) |> startProfileAt([4.61, -14.01], %) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) - |> arcTo({ - interior = [20.18, -1.7], - end = [11.82, -1.16] - }, %) - |> arc({ - radius = 5.92, - angleStart = -89.36, - angleEnd = 135.81 - }, %) + |> arc(interiorAbsolute = [20.18, -1.7], endAbsolute = [11.82, -1.16]) + |> arc(angleStart = -89.36, angleEnd = 135.81, radius = 5.92) |> close()` ) }) @@ -264,15 +249,8 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) |> startProfileAt([4.61, -14.01], %) |> line(end = [12.73, -0.09]) |> tangentialArc(endAbsolute = [24.95, -5.38]) - |> arcTo({ - interior = [20.18, -1.7], - end = [11.82, -1.16] - }, %) - |> arc({ - radius = 5.92, - angleStart = -89.36, - angleEnd = 135.81 - }, %) + |> arc(interiorAbsolute = [20.18, -1.7], endAbsolute = [11.82, -1.16]) + |> arc(angleStart = -89.36, angleEnd = 135.81, radius = 5.92) |> close() `) } else { @@ -338,7 +316,7 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) await expect(page.locator('.cm-content')).not.toHaveText(prevContent) } - // drag arcTo interior handle (three point arc) + // drag arcTo interiorAbsolute handle (three point arc) const arcToHandle = await u.getBoundingBox('[data-overlay-index="2"]') await page.mouse.move(arcToHandle.x, arcToHandle.y - 5) await page.mouse.down() @@ -410,15 +388,8 @@ sketch001 = startProfileAt([12.34, -12.34], sketch002) |> startProfileAt([6.44, -12.07], %) |> line(end = [14.72, 1.97]) |> tangentialArc(endAbsolute = [26.92, -3.32]) - |> arcTo({ - interior = [18.11, -3.73], - end = [9.77, -3.19] - }, %) - |> arc({ - radius = 3.75, - angleStart = -58.29, - angleEnd = 161.17 - }, %) + |> arc(interiorAbsolute = [18.11, -3.73], endAbsolute = [9.77, -3.19]) + |> arc(angleStart = -58.29, angleEnd = 161.17, radius = 3.75) |> close() `) } @@ -948,7 +919,9 @@ profile001 = startProfileAt([${roundOff(scale * 69.6)}, ${roundOff( await page.mouse.move(pointA[0] - 12, pointA[1] + 12, { steps: 10 }) const pointNotQuiteA = [pointA[0] - 7, pointA[1] + 7] - await page.mouse.move(pointNotQuiteA[0], pointNotQuiteA[1], { steps: 10 }) + await page.mouse.move(pointNotQuiteA[0], pointNotQuiteA[1], { + steps: 10, + }) await page.mouse.click(pointNotQuiteA[0], pointNotQuiteA[1], { delay: 200, @@ -1500,12 +1473,12 @@ profile002 = startProfileAt([117.2, 56.08], sketch001) await circle3Point1() await page.waitForTimeout(200) await circle3Point2() - await editor.expectEditor.toContain('arcTo({') + await editor.expectEditor.toContain('arc(') }) await test.step('equip line tool and verify three-point-arc code is removed after second click', async () => { await toolbar.lineBtn.click() - await editor.expectEditor.not.toContain('arcTo({') + await editor.expectEditor.not.toContain('arc(') }) const [cornerRectPoint1] = scene.makeMouseHelpers(600, 300) @@ -1542,9 +1515,9 @@ profile002 = startProfileAt([117.2, 56.08], sketch001) await continueProfile2Clk() await page.waitForTimeout(200) await circle3Point1() - await editor.expectEditor.toContain('arcTo({') + await editor.expectEditor.toContain('arc(') await toolbar.lineBtn.click() - await editor.expectEditor.not.toContain('arcTo({') + await editor.expectEditor.not.toContain('arc(') await editor.expectEditor.toContain('profile002') }) } @@ -1841,7 +1814,9 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) await page.waitForTimeout(300) // Verify the three-point arc was created correctly - await editor.expectEditor.toContain(`|> arcTo(`) + await editor.expectEditor.toContain(`arc(`) + await editor.expectEditor.toContain(`interiorAbsolute`) + await editor.expectEditor.toContain(`endAbsolute`) // Switch back to line tool to continue await toolbar.lineBtn.click() @@ -2061,10 +2036,7 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) // Verify the first three-point arc was created correctly await editor.expectEditor.toContain( `profile011 = startProfileAt([13.56, -9.97], sketch001) - |> arcTo({ - interior = [15.19, -6.51], - end = [19.33, -11.19] - }, %)`, + |> arc(interiorAbsolute = [15.19, -6.51], endAbsolute = [19.33, -11.19])`, { shouldNormalise: true } ) @@ -2081,14 +2053,8 @@ profile003 = startProfileAt([206.63, -56.73], sketch001) // Verify the second three-point arc was created correctly await editor.expectEditor.toContain( - ` |> arcTo({ - interior = [19.8, 1.7], - end = [21.7, 2.92] - }, %) - |> arcTo({ - interior = [27.47, 1.42], - end = [27.57, 1.52] - }, %)`, + ` |> arc(interiorAbsolute = [19.8, 1.7], endAbsolute = [21.7, 2.92]) + |> arc(interiorAbsolute = [27.47, 1.42], endAbsolute = [27.57, 1.52])`, { shouldNormalise: true } ) }) @@ -2863,33 +2829,29 @@ test.describe(`Click based selection don't brick the app when clicked out of ran `sketch001 = startSketchOn(XZ) |> startProfileAt([0, 0], %) |> line(end = [3.14, 3.14]) - |> arcTo({ - end = [4, 2], - interior = [1, 2] - }, %) -` + |> arc( + interiorAbsolute = [1, 2], + endAbsolute = [4, 2] + )` ) }) await homePage.goToModelingScene() await scene.settled(cmdBar) + const formattedArc = `arc(interiorAbsolute = [1, 2], endAbsolute = [4, 2])` await test.step(`format the code`, async () => { // doesn't contain condensed version - await editor.expectEditor.not.toContain( - `arcTo({ end = [4, 2], interior = [1, 2] }, %)` - ) + await editor.expectEditor.not.toContain(formattedArc) // click the code to enter sketch mode - await page.getByText(`arcTo`).click() + await page.getByText(`arc`).click() // Format the code. await page.locator('#code-pane button:first-child').click() await page.locator('button:has-text("Format code")').click() }) await test.step(`Ensure the code reformatted`, async () => { - await editor.expectEditor.toContain( - `arcTo({ end = [4, 2], interior = [1, 2] }, %)` - ) + await editor.expectEditor.toContain(formattedArc) }) const [arcClick, arcHover] = scene.makeMouseHelpers(699, 337) @@ -2900,7 +2862,7 @@ test.describe(`Click based selection don't brick the app when clicked out of ran await editor.expectState({ activeLines: ['sketch001=startSketchOn(XZ)'], diagnostics: [], - highlightedCode: 'arcTo({end = [4, 2], interior = [1, 2]}, %)', + highlightedCode: 'arc(interiorAbsolute = [1, 2], endAbsolute = [4, 2])', }) }) @@ -2922,7 +2884,7 @@ test.describe(`Click based selection don't brick the app when clicked out of ran await editor.expectState({ activeLines: [], diagnostics: [], - highlightedCode: 'arcTo({end = [4, 2], interior = [1, 2]}, %)', + highlightedCode: 'arc(interiorAbsolute = [1, 2], endAbsolute = [4, 2])', }) }) }) @@ -3036,10 +2998,7 @@ profile001 = startProfileAt([0, 0], sketch001) |> line(end = [191.39, 191.39]) |> tangentialArc(endAbsolute = [287.08, 95.69], tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), length = 135.34) - |> arcTo({ - interior = [191.39, -95.69], - end = [287.08, -95.69] - }, %, $seg02) + |> arc(interiorAbsolute = [191.39, -95.69], endAbsolute = [287.08, -95.69], tag = $seg02) |> angledLine(angle = tangentToEnd(seg02) + turns::HALF_TURN, length = 270.67) `.replaceAll('\n', '') ) diff --git a/e2e/playwright/snapshot-tests.spec.ts b/e2e/playwright/snapshot-tests.spec.ts index 57e287740..20bf24250 100644 --- a/e2e/playwright/snapshot-tests.spec.ts +++ b/e2e/playwright/snapshot-tests.spec.ts @@ -1154,11 +1154,7 @@ sweepPath = startSketchOn(XZ) sweepSketch = startSketchOn(XY) |> startProfileAt([2, 0], %) - |> arc({ - angleEnd = 360, - angleStart = 0, - radius = 2 - }, %) + |> arc(angleStart = 0, angleEnd = 360, radius = 2) |> sweep(path = sweepPath) |> appearance( color = "#bb00ff", @@ -1186,6 +1182,7 @@ sweepSketch = startSketchOn(XY) scene, cmdBar, }) => { + test.fixme(orRunWhenFullSuiteEnabled()) const u = await getUtils(page) await context.addInitScript(async () => { localStorage.setItem( @@ -1203,11 +1200,7 @@ sweepPath = startSketchOn(XZ) sweepSketch = startSketchOn(XY) |> startProfileAt([2, 0], %) - |> arc({ - angleEnd = 360, - angleStart = 0, - radius = 2 - }, %) + |> arc(angleStart = 0, angleEnd = 360, radius = 2) |> sweep(path = sweepPath) |> appearance( color = "#bb00ff", diff --git a/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json b/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json index 57ebd7528..b359cd1a3 100644 --- a/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json +++ b/e2e/playwright/snapshots/prompt-to-edit/prompt-to-edit-snapshot-tests-spec-ts--edit-with-ai-example-snapshots--change-colour.snap.json @@ -29,5 +29,5 @@ } } ], - "kcl_version": "0.2.61" + "kcl_version": "0.2.62" } \ No newline at end of file diff --git a/e2e/playwright/testing-segment-overlays.spec.ts b/e2e/playwright/testing-segment-overlays.spec.ts index 2a411a8b9..0e5d184bf 100644 --- a/e2e/playwright/testing-segment-overlays.spec.ts +++ b/e2e/playwright/testing-segment-overlays.spec.ts @@ -785,16 +785,12 @@ test.describe('Testing segment overlays', { tag: ['@skipWin'] }, () => { sketch001 = startSketchOn(XZ) profile001 = startProfileAt([56.37, 120.33], sketch001) |> line(end = [162.86, 106.48]) - |> arcTo({ - interior = [360.16, 231.76], - end = [391.48, 131.54] - }, %) + |> arc( + interiorAbsolute = [360.16, 231.76], + endAbsolute = [391.48, 131.54], + ) |> yLine(-131.54, %) - |> arc({ - radius = 126.46, - angleStart = 33.53, - angleEnd = -141.07 - }, %) + |> arc(angleStart = 33.53, angleEnd = -141.07, radius = 126.46) ` ) localStorage.setItem('disableAxis', 'true') @@ -820,43 +816,25 @@ profile001 = startProfileAt([56.37, 120.33], sketch001) const arcTo = await u.getBoundingBox('[data-overlay-index="1"]') let ang = await u.getAngle('[data-overlay-index="1"]') - console.log('arcTo interior x') + console.log('arcTo interiorAbsolute x') await clickUnconstrained({ hoverPos: { x: arcTo.x, y: arcTo.y }, constraintType: 'xAbsolute', - expectBeforeUnconstrained: `arcTo({ - interior = [360.16, 231.76], - end = [391.48, 131.54] - }, %)`, - expectAfterUnconstrained: `arcTo({ - interior = [360.16, 231.76], - end = [391.48, 131.54] - }, %)`, - expectFinal: `arcTo({ - interior = [xAbs001, 231.76], - end = [391.48, 131.54] - }, %)`, + expectBeforeUnconstrained: `arc(interiorAbsolute = [360.16, 231.76], endAbsolute = [391.48, 131.54])`, + expectAfterUnconstrained: `arc(interiorAbsolute = [360.16, 231.76], endAbsolute = [391.48, 131.54])`, + expectFinal: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [391.48, 131.54])`, ang: ang, steps: 6, locator: '[data-overlay-toolbar-index="1"]', }) - console.log('arcTo interior y') + console.log('arcTo interiorAbsolute y') await clickUnconstrained({ hoverPos: { x: arcTo.x, y: arcTo.y }, constraintType: 'yAbsolute', - expectBeforeUnconstrained: `arcTo({ - interior = [xAbs001, 231.76], - end = [391.48, 131.54] - }, %)`, - expectAfterUnconstrained: `arcTo({ - interior = [xAbs001, yAbs001], - end = [391.48, 131.54] - }, %)`, - expectFinal: `arcTo({ - interior = [xAbs001, 231.76], - end = [391.48, 131.54] - }, %)`, + expectBeforeUnconstrained: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [391.48, 131.54])`, + expectAfterUnconstrained: `arc(interiorAbsolute = [xAbs001, yAbs001], endAbsolute = [391.48, 131.54])`, + expectFinal: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [391.48, 131.54])`, ang: ang, steps: 10, locator: '[data-overlay-toolbar-index="1"]', @@ -866,18 +844,9 @@ profile001 = startProfileAt([56.37, 120.33], sketch001) await clickConstrained({ hoverPos: { x: arcTo.x, y: arcTo.y }, constraintType: 'xAbsolute', - expectBeforeUnconstrained: `arcTo({ - interior = [xAbs001, 231.76], - end = [391.48, 131.54] - }, %)`, - expectAfterUnconstrained: `arcTo({ - interior = [xAbs001, 231.76], - end = [391.48, 131.54] - }, %)`, - expectFinal: `arcTo({ - interior = [xAbs001, 231.76], - end = [xAbs002, 131.54] - }, %)`, + expectBeforeUnconstrained: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [391.48, 131.54])`, + expectAfterUnconstrained: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [391.48, 131.54])`, + expectFinal: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [xAbs002, 131.54])`, ang: ang + 180, steps: 6, locator: '[data-overlay-toolbar-index="1"]', @@ -887,18 +856,9 @@ profile001 = startProfileAt([56.37, 120.33], sketch001) await clickUnconstrained({ hoverPos: { x: arcTo.x, y: arcTo.y }, constraintType: 'yAbsolute', - expectBeforeUnconstrained: `arcTo({ - interior = [xAbs001, 231.76], - end = [xAbs002, 131.54] - }, %)`, - expectAfterUnconstrained: `arcTo({ - interior = [xAbs001, 231.76], - end = [xAbs002, yAbs002] - }, %)`, - expectFinal: `arcTo({ - interior = [xAbs001, 231.76], - end = [xAbs002, 131.54] - }, %)`, + expectBeforeUnconstrained: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [xAbs002, 131.54])`, + expectAfterUnconstrained: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [xAbs002, yAbs002])`, + expectFinal: `arc(interiorAbsolute = [xAbs001, 231.76], endAbsolute = [xAbs002, 131.54])`, ang: ang + 180, steps: 10, locator: '[data-overlay-toolbar-index="1"]', @@ -1045,15 +1005,8 @@ part001 = startSketchOn(XZ) |> angledLine(angle = 89, endAbsoluteY = 9.14 + 0) |> angledLineThatIntersects(angle = 4.14, intersectTag = a, offset = 9) |> tangentialArc(endAbsolute = [3.14 + 13, 1.14]) - |> arcTo({ - interior = [16.25, 5.12], - end = [21.61, 4.15] - }, %) - |> arc({ - radius = 9.03, - angleStart = 40.27, - angleEnd = -38.05 - }, %) + |> arc(interiorAbsolute = [16.25, 5.12], endAbsolute = [21.61, 4.15]) + |> arc(angleStart = 40.27, angleEnd = -38.05, radius = 9.03) ` ) @@ -1087,11 +1040,7 @@ part001 = startSketchOn(XZ) await deleteSegmentSequence({ hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, - codeToBeDeleted: `arc({ - radius = 9.03, - angleStart = 40.27, - angleEnd = -38.05 - }, %)`, + codeToBeDeleted: `arc(angleStart = 40.27, angleEnd = -38.05, radius = 9.03)`, stdLibFnName: 'arc', ang: ang + 180, steps: 6, @@ -1101,11 +1050,8 @@ part001 = startSketchOn(XZ) ang = await u.getAngle('[data-overlay-index="13"]') await deleteSegmentSequence({ hoverPos: { x: segmentToDelete.x, y: segmentToDelete.y }, - codeToBeDeleted: `arcTo({ - interior = [16.25, 5.12], - end = [21.61, 4.15] - }, %)`, - stdLibFnName: 'arcTo', + codeToBeDeleted: `arc(interiorAbsolute = [16.25, 5.12], endAbsolute = [21.61, 4.15])`, + stdLibFnName: 'arc', ang: ang, steps: 6, locator: '[data-overlay-toolbar-index="13"]', diff --git a/public/kcl-samples/80-20-rail/main.kcl b/public/kcl-samples/80-20-rail/main.kcl index 0feac4b73..8babb783d 100644 --- a/public/kcl-samples/80-20-rail/main.kcl +++ b/public/kcl-samples/80-20-rail/main.kcl @@ -12,22 +12,10 @@ fn rail8020(originStart, railHeight, railLength) { originStart[0], 0.1 * railHeight + originStart[1] ], %) - |> arc({ - angleStart = 180, - angleEnd = 270, - radius = 0.1 * railHeight - }, %) - |> arc({ - angleStart = 180, - angleEnd = 0, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 180, angleEnd = 270, radius = 0.1 * railHeight) + |> arc(angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight) |> xLine(length = 0.1 * railHeight) - |> arc({ - angleStart = 180, - angleEnd = 0, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight) |> xLine(length = 0.06 * railHeight, tag = $edge1) |> yLine(length = 0.087 * railHeight, tag = $edge2) |> xLine(length = -0.183 * railHeight, tag = $edge3) @@ -37,35 +25,15 @@ fn rail8020(originStart, railHeight, railLength) { |> xLine(length = -0.183 * railHeight, tag = $edge7) |> yLine(length = -0.087 * railHeight, tag = $edge8) |> xLine(length = 0.06 * railHeight) - |> arc({ - angleStart = 180, - angleEnd = 0, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight) |> xLine(length = 0.1 * railHeight) - |> arc({ - angleStart = 180, - angleEnd = 0, - radius = 0.072 / 4 * railHeight - }, %) - |> arc({ - angleStart = -90, - angleEnd = 0, - radius = 0.1 * railHeight - }, %) + |> arc(angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight) + |> arc(angleStart = -90, angleEnd = 0, radius = 0.1 * railHeight) // Sketch side 2 of profile - |> arc({ - angleStart = 270, - angleEnd = 90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight) |> yLine(length = 0.1 * railHeight) - |> arc({ - angleStart = 270, - angleEnd = 90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight) |> yLine(length = 0.06 * railHeight, tag = $edge9) |> xLine(length = -0.087 * railHeight, tag = $edge10) |> yLine(length = -0.183 * railHeight, tag = $edge11) // edge11 @@ -75,35 +43,15 @@ fn rail8020(originStart, railHeight, railLength) { |> yLine(length = -0.183 * railHeight, tag = $edge15) // 15 |> xLine(length = 0.087 * railHeight, tag = $edge16) |> yLine(length = 0.06 * railHeight) - |> arc({ - angleStart = 270, - angleEnd = 90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight) |> yLine(length = 0.1 * railHeight) - |> arc({ - angleStart = 270, - angleEnd = 90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight) // Sketch side 3 of profile - |> arc({ - angleStart = 0, - angleEnd = 90, - radius = 0.1 * railHeight - }, %) - |> arc({ - angleStart = 0, - angleEnd = -180, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 0, angleEnd = 90, radius = 0.1 * railHeight) + |> arc(angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight) |> xLine(length = -0.1 * railHeight) - |> arc({ - angleStart = 0, - angleEnd = -180, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight) |> xLine(length = -0.06 * railHeight, tag = $edge17) |> yLine(length = -0.087 * railHeight, tag = $edge18) |> xLine(length = 0.183 * railHeight, tag = $edge19) @@ -113,35 +61,15 @@ fn rail8020(originStart, railHeight, railLength) { |> xLine(length = 0.183 * railHeight, tag = $edge23) |> yLine(length = 0.087 * railHeight, tag = $edge24) |> xLine(length = -0.06 * railHeight) - |> arc({ - angleStart = 0, - angleEnd = -180, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight) |> xLine(length = -0.1 * railHeight) - |> arc({ - angleStart = 0, - angleEnd = -180, - radius = 0.072 / 4 * railHeight - }, %) - |> arc({ - angleStart = 90, - angleEnd = 180, - radius = 0.1 * railHeight - }, %) + |> arc(angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight) + |> arc(angleStart = 90, angleEnd = 180, radius = 0.1 * railHeight) // Sketch side 4 of profile - |> arc({ - angleStart = 90, - angleEnd = -90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight) |> yLine(length = -0.1 * railHeight) - |> arc({ - angleStart = 90, - angleEnd = -90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight) |> yLine(length = -0.06 * railHeight, tag = $edge25) |> xLine(length = 0.087 * railHeight, tag = $edge26) |> yLine(length = 0.183 * railHeight, tag = $edge27) @@ -151,17 +79,9 @@ fn rail8020(originStart, railHeight, railLength) { |> yLine(length = 0.183 * railHeight, tag = $edge31) |> xLine(length = -0.087 * railHeight, tag = $edge32) |> yLine(length = -0.06 * railHeight) - |> arc({ - angleStart = 90, - angleEnd = -90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight) |> yLine(length = -0.1 * railHeight) - |> arc({ - angleStart = 90, - angleEnd = -90, - radius = 0.072 / 4 * railHeight - }, %) + |> arc(angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight) |> close() // Sketch center hole of profile diff --git a/public/kcl-samples/axial-fan/fan.kcl b/public/kcl-samples/axial-fan/fan.kcl index 4d35f567b..0cc3192e7 100644 --- a/public/kcl-samples/axial-fan/fan.kcl +++ b/public/kcl-samples/axial-fan/fan.kcl @@ -39,38 +39,34 @@ fn fanBlade(offsetHeight, startAngle) { 15 * cos(toRadians(startAngle)), 15 * sin(toRadians(startAngle)) ], %) - |> arc({ - angleStart = startAngle, - angleEnd = startAngle + 14, - radius = 15 - }, %) - |> arcTo({ - end = [ + |> arc(angleStart = startAngle, angleEnd = startAngle + 14, radius = 15) + |> arc( + endAbsolute = [ fanSize * 22 / 50 * cos(toRadians(startAngle - 20)), fanSize * 22 / 50 * sin(toRadians(startAngle - 20)) ], - interior = [ + interiorAbsolute = [ fanSize * 11 / 50 * cos(toRadians(startAngle + 3)), fanSize * 11 / 50 * sin(toRadians(startAngle + 3)) - ] - }, %) - |> arcTo({ - end = [ + ], + ) + |> arc( + endAbsolute = [ fanSize * 22 / 50 * cos(toRadians(startAngle - 24)), fanSize * 22 / 50 * sin(toRadians(startAngle - 24)) ], - interior = [ + interiorAbsolute = [ fanSize * 22 / 50 * cos(toRadians(startAngle - 22)), fanSize * 22 / 50 * sin(toRadians(startAngle - 22)) - ] - }, %) - |> arcTo({ - end = [profileStartX(%), profileStartY(%)], - interior = [ + ], + ) + |> arc( + endAbsolute = [profileStartX(%), profileStartY(%)], + interiorAbsolute = [ fanSize * 11 / 50 * cos(toRadians(startAngle - 5)), fanSize * 11 / 50 * sin(toRadians(startAngle - 5)) - ] - }, %) + ], + ) |> close() return fanBlade } diff --git a/public/kcl-samples/ball-bearing/main.kcl b/public/kcl-samples/ball-bearing/main.kcl index c3373e04d..ac82062bb 100644 --- a/public/kcl-samples/ball-bearing/main.kcl +++ b/public/kcl-samples/ball-bearing/main.kcl @@ -27,11 +27,7 @@ insideWall = extrude(insideWallSketch, length = overallThickness) // Create the sketch of one of the balls ballsSketch = startSketchOn(XY) |> startProfileAt([shaftDia / 2 + wallThickness, 0.001], %) - |> arc({ - angleEnd = 0, - angleStart = 180, - radius = sphereDia / 2 - }, %) + |> arc(angleStart = 180, angleEnd = 0, radius = sphereDia / 2) |> close() // Revolve the ball to make a sphere and pattern around the inside wall @@ -50,11 +46,7 @@ chainSketch = startSketchOn(XY) shaftDia / 2 + wallThickness + sphereDia / 2 - (chainWidth / 2), 0.125 * sin(toRadians(60)) ], %) - |> arc({ - angleEnd = 60, - angleStart = 120, - radius = sphereDia / 2 - }, %) + |> arc(angleStart = 120, angleEnd = 60, radius = sphereDia / 2) |> line(end = [0, chainThickness]) |> line(end = [-chainWidth, 0]) |> close() diff --git a/public/kcl-samples/bench/bench-parts.kcl b/public/kcl-samples/bench/bench-parts.kcl index c17ea79f6..9fbf48b20 100644 --- a/public/kcl-samples/bench/bench-parts.kcl +++ b/public/kcl-samples/bench/bench-parts.kcl @@ -107,11 +107,7 @@ fn armRestPath(plane) { sketch005 = startSketchOn(plane) |> startProfileAt([20, 33], %) |> xLine(length = -20) - |> arc({ - angleStart = 90, - angleEnd = 180, - radius = 10 - }, %) + |> arc(angleStart = 90, angleEnd = 180, radius = 10) return sketch005 } diff --git a/public/kcl-samples/bottle/main.kcl b/public/kcl-samples/bottle/main.kcl index bb7ae5509..31d7132fd 100644 --- a/public/kcl-samples/bottle/main.kcl +++ b/public/kcl-samples/bottle/main.kcl @@ -16,10 +16,7 @@ wallThickness = 4 bottleBody = startSketchOn(XY) |> startProfileAt([-bottleLength / 2, 0], %) |> yLine(length = bottleWidth / 3) - |> arcTo({ - end = [bottleLength / 2, bottleWidth / 3], - interior = [0, bottleWidth / 2] - }, %) + |> arc(endAbsolute = [bottleLength / 2, bottleWidth / 3], interiorAbsolute = [0, bottleWidth / 2]) |> yLine(endAbsolute = 0) |> mirror2d(axis = X) |> close() diff --git a/public/kcl-samples/cycloidal-gear/main.kcl b/public/kcl-samples/cycloidal-gear/main.kcl index 7644e75d5..14488c731 100644 --- a/public/kcl-samples/cycloidal-gear/main.kcl +++ b/public/kcl-samples/cycloidal-gear/main.kcl @@ -14,11 +14,7 @@ fn cycloidalGear(gearPitch, gearHeight, holeDiameter, helixAngle) { gearPitch * 1.55 * cos(toRadians(helixAngleP)) + gearPitch * sin(toRadians(-helixAngleP)), gearPitch * 1.55 * sin(toRadians(helixAngleP)) + gearPitch * cos(toRadians(-helixAngleP)) ], %) - |> arc({ - angleStart = 90 + helixAngleP, - angleEnd = -90 + helixAngleP, - radius = gearPitch - }, %) + |> arc(angleStart = 90 + helixAngleP, angleEnd = -90 + helixAngleP, radius = gearPitch) |> tangentialArc(radius = gearPitch * 1.67, angle = 60) |> tangentialArc(radius = gearPitch, angle = -180) |> tangentialArc(radius = gearPitch * 1.67, angle = 60) diff --git a/public/kcl-samples/food-service-spatula/main.kcl b/public/kcl-samples/food-service-spatula/main.kcl index 5f71a98b0..6be8bab68 100644 --- a/public/kcl-samples/food-service-spatula/main.kcl +++ b/public/kcl-samples/food-service-spatula/main.kcl @@ -51,11 +51,7 @@ flipperProfile = startProfileAt([-flipperLength, -32.0], flipperSketch) |> line(end = [flipperLength, 2.0]) |> yLine(length = 60.0, tag = $backEdge) |> line(end = [-flipperLength, 2.0]) - |> arc({ - angleEnd = 196.912390, - angleStart = 163.087610, - radius = 110.0 - }, %) + |> arc(angleStart = 163.087610, angleEnd = 196.912390, radius = 110.0) |> close() // Create a profile of the middle @@ -126,29 +122,13 @@ gripSketch = startSketchOn(handlePlane) // Create a profile of the grip gripProfile = startProfileAt([-26.806746, -10.0], gripSketch) |> xLine(length = gripWidth - (2 * gripFilletRadius)) - |> arc({ - angleStart = -90.0, - angleEnd = 0.0, - radius = gripFilletRadius - }, %) + |> arc(angleStart = -90.0, angleEnd = 0.0, radius = gripFilletRadius) |> yLine(length = gripHeight - (2 * gripFilletRadius)) - |> arc({ - angleStart = 0.0, - angleEnd = 90.0, - radius = gripFilletRadius - }, %) + |> arc(angleStart = 0.0, angleEnd = 90.0, radius = gripFilletRadius) |> xLine(length = -(gripWidth - (2 * gripFilletRadius))) - |> arc({ - angleStart = 90.0, - angleEnd = 180.0, - radius = gripFilletRadius - }, %) + |> arc(angleStart = 90.0, angleEnd = 180.0, radius = gripFilletRadius) |> yLine(length = -(gripHeight - (2 * gripFilletRadius)), tag = $gripEdgeTop) - |> arc({ - angleStart = 180.0, - angleEnd = 270.0, - radius = gripFilletRadius - }, %) + |> arc(angleStart = 180.0, angleEnd = 270.0, radius = gripFilletRadius) |> close() // Extrude the grip profile to create the grip diff --git a/public/kcl-samples/french-press/main.kcl b/public/kcl-samples/french-press/main.kcl index 7fcfbb950..f55bbc1fd 100644 --- a/public/kcl-samples/french-press/main.kcl +++ b/public/kcl-samples/french-press/main.kcl @@ -32,43 +32,19 @@ sketch002 = startSketchOn(plane001) |> startProfileAt([carafeDiameter / 2, 5.7], %) |> xLine(length = 0.1) |> yLine(length = -5.2, tag = $edge1) - |> arc({ - angleStart = 180, - angleEnd = 205, - radius = 0.3 - }, %) + |> arc(angleStart = 180, angleEnd = 205, radius = 0.3) |> angledLine(angle = -60, length = 0.6, tag = $edge2) - |> arc({ - angleStart = 30, - angleEnd = -120, - radius = 0.6 - }, %) + |> arc(angleStart = 30, angleEnd = -120, radius = 0.6) |> angledLine(angle = 150, endAbsoluteY = -0.2, tag = $edge3) - |> arc({ - angleStart = 60, - angleEnd = 90, - radius = 0.5 - }, %) + |> arc(angleStart = 60, angleEnd = 90, radius = 0.5) |> xLine(endAbsolute = 0.1, tag = $edgeLen) |> yLine(length = 0.1) |> xLine(length = segLen(edgeLen) + 0.035, tag = $edge4) - |> arc({ - angleStart = 90, - angleEnd = 60, - radius = 0.6 - }, %) + |> arc(angleStart = 90, angleEnd = 60, radius = 0.6) |> angledLine(angle = 150, length = -segLen(edge3) + 0.035, tag = $edge5) - |> arc({ - angleStart = -120, - angleEnd = 30, - radius = 0.5 - }, %) + |> arc(angleStart = -120, angleEnd = 30, radius = 0.5) |> angledLine(angle = -60, length = -segLen(edge2) + 0.035, tag = $edge6) - |> arc({ - angleStart = 205, - angleEnd = 180, - radius = 0.6 - }, %) + |> arc(angleStart = 205, angleEnd = 180, radius = 0.6) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> extrude(length = 0.75) @@ -89,11 +65,7 @@ extrude001 = extrude(sketch003, length = 0.050) sketch004 = startSketchOn(extrude001, face = END) |> startProfileAt([0.3, 0.17], %) |> yLine(length = 1.2) - |> arc({ - angleStart = 90, - angleEnd = -30, - radius = 1.2 - }, %) + |> arc(angleStart = 90, angleEnd = -30, radius = 1.2) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() |> patternCircular2d( diff --git a/public/kcl-samples/gear/main.kcl b/public/kcl-samples/gear/main.kcl index d61366e2a..ed0311843 100644 --- a/public/kcl-samples/gear/main.kcl +++ b/public/kcl-samples/gear/main.kcl @@ -63,11 +63,7 @@ fn rightInvolute(i, sg) { start = startSketchOn(XY) |> startProfileAt([xs[101], ys[101]], %) teeth = reduce([0..100], start, leftInvolute) - |> arc({ - angleStart = 0, - angleEnd = toothAngle, - radius = baseDiameter / 2 - }, %) + |> arc(angleStart = 0, angleEnd = toothAngle, radius = baseDiameter / 2) |> reduce([1..101], %, rightInvolute) |> close() |> extrude(length = gearHeight) @@ -95,15 +91,7 @@ keyWay = startSketchOn(body, face = END) |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc({ - angleEnd = 180, - angleStart = -1 * toDegrees(startAngle) + 360, - radius = holeRadius - }, %) - |> arc({ - angleEnd = toDegrees(startAngle), - angleStart = 180, - radius = holeRadius - }, %) + |> arc(angleStart = -1 * toDegrees(startAngle) + 360, angleEnd = 180, radius = holeRadius) + |> arc(angleStart = 180, angleEnd = toDegrees(startAngle), radius = holeRadius) |> close() |> extrude(length = -gearHeight) diff --git a/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl b/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl index 488531d6d..77a805b77 100644 --- a/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl +++ b/public/kcl-samples/gridfinity-baseplate-magnets/main.kcl @@ -91,35 +91,19 @@ fn magnetCenterCutout(plane) { 2 * magOuterDiam ], %) |> xLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)) - |> arc({ - angleStart = 90.0, - angleEnd = 0.0, - radius = magOuterDiam / 2 - }, %) + |> arc(angleStart = 90.0, angleEnd = 0.0, radius = magOuterDiam / 2) |> yLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))) |> xLine(length = binLength - (4 * magOuterDiam)) |> yLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)) - |> arc({ - angleStart = 180.0, - angleEnd = 90.0, - radius = magOuterDiam / 2 - }, %) + |> arc(angleStart = 180.0, angleEnd = 90.0, radius = magOuterDiam / 2) |> xLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)) |> yLine(length = binLength - (4 * magOuterDiam)) |> xLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))) - |> arc({ - angleStart = 270.0, - angleEnd = 180.0, - radius = magOuterDiam / 2 - }, %) + |> arc(angleStart = 270.0, angleEnd = 180.0, radius = magOuterDiam / 2) |> yLine(length = 2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2)) |> xLine(length = -(binLength - (4 * magOuterDiam)), tag = $line012) |> yLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))) - |> arc({ - angleStart = 360.0, - angleEnd = 270.0, - radius = magOuterDiam / 2 - }, %) + |> arc(angleStart = 360.0, angleEnd = 270.0, radius = magOuterDiam / 2) |> xLine(length = -(2 * magOuterDiam - (firstStep + thirdStep) - (magOuterDiam / 2))) |> yLine(length = -(binLength - (4 * magOuterDiam))) |> close() diff --git a/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl b/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl index b8aea8f2d..ac68ada0b 100644 --- a/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl +++ b/public/kcl-samples/gridfinity-bins-stacking-lip/main.kcl @@ -179,11 +179,12 @@ fn lipFace(plane) { |> startProfileAt([0, 0], %) // |> yLine(length = lipHeight, tag = $line100) |> line(end = [0.0, 5.792893], tag = $line000) - |> arc({ + |> arc( angleStart = 180.0, angleEnd = 45.0, - radius = 0.500000 - }, %, $arc000) + radius = 0.500000, + tag = $arc000, + ) // |> angledLine(angle = -45, lengthY = lipStep5 ) |> line(end = [1.046447, -1.046447], tag = $line001) |> yLine(length = -lipStep4) diff --git a/public/kcl-samples/keyboard/main.kcl b/public/kcl-samples/keyboard/main.kcl index e61630988..1e02fe5ac 100644 --- a/public/kcl-samples/keyboard/main.kcl +++ b/public/kcl-samples/keyboard/main.kcl @@ -66,11 +66,7 @@ plane001 = { fn keyFn(originStart, keyWidth, keyHeight, repeats, color) { sketch002 = startSketchOn(plane001) profile002 = startProfileAt([originStart[0], originStart[1]], sketch002) - |> arc({ - angleStart = 180, - angleEnd = 270, - radius = 0.1 - }, %) + |> arc(angleStart = 180, angleEnd = 270, radius = 0.1) |> angledLine(angle = 0, length = keyWidth - .2, tag = $rectangleSegmentA001) |> tangentialArc(radius = 0.1, angle = 90) |> angledLine(angle = segAng(rectangleSegmentA001) + 90, length = keyHeight - .2, tag = $rectangleSegmentB001) @@ -167,17 +163,9 @@ fn o(origin, scale, depth) { .788 * scale + origin[0], .921 * scale + origin[1] ], %) - |> arc({ - angleStart = 47.15 + 6, - angleEnd = 47.15 - 6 + 180, - radius = .525 * scale - }, %) + |> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale) |> angledLine(angle = 47.15, length = .24 * scale) - |> arc({ - angleStart = 47.15 - 11 + 180, - angleEnd = 47.15 + 11, - radius = .288 * scale - }, %) + |> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale) |> close() |> extrude(length = -depth) |> appearance(color = baseColor) @@ -187,17 +175,9 @@ fn o(origin, scale, depth) { .16 * scale + origin[0], .079 * scale + origin[1] ], %) - |> arc({ - angleStart = 47.15 + 6 - 180, - angleEnd = 47.15 - 6, - radius = .525 * scale - }, %) + |> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale) |> angledLine(angle = 47.15, length = -.24 * scale) - |> arc({ - angleStart = 47.15 - 11, - angleEnd = 47.15 + 11 - 180, - radius = .288 * scale - }, %) + |> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale) |> close() |> extrude(length = -depth) |> appearance(color = baseColor) diff --git a/public/kcl-samples/makeup-mirror/main.kcl b/public/kcl-samples/makeup-mirror/main.kcl index 6262873e2..00ceb0d1a 100644 --- a/public/kcl-samples/makeup-mirror/main.kcl +++ b/public/kcl-samples/makeup-mirror/main.kcl @@ -58,18 +58,15 @@ fn mirrorFn(plane, offsetX, offsetY, altitude, radius, tiefe, gestellR, gestellD archBody = startProfileAt([offsetX - gestellR, altitude], armPlane) |> xLine(length = gestellD) - |> arcTo({ - interior = [offsetX, altitude - gestellR], - end = [offsetX + gestellR, altitude] - }, %) + |> arc(interiorAbsolute = [offsetX, altitude - gestellR], endAbsolute = [offsetX + gestellR, altitude]) |> xLine(length = gestellD) - |> arcTo({ - interior = [ + |> arc( + interiorAbsolute = [ offsetX, altitude - gestellR - gestellD ], - end = [profileStartX(%), profileStartY(%)] - }, %) + endAbsolute = [profileStartX(%), profileStartY(%)], + ) |> close() |> extrude(length = tiefe) return armBody diff --git a/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl b/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl index c3fa2db68..71efa8bfa 100644 --- a/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-arm-j2.kcl @@ -11,17 +11,9 @@ sketch011 = startSketchOn(plane003) 1.75 - (axisJ2ArmWidth / 2 * sin(toRadians(axisJ2))), 8 + axisJ2ArmWidth / 2 * cos(toRadians(axisJ2)) ], %) - |> arc({ - angleStart = 90 + axisJ2, - angleEnd = 270 + axisJ2, - radius = axisJ2ArmWidth / 2 - }, %) + |> arc(angleStart = 90 + axisJ2, angleEnd = 270 + axisJ2, radius = axisJ2ArmWidth / 2) |> angledLine(angle = axisJ2, length = axisJ2ArmLength) - |> arc({ - angleStart = -90 + axisJ2, - angleEnd = 90 + axisJ2, - radius = axisJ2ArmWidth / 2 - }, %) + |> arc(angleStart = -90 + axisJ2, angleEnd = 90 + axisJ2, radius = axisJ2ArmWidth / 2) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() extrude011 = extrude(sketch011, length = -axisJ2ArmThickness) diff --git a/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl b/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl index bbaf30b94..eb9b480a3 100644 --- a/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-arm-j3.kcl @@ -11,17 +11,9 @@ sketch017 = startSketchOn(plane002) 1.75 + axisJ2ArmLength * cos(toRadians(axisJ2)) - (axisJ3CArmWidth / 2 * sin(toRadians(axisJ3C))), 8 + axisJ2ArmLength * sin(toRadians(axisJ2)) + axisJ3CArmWidth / 2 * cos(toRadians(axisJ3C)) ], %) - |> arc({ - angleStart = 90 + axisJ3C, - angleEnd = 270 + axisJ3C, - radius = axisJ3CArmWidth / 2 - }, %) + |> arc(angleStart = 90 + axisJ3C, angleEnd = 270 + axisJ3C, radius = axisJ3CArmWidth / 2) |> angledLine(angle = axisJ3C, length = axisJ3CArmLength) - |> arc({ - angleStart = 270 + axisJ3C, - angleEnd = 90 + axisJ3C, - radius = axisJ3CArmWidth / 2 - }, %) + |> arc(angleStart = 270 + axisJ3C, angleEnd = 90 + axisJ3C, radius = axisJ3CArmWidth / 2) |> line(endAbsolute = [profileStartX(%), profileStartY(%)], tag = $seg01) |> close() extrude017 = extrude(sketch017, length = axisJ3CArmThickness) @@ -97,11 +89,7 @@ sketch023 = startSketchOn(extrude022, face = START) 8 + axisJ2ArmLength * sin(toRadians(axisJ2)) + axisJ3CArmLength * sin(toRadians(axisJ3C)) ], %) |> angledLine(angle = axisJ3C + axisJ4 / 2, length = grabberLength / 4) - |> arc({ - angleStart = 150 + axisJ3C + axisJ4 / 2, - angleEnd = 30 + axisJ3C + axisJ4 / 2, - radius = grabberLength / 3 - }, %) + |> arc(angleStart = 150 + axisJ3C + axisJ4 / 2, angleEnd = 30 + axisJ3C + axisJ4 / 2, radius = grabberLength / 3) |> angledLine(angle = axisJ3C + axisJ4 / 2, length = grabberLength / 6) |> angledLine(angle = axisJ3C + axisJ4 / 2 + 132, length = grabberLength / 3.5) |> angledLine(angle = axisJ3C + axisJ4 / 2 + 160, length = grabberLength / 3.5) @@ -118,11 +106,7 @@ sketch024 = startSketchOn(extrude022, face = START) 8 + axisJ2ArmLength * sin(toRadians(axisJ2)) + axisJ3CArmLength * sin(toRadians(axisJ3C)) ], %) |> angledLine(angle = axisJ3C - (axisJ4 / 2), length = grabberLength / 4) - |> arc({ - angleStart = 210 + axisJ3C - (axisJ4 / 2), - angleEnd = 330 + axisJ3C - (axisJ4 / 2), - radius = grabberLength / 3 - }, %) + |> arc(angleStart = 210 + axisJ3C - (axisJ4 / 2), angleEnd = 330 + axisJ3C - (axisJ4 / 2), radius = grabberLength / 3) |> angledLine(angle = axisJ3C - (axisJ4 / 2), length = grabberLength / 6) |> angledLine(angle = axisJ3C - (axisJ4 / 2) - 132, length = grabberLength / 3.5) |> angledLine(angle = axisJ3C - (axisJ4 / 2) - 160, length = grabberLength / 3.5) diff --git a/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl b/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl index 0713b318d..bafab7c21 100644 --- a/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl +++ b/public/kcl-samples/multi-axis-robot/robot-rotating-base.kcl @@ -15,11 +15,7 @@ extrude005 = extrude(sketch005, length = 1.5 - 0.1) sketch006 = startSketchOn(plane002) |> startProfileAt([3.5, baseHeight], %) |> angledLine(angle = 60, length = 1.75) - |> arc({ - angleStart = -30, - angleEnd = -30 + 180, - radius = 3 - }, %) + |> arc(angleStart = -30, angleEnd = -30 + 180, radius = 3) |> angledLine(angle = 60, endAbsoluteY = baseHeight) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/public/kcl-samples/router-template-cross-bar/main.kcl b/public/kcl-samples/router-template-cross-bar/main.kcl index 4eb23fc4e..19ad09a57 100644 --- a/public/kcl-samples/router-template-cross-bar/main.kcl +++ b/public/kcl-samples/router-template-cross-bar/main.kcl @@ -21,11 +21,12 @@ distanceToInsideEdge = slateWidthHalf + templateThickness + templateGap sketch001 = startSketchOn(XZ) |> startProfileAt([0, depth + templateGap], %) |> xLine(length = slateWidthHalf - radius, tag = $seg01) - |> arc({ - angleEnd = 0, + |> arc( angleStart = 90, - radius = 10 + templateGap - }, %, $seg09) + angleEnd = 0, + radius = 10 + templateGap, + tag = $seg09, + ) |> yLine(endAbsolute = -templateThickness, tag = $seg03) |> xLine(length = templateThickness, tag = $seg07) |> yLine(endAbsolute = (segEndY(seg01) + templateThickness) / 2 - templateThickness, tag = $seg02) @@ -42,11 +43,7 @@ sketch001 = startSketchOn(XZ) |> yLine(length = -segLen(seg02)) |> xLine(length = segLen(seg07)) |> yLine(length = segLen(seg03)) - |> arc({ - angleEnd = 90, - angleStart = 180, - radius = 10 + templateGap - }, %) + |> arc(angleStart = 180, angleEnd = 90, radius = 10 + templateGap) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/public/kcl-samples/router-template-slate/main.kcl b/public/kcl-samples/router-template-slate/main.kcl index cc73ab695..06245aad3 100644 --- a/public/kcl-samples/router-template-slate/main.kcl +++ b/public/kcl-samples/router-template-slate/main.kcl @@ -22,11 +22,7 @@ length002 = depth + minClampingDistance sketch001 = startSketchOn(XZ) |> startProfileAt([0, depth - templateGap], %) |> xLine(length = length001, tag = $seg01) - |> arc({ - angleEnd = 0, - angleStart = 90, - radius = radius - templateGap - }, %) + |> arc(angleStart = 90, angleEnd = 0, radius = radius - templateGap) |> yLine(endAbsolute = -templateGap * 2 - (templateDiameter / 2), tag = $seg05) |> xLine(endAbsolute = slateWidthHalf + templateThickness, tag = $seg04) |> yLine(length = -length002, tag = $seg03) @@ -36,11 +32,7 @@ sketch001 = startSketchOn(XZ) |> yLine(length = segLen(seg03)) |> xLine(length = segLen(seg04)) |> yLine(length = segLen(seg05)) - |> arc({ - angleEnd = 90, - angleStart = 180, - radius = radius - templateGap - }, %) + |> arc(angleStart = 180, angleEnd = 90, radius = radius - templateGap) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() diff --git a/public/kcl-samples/walkie-talkie/knob.kcl b/public/kcl-samples/walkie-talkie/knob.kcl index e486b26e5..735b6c219 100644 --- a/public/kcl-samples/walkie-talkie/knob.kcl +++ b/public/kcl-samples/walkie-talkie/knob.kcl @@ -12,11 +12,7 @@ startSketchOn(XZ) |> startProfileAt([0.0001, 0], %) |> xLine(length = knobDiameter / 2) |> yLine(length = knobHeight - 0.05) - |> arc({ - angleStart = 0, - angleEnd = 90, - radius = .05 - }, %) + |> arc(angleStart = 0, angleEnd = 90, radius = .05) |> xLine(endAbsolute = 0.0001) |> close() |> revolve(axis = Y) diff --git a/public/kcl-samples/walkie-talkie/zoo-logo.kcl b/public/kcl-samples/walkie-talkie/zoo-logo.kcl index 3f16f6f14..794eaf6d7 100644 --- a/public/kcl-samples/walkie-talkie/zoo-logo.kcl +++ b/public/kcl-samples/walkie-talkie/zoo-logo.kcl @@ -33,17 +33,9 @@ export fn oLogo(surface, origin, scale) { .788 * scale + origin[0], .921 * scale + origin[1] ], %) - |> arc({ - angleStart = 47.15 + 6, - angleEnd = 47.15 - 6 + 180, - radius = .525 * scale - }, %) + |> arc(angleStart = 47.15 + 6, angleEnd = 47.15 - 6 + 180, radius = .525 * scale) |> angledLine(angle = 47.15, length = .24 * scale) - |> arc({ - angleStart = 47.15 - 11 + 180, - angleEnd = 47.15 + 11, - radius = .288 * scale - }, %) + |> arc(angleStart = 47.15 - 11 + 180, angleEnd = 47.15 + 11, radius = .288 * scale) |> close() return oSketch001 } @@ -54,17 +46,9 @@ export fn oLogo2(surface, origin, scale) { .16 * scale + origin[0], .079 * scale + origin[1] ], %) - |> arc({ - angleStart = 47.15 + 6 - 180, - angleEnd = 47.15 - 6, - radius = .525 * scale - }, %) + |> arc(angleStart = 47.15 + 6 - 180, angleEnd = 47.15 - 6, radius = .525 * scale) |> angledLine(angle = 47.15, length = -.24 * scale) - |> arc({ - angleStart = 47.15 - 11, - angleEnd = 47.15 + 11 - 180, - radius = .288 * scale - }, %) + |> arc(angleStart = 47.15 - 11, angleEnd = 47.15 + 11 - 180, radius = .288 * scale) |> close() return oSketch002 } diff --git a/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl b/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl index bd6c23c87..890d634df 100644 --- a/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/close_arc.kcl @@ -4,6 +4,6 @@ const height = 3 const body = startSketchOn(XY) |> startProfileAt([center[0]+radius, center[1]], %) - |> arc({angleEnd: 360, angleStart: 0, radius}, %) + |> arc(angleEnd = 360, angleStart = 0, radius = radius) |> close() |> extrude(length = height) diff --git a/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl b/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl index 0d2d1a758..bf8b5b3ba 100644 --- a/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/pentagon_fillet_sugar.kcl @@ -1,7 +1,6 @@ let triangleHeight = 200 let plumbusLen = 100 let radius = 80 -let circ = {angle_start: 0, angle_end: 360, radius: radius} let triangleLen = 500 const p = startSketchOn(XY) @@ -14,7 +13,12 @@ const p = startSketchOn(XY) fn circl = (x, face) => { return startSketchOn(p, face = face) |> startProfileAt([x + radius, triangleHeight/2], %) - |> arc(circ, %, $arc_tag) + |> arc( + angleStart = 0, + angleEnd = 360, + radius = radius, + tag = $arc_tag, + ) |> close() } diff --git a/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl b/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl index 8575cba12..b08c8019b 100644 --- a/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/router-template-slate.kcl @@ -12,11 +12,11 @@ const length002 = depth + minClampingDistance const sketch001 = startSketchOn(XZ) |> startProfileAt([0, depth - templateGap], %) |> xLine(length = length001, tag = $seg01) - |> arc({ - angleEnd: 0, - angleStart: 90, - radius: radius - templateGap - }, %) + |> arc( + angleEnd = 0, + angleStart = 90, + radius = radius - templateGap + ) |> yLine(endAbsolute = -templateGap * 2 - (templateDiameter / 2), tag = $seg05) |> xLine(endAbsolute = slateWidthHalf + templateThickness, tag = $seg04) |> yLine(length = -length002, tag = $seg03) @@ -25,11 +25,11 @@ const sketch001 = startSketchOn(XZ) |> yLine(length = segLen(seg03, %)) |> xLine(length = segLen(seg04, %)) |> yLine(length = segLen(seg05, %)) - |> arc({ - angleEnd: 90, - angleStart: 180, - radius: radius - templateGap - }, %) + |> arc( + angleEnd = 90, + angleStart = 180, + radius = radius - templateGap + ) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const extrude001 = extrude(sketch001, length = 5) diff --git a/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl b/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl index 9dff81be2..b79a57e31 100644 --- a/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/server-rack-heavy.kcl @@ -48,11 +48,11 @@ fn caster = (originStart) => { const sketch002c = startSketchOn(sketch001c, face = 'START') |> startProfileAt([-originStart[0], 2.2 + originStart[1]], %) - |> arc({ - angle_start: 30, - angle_end: 330, - radius: 3.2 / 2 - }, %) + |> arc( + angle_start = 30, + angle_end = 330, + radius = 3.2 / 2 + ) |> close() |> extrude(length = 3.1) @@ -378,17 +378,9 @@ const sketch017w = startSketchOn(plane002) depth - 1 - (3.7 * cos(23 * pi() / 180)), 60.65 + 3.7 * sin(23 * pi() / 180) + 1.75 / 2 ], %) - |> arc({ - angleStart: -23, - angleEnd: 180 - 23, - radius: 7 / 2 + 2 - }, %) + |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) - |> arc({ - angleStart: 180 - 23, - angleEnd: -23, - radius: 7 / 2 + 1 - }, %) + |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const extrude017w = extrude(sketch017w, length = 1) @@ -398,17 +390,9 @@ const sketch018w = startSketchOn(plane002) depth - 1 - (19.3 * cos(23 * pi() / 180)), 60.65 + 19.3 * sin(23 * pi() / 180) + 1.75 / 2 ], %) - |> arc({ - angleStart: -23, - angleEnd: 180 - 23, - radius: 7 / 2 + 2 - }, %) + |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) - |> arc({ - angleStart: 180 - 23, - angleEnd: -23, - radius: 7 / 2 + 1 - }, %) + |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const extrude018w = extrude(sketch018w, length = 1) @@ -627,17 +611,9 @@ const extrude002fl = extrude(sketch002fl, length = thickness) // Bend const sketch003fl = startSketchOn(planeXYfl) |> startProfileAt([0 + thickness + bendRad+originStart[1], originStart[0]], %) - |> arc({ - angleStart: 270, - angleEnd: 180, - radius: bendRad + thickness - }, %) + |> arc(angleStart = 270, angleEnd = 180, radius = bendRad + thickness) |> xLine(length = thickness) - |> arc({ - angleStart: 180, - angleEnd: 270, - radius: bendRad - }, %) + |> arc(angleStart = 180, angleEnd = 270, radius = bendRad) |> yLine(length = -thickness) |> close() @@ -853,17 +829,9 @@ const sketch003fr = startSketchOn(planeXYfr) bendRad + originStart[1] + width - 2 - thickness - bendRad, originStart[0] + bendRad + thickness ], %) - |> arc({ - angleStart: 0, - angleEnd: -90, - radius: bendRad - }, %) + |> arc(angleStart = 0, angleEnd = -90, radius = bendRad) |> yLine(length = -thickness) - |> arc({ - angleStart: -90, - angleEnd: 0, - radius: bendRad + thickness - }, %) + |> arc(angleStart = -90, angleEnd = 0, radius = bendRad + thickness) |> close() const extrude003fr = extrude(sketch003fr, length = railHeight * 1.75) @@ -1093,17 +1061,9 @@ const sketch003rr = startSketchOn(planeXYrr) bendRad + originStart[1] + width - 2-bendRad, originStart[0]-bendRad ], %) - |> arc({ - angleStart: 0, - angleEnd: 90, - radius: bendRad+thickness - }, %) + |> arc(angleStart = 0, angleEnd = 90, radius = bendRad+thickness) |> yLine(length = -thickness) - |> arc({ - angleStart: 90, - angleEnd: 0, - radius: bendRad - }, %) + |> arc(angleStart = 90, angleEnd = 0, radius = bendRad) |> close() const extrude003rr = extrude(sketch003rr, length = railHeight * 1.75) @@ -1332,17 +1292,9 @@ const sketch003rl = startSketchOn(planeXYrl) bendRad + originStart[1] + thickness, originStart[0] ], %) - |> arc({ - angleStart: 90, - angleEnd: 180, - radius: bendRad - }, %) + |> arc(angleStart = 90, angleEnd = 180, radius = bendRad) |> xLine(length = -thickness) - |> arc({ - angleStart: 180, - angleEnd: 90, - radius: bendRad + thickness - }, %) + |> arc(angleStart = 180, angleEnd = 90, radius = bendRad + thickness) |> close() const extrude003rl = extrude(sketch003rl, length = railHeight * 1.75) diff --git a/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl b/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl index 92d64dfa9..fffb5f312 100644 --- a/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl +++ b/rust/kcl-lib/e2e/executor/inputs/server-rack-lite.kcl @@ -46,11 +46,11 @@ fn caster = (originStart) => { const sketch002c = startSketchOn(sketch001c, face = 'START') |> startProfileAt([-originStart[0], 2.2 + originStart[1]], %) - |> arc({ - angle_start: 30, - angle_end: 330, - radius: 3.2 / 2 - }, %) + |> arc( + angle_start = 30, + angle_end = 330, + radius = 3.2 / 2 + ) |> close() |> extrude(length = 3.1) @@ -368,17 +368,9 @@ const sketch017w = startSketchOn(plane002) depth - 1 - (3.7 * cos(23 * pi() / 180)), 60.65 + 3.7 * sin(23 * pi() / 180) + 1.75 / 2 ], %) - |> arc({ - angleStart: -23, - angleEnd: 180 - 23, - radius: 7 / 2 + 2 - }, %) + |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) - |> arc({ - angleStart: 180 - 23, - angleEnd: -23, - radius: 7 / 2 + 1 - }, %) + |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const extrude017w = extrude(sketch017w, length = 1) @@ -388,17 +380,9 @@ const sketch018w = startSketchOn(plane002) depth - 1 - (19.3 * cos(23 * pi() / 180)), 60.65 + 19.3 * sin(23 * pi() / 180) + 1.75 / 2 ], %) - |> arc({ - angleStart: -23, - angleEnd: 180 - 23, - radius: 7 / 2 + 2 - }, %) + |> arc(angleStart = -23, angleEnd = 180 - 23, radius = 7 / 2 + 2) |> angledLine(angle = -23 + 180, length = -1 ) - |> arc({ - angleStart: 180 - 23, - angleEnd: -23, - radius: 7 / 2 + 1 - }, %) + |> arc(angleStart = 180 - 23, angleEnd = -23, radius = 7 / 2 + 1) |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |> close() const extrude018w = extrude(sketch018w, length = 1) @@ -628,17 +612,9 @@ const sketch003fl = startSketchOn(planeXYfl) 0 + thickness + bendRad + originStart[1], originStart[0] ], %) - |> arc({ - angleStart: 270, - angleEnd: 180, - radius: bendRad + thickness - }, %) + |> arc(angleStart = 270, angleEnd = 180, radius = bendRad + thickness) |> xLine(length = thickness) - |> arc({ - angleStart: 180, - angleEnd: 270, - radius: bendRad - }, %) + |> arc(angleStart = 180, angleEnd = 270, radius = bendRad) |> yLine(length = -thickness) |> close() @@ -761,17 +737,9 @@ const sketch003fr = startSketchOn(planeXYfr) bendRad + originStart[1] + width - 2 - thickness - bendRad, originStart[0] + bendRad + thickness ], %) - |> arc({ - angleStart: 0, - angleEnd: -90, - radius: bendRad - }, %) + |> arc(angleStart = 0, angleEnd = -90, radius = bendRad) |> yLine(length = -thickness) - |> arc({ - angleStart: -90, - angleEnd: 0, - radius: bendRad + thickness - }, %) + |> arc(angleStart = -90, angleEnd = 0, radius = bendRad + thickness) |> close() const extrude003fr = extrude(sketch003fr, length = railHeight * 1.75) @@ -893,17 +861,9 @@ const sketch003rr = startSketchOn(planeXYrr) bendRad + originStart[1] + width - 2 - bendRad, originStart[0] - bendRad ], %) - |> arc({ - angleStart: 0, - angleEnd: 90, - radius: bendRad + thickness - }, %) + |> arc(angleStart = 0, angleEnd = 90, radius = bendRad + thickness) |> yLine(length = -thickness) - |> arc({ - angleStart: 90, - angleEnd: 0, - radius: bendRad - }, %) + |> arc(angleStart = 90, angleEnd = 0, radius = bendRad) |> close() const extrude003rr = extrude(sketch003rr, length = railHeight * 1.75) @@ -1024,17 +984,9 @@ const sketch003rl = startSketchOn(planeXYrl) bendRad + originStart[1] + thickness, originStart[0] ], %) - |> arc({ - angleStart: 90, - angleEnd: 180, - radius: bendRad - }, %) + |> arc(angleStart = 90, angleEnd = 180, radius = bendRad) |> xLine(length = -thickness) - |> arc({ - angleStart: 180, - angleEnd: 90, - radius: bendRad + thickness - }, %) + |> arc(angleStart = 180, angleEnd = 90, radius = bendRad + thickness) |> close() const extrude003rl = extrude(sketch003rl, length = railHeight * 1.75) diff --git a/rust/kcl-lib/e2e/executor/main.rs b/rust/kcl-lib/e2e/executor/main.rs index ffefa7b8d..dab58d075 100644 --- a/rust/kcl-lib/e2e/executor/main.rs +++ b/rust/kcl-lib/e2e/executor/main.rs @@ -290,7 +290,7 @@ async fn optional_params() { fn other_circle = (pos, radius, tag?) => { sg = startSketchOn(XY) |> startProfileAt(pos, %) - |> arc({angleEnd = 360, angleStart = 0, radius}, %) + |> arc(angleEnd = 360, angleStart = 0, radius = radius) |> close() |> extrude(length = 2) @@ -1191,11 +1191,12 @@ async fn kcl_test_plumbus_fillets() { let code = r#"fn make_circle = (ext, face, pos, radius) => { sg = startSketchOn(ext, face = face) |> startProfileAt([pos[0] + radius, pos[1]], %) - |> arc({ + |> arc( angleEnd = 360, angleStart = 0, - radius = radius - }, %, $arc1) + radius = radius, + tag = $arc1, + ) |> close() return sg @@ -1769,11 +1770,11 @@ async fn kcl_test_extrude_custom_plane() { async fn kcl_test_arc_error_same_start_end() { let code = r#"startSketchOn(XY) |> startProfileAt([10, 0], %) - |> arc({ - angleStart: 180, - angleEnd: 180, - radius= 1.5 - }, %) + |> arc( + angleStart = 180, + angleEnd = 180, + radius = 1.5 + ) |> close() |> patternCircular2d( arcDegrees = 360, @@ -1784,11 +1785,9 @@ async fn kcl_test_arc_error_same_start_end() { "#; let result = execute_and_snapshot(code, None).await; - assert!(result.is_err()); - assert_eq!( - result.err().unwrap().to_string(), - r#"type: KclErrorDetails { source_ranges: [SourceRange([55, 136, 0])], message: "Arc start and end angles must be different" }"# - ); + let err = result.expect_err("Code should have failed due to end angle === start angle"); + let err = err.as_kcl_error().unwrap(); + assert_eq!(err.message(), "Arc start and end angles must be different"); } #[tokio::test(flavor = "multi_thread")] diff --git a/rust/kcl-lib/src/docs/mod.rs b/rust/kcl-lib/src/docs/mod.rs index 3240dca9e..9a51d4e44 100644 --- a/rust/kcl-lib/src/docs/mod.rs +++ b/rust/kcl-lib/src/docs/mod.rs @@ -964,11 +964,7 @@ mod tests { let snippet = arc_fn.to_autocomplete_snippet().unwrap(); assert_eq!( snippet, - r#"arc({ - angleStart = ${0:3.14}, - angleEnd = ${1:3.14}, - radius = ${2:3.14}, -}, ${3:%})"# + r#"arc(${0:%}, angleStart = ${1:3.14}, angleEnd = ${2:3.14}, radius = ${3:3.14})"# ); } diff --git a/rust/kcl-lib/src/execution/geometry.rs b/rust/kcl-lib/src/execution/geometry.rs index 81b322d02..c55310b1a 100644 --- a/rust/kcl-lib/src/execution/geometry.rs +++ b/rust/kcl-lib/src/execution/geometry.rs @@ -1114,10 +1114,10 @@ pub enum Path { /// Point 1 of the arc (base on the end of previous segment) #[ts(type = "[number, number]")] p1: [f64; 2], - /// Point 2 of the arc (interior kwarg) + /// Point 2 of the arc (interiorAbsolute kwarg) #[ts(type = "[number, number]")] p2: [f64; 2], - /// Point 3 of the arc (end kwarg) + /// Point 3 of the arc (endAbsolute kwarg) #[ts(type = "[number, number]")] p3: [f64; 2], }, diff --git a/rust/kcl-lib/src/lsp/tests.rs b/rust/kcl-lib/src/lsp/tests.rs index 6554f6a76..eb93cded8 100644 --- a/rust/kcl-lib/src/lsp/tests.rs +++ b/rust/kcl-lib/src/lsp/tests.rs @@ -1643,11 +1643,7 @@ sphere = startSketchOn(XZ) 0 - 0.05 ], %) |> line(end = [sphereDia - 0.1, 0]) - |> arc({ - angle_start: 0, - angle_end: -180, - radius: sphereDia / 2 - 0.05 - }, %) + |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() |> revolve({ axis = X }, %) |> patternCircular3d( @@ -1706,7 +1702,7 @@ outsideRevolve = startSketchOn(XZ) tower_lsp::lsp_types::Range { start: tower_lsp::lsp_types::Position { line: 0, character: 0 }, end: tower_lsp::lsp_types::Position { - line: 60, + line: 56, character: 29 } } @@ -1743,11 +1739,7 @@ sphere = startSketchOn(XZ) 0 - 0.05 ], %) |> line(end = [sphereDia - 0.1, 0]) - |> arc({ - angle_start = 0, - angle_end = -180, - radius = sphereDia / 2 - 0.05 - }, %) + |> arc(angle_start = 0, angle_end = -180, radius = sphereDia / 2 - 0.05) |> close() |> revolve({ axis = X }, %) |> patternCircular3d( diff --git a/rust/kcl-lib/src/parsing/parser.rs b/rust/kcl-lib/src/parsing/parser.rs index 2e5d5f329..e77416c44 100644 --- a/rust/kcl-lib/src/parsing/parser.rs +++ b/rust/kcl-lib/src/parsing/parser.rs @@ -5326,17 +5326,6 @@ mod snapshot_tests { c: 3 }" ); - snapshot_test!( - ba, - r#" -sketch001 = startSketchOn('XY') - // |> arc({ - // angleEnd: 270, - // angleStart: 450, - // }, %) - |> startProfileAt(%) -"# - ); snapshot_test!( bb, r#" diff --git a/rust/kcl-lib/src/std/args.rs b/rust/kcl-lib/src/std/args.rs index 0ea749ed2..2bddbbeb9 100644 --- a/rust/kcl-lib/src/std/args.rs +++ b/rust/kcl-lib/src/std/args.rs @@ -1120,39 +1120,6 @@ impl<'a> FromKclValue<'a> for FaceTag { } } -impl<'a> FromKclValue<'a> for super::sketch::ArcData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let case1 = || { - let angle_start = obj.get("angleStart")?.as_ty_f64()?; - let angle_end = obj.get("angleEnd")?.as_ty_f64()?; - let_field_of!(obj, radius, TyF64); - Some(Self::AnglesAndRadius { - angle_start, - angle_end, - radius, - }) - }; - let case2 = || { - let obj = arg.as_object()?; - let_field_of!(obj, to); - let_field_of!(obj, center); - let_field_of!(obj, radius, TyF64); - Some(Self::CenterToRadius { center, to, radius }) - }; - case1().or_else(case2) - } -} - -impl<'a> FromKclValue<'a> for super::sketch::ArcToData { - fn from_kcl_val(arg: &'a KclValue) -> Option { - let obj = arg.as_object()?; - let_field_of!(obj, end); - let_field_of!(obj, interior); - Some(Self { end, interior }) - } -} - impl<'a> FromKclValue<'a> for super::sketch::TangentialArcData { fn from_kcl_val(arg: &'a KclValue) -> Option { let obj = arg.as_object()?; diff --git a/rust/kcl-lib/src/std/extrude.rs b/rust/kcl-lib/src/std/extrude.rs index 5f314b7c9..e29cf68d6 100644 --- a/rust/kcl-lib/src/std/extrude.rs +++ b/rust/kcl-lib/src/std/extrude.rs @@ -64,11 +64,11 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) /// |> line(end = [10, 0]) -/// |> arc({ +/// |> arc( /// angleStart = 120, /// angleEnd = 0, /// radius = 5, -/// }, %) +/// ) /// |> line(end = [5, 0]) /// |> line(end = [0, 10]) /// |> bezierCurve({ @@ -84,11 +84,11 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 0], %) -/// |> arc({ +/// |> arc( /// angleStart = 120, /// angleEnd = -60, /// radius = 5, -/// }, %) +/// ) /// |> line(end = [10, 0]) /// |> line(end = [5, 0]) /// |> bezierCurve({ @@ -106,11 +106,11 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 0], %) -/// |> arc({ +/// |> arc( /// angleStart = 120, /// angleEnd = -60, /// radius = 5, -/// }, %) +/// ) /// |> line(end = [10, 0]) /// |> line(end = [5, 0]) /// |> bezierCurve({ @@ -128,11 +128,11 @@ pub async fn extrude(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([-10, 0], %) -/// |> arc({ +/// |> arc( /// angleStart = 120, /// angleEnd = -60, /// radius = 5, -/// }, %) +/// ) /// |> line(end = [10, 0]) /// |> line(end = [5, 0]) /// |> bezierCurve({ diff --git a/rust/kcl-lib/src/std/mod.rs b/rust/kcl-lib/src/std/mod.rs index 9a90daf18..09f34493d 100644 --- a/rust/kcl-lib/src/std/mod.rs +++ b/rust/kcl-lib/src/std/mod.rs @@ -84,7 +84,6 @@ lazy_static! { Box::new(crate::std::sketch::ProfileStart), Box::new(crate::std::sketch::Close), Box::new(crate::std::sketch::Arc), - Box::new(crate::std::sketch::ArcTo), Box::new(crate::std::sketch::TangentialArc), Box::new(crate::std::sketch::BezierCurve), Box::new(crate::std::sketch::Hole), diff --git a/rust/kcl-lib/src/std/segment.rs b/rust/kcl-lib/src/std/segment.rs index 3dc2b5c37..820ce6139 100644 --- a/rust/kcl-lib/src/std/segment.rs +++ b/rust/kcl-lib/src/std/segment.rs @@ -529,10 +529,11 @@ pub async fn tangent_to_end(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) -/// |> arcTo({ -/// end: [10, 10], -/// interior: [5, 1] -/// }, %, $arc1) +/// |> arc( +/// endAbsolute = [10, 10], +/// interiorAbsolute = [5, 1], +/// tag = $arc1, +/// ) /// |> angledLine(angle = tangentToEnd(arc1), length = 20) /// |> close() /// ``` diff --git a/rust/kcl-lib/src/std/sketch.rs b/rust/kcl-lib/src/std/sketch.rs index 060173010..64852c39f 100644 --- a/rust/kcl-lib/src/std/sketch.rs +++ b/rust/kcl-lib/src/std/sketch.rs @@ -24,7 +24,7 @@ use crate::{ std::{ args::{Args, TyF64}, utils::{ - arc_angles, arc_center_and_end, get_tangential_arc_to_info, get_x_component, get_y_component, + arc_center_and_end, get_tangential_arc_to_info, get_x_component, get_y_component, intersection_with_parallel_line, TangentialArcInfoInput, }, }, @@ -104,7 +104,7 @@ pub async fn involute_circular(exec_state: &mut ExecState, args: Args) -> Result let end_radius: TyF64 = args.get_kw_arg_typed("endRadius", &RuntimeType::length(), exec_state)?; let angle: TyF64 = args.get_kw_arg_typed("angle", &RuntimeType::angle(), exec_state)?; let reverse = args.get_kw_arg_opt("reverse")?; - let tag = args.get_kw_arg_opt("tag")?; + let tag = args.get_kw_arg_opt(NEW_TAG_KW)?; let new_sketch = inner_involute_circular( sketch, start_radius.n, @@ -1636,51 +1636,31 @@ pub(crate) async fn inner_close( Ok(new_sketch) } -/// Data to draw an arc. -#[derive(Debug, Clone, Serialize, PartialEq, ts_rs::TS, JsonSchema)] -#[ts(export)] -#[serde(rename_all = "camelCase", untagged)] -pub enum ArcData { - /// Angles and radius with an optional tag. - AnglesAndRadius { - /// The start angle. - #[serde(rename = "angleStart")] - #[schemars(range(min = -360.0, max = 360.0))] - angle_start: TyF64, - /// The end angle. - #[serde(rename = "angleEnd")] - #[schemars(range(min = -360.0, max = 360.0))] - angle_end: TyF64, - /// The radius. - radius: TyF64, - }, - /// Center, to and radius with an optional tag. - CenterToRadius { - /// The center. - center: [TyF64; 2], - /// The to point. - to: [TyF64; 2], - /// The radius. - radius: TyF64, - }, -} - -/// Data to draw a three point arc (arcTo). -#[derive(Debug, Clone, Serialize, PartialEq, ts_rs::TS, JsonSchema)] -#[ts(export)] -#[serde(rename_all = "camelCase")] -pub struct ArcToData { - /// End point of the arc. A point in 3D space - pub end: [TyF64; 2], - /// Interior point of the arc. A point in 3D space - pub interior: [TyF64; 2], -} - /// Draw an arc. pub async fn arc(exec_state: &mut ExecState, args: Args) -> Result { - let (data, sketch, tag): (ArcData, Sketch, Option) = args.get_data_and_sketch_and_tag(exec_state)?; + let sketch = + args.get_unlabeled_kw_arg_typed("sketch", &RuntimeType::Primitive(PrimitiveType::Sketch), exec_state)?; - let new_sketch = inner_arc(data, sketch, tag, exec_state, args).await?; + let angle_start: Option = args.get_kw_arg_opt_typed("angleStart", &RuntimeType::degrees(), exec_state)?; + let angle_end: Option = args.get_kw_arg_opt_typed("angleEnd", &RuntimeType::degrees(), exec_state)?; + let radius: Option = args.get_kw_arg_opt_typed("radius", &RuntimeType::length(), exec_state)?; + let end_absolute: Option<[TyF64; 2]> = + args.get_kw_arg_opt_typed("endAbsolute", &RuntimeType::point2d(), exec_state)?; + let interior_absolute: Option<[TyF64; 2]> = + args.get_kw_arg_opt_typed("interiorAbsolute", &RuntimeType::point2d(), exec_state)?; + let tag = args.get_kw_arg_opt(NEW_TAG_KW)?; + let new_sketch = inner_arc( + sketch, + angle_start, + angle_end, + radius, + interior_absolute, + end_absolute, + tag, + exec_state, + args, + ) + .await?; Ok(KclValue::Sketch { value: Box::new(new_sketch), }) @@ -1701,74 +1681,167 @@ pub async fn arc(exec_state: &mut ExecState, args: Args) -> Result startProfileAt([0, 0], %) /// |> line(end = [10, 0]) -/// |> arc({ +/// |> arc( /// angleStart = 0, /// angleEnd = 280, /// radius = 16 -/// }, %) +/// ) +/// |> close() +/// example = extrude(exampleSketch, length = 10) +/// ``` +/// ```no_run +/// exampleSketch = startSketchOn(XZ) +/// |> startProfileAt([0, 0], %) +/// |> arc( +/// endAbsolute = [10,0], +/// interiorAbsolute = [5,5] +/// ) /// |> close() /// example = extrude(exampleSketch, length = 10) /// ``` #[stdlib { name = "arc", + keywords = true, + unlabeled_first = true, + args = { + sketch = { docs = "Which sketch should this path be added to?" }, + angle_start = { docs = "Where along the circle should this arc start?", include_in_snippet = true }, + angle_end = { docs = "Where along the circle should this arc end?", include_in_snippet = true }, + radius = { docs = "How large should the circle be?", include_in_snippet = true }, + interior_absolute = { docs = "Any point between the arc's start and end? Requires `endAbsolute`. Incompatible with `angleStart` or `angleEnd`" }, + end_absolute = { docs = "Where should this arc end? Requires `interiorAbsolute`. Incompatible with `angleStart` or `angleEnd`" }, + tag = { docs = "Create a new tag which refers to this line"}, + } }] +#[allow(clippy::too_many_arguments)] pub(crate) async fn inner_arc( - data: ArcData, sketch: Sketch, + angle_start: Option, + angle_end: Option, + radius: Option, + interior_absolute: Option<[TyF64; 2]>, + end_absolute: Option<[TyF64; 2]>, tag: Option, exec_state: &mut ExecState, args: Args, ) -> Result { let from: Point2d = sketch.current_pen_position()?; + let id = exec_state.next_uuid(); - let (center, angle_start, angle_end, radius, end) = match &data { - ArcData::AnglesAndRadius { - angle_start, - angle_end, - radius, - } => { - let a_start = Angle::from_degrees(angle_start.n); - let a_end = Angle::from_degrees(angle_end.n); - let (center, end) = arc_center_and_end(from.into(), a_start, a_end, radius.n); - (center, a_start, a_end, radius.n, end) + // Relative case + match (angle_start, angle_end, radius, interior_absolute, end_absolute) { + (Some(angle_start), Some(angle_end), Some(radius), None, None) => { + relative_arc(&args, id, exec_state, sketch, from, angle_start, angle_end, radius, tag).await } - ArcData::CenterToRadius { center, to, radius } => { - let (angle_start, angle_end) = arc_angles( - from.into(), - untype_point(to.clone()).0, - untype_point(center.clone()).0, - radius.n, - args.source_range, - )?; - ( - untype_point(center.clone()).0, - angle_start, - angle_end, - radius.n, - untype_point(to.clone()).0, - ) + (None, None, None, Some(interior_absolute), Some(end_absolute)) => { + absolute_arc(&args, id, exec_state, sketch, from, interior_absolute, end_absolute, tag).await } + _ => { + Err(KclError::Type(KclErrorDetails { + message: + "Invalid combination of arguments. Either provide (angleStart, angleEnd, radius) or (endAbsolute, interiorAbsolute)" + .to_string(), + source_ranges: vec![args.source_range], + })) + } + } +} + +#[allow(clippy::too_many_arguments)] +pub async fn absolute_arc( + args: &Args, + id: uuid::Uuid, + exec_state: &mut ExecState, + sketch: Sketch, + from: Point2d, + interior_absolute: [TyF64; 2], + end_absolute: [TyF64; 2], + tag: Option, +) -> Result { + // The start point is taken from the path you are extending. + args.batch_modeling_cmd( + id, + ModelingCmd::from(mcmd::ExtendPath { + path: sketch.id.into(), + segment: PathSegment::ArcTo { + end: kcmc::shared::Point3d { + x: LengthUnit(end_absolute[0].n), + y: LengthUnit(end_absolute[1].n), + z: LengthUnit(0.0), + }, + interior: kcmc::shared::Point3d { + x: LengthUnit(interior_absolute[0].n), + y: LengthUnit(interior_absolute[1].n), + z: LengthUnit(0.0), + }, + relative: false, + }, + }), + ) + .await?; + + let start = [from.x, from.y]; + let end = end_absolute.clone(); + let untyped_end = untype_point(end); + + let current_path = Path::ArcThreePoint { + base: BasePath { + from: from.into(), + to: untyped_end.0, + tag: tag.clone(), + units: sketch.units, + geo_meta: GeoMeta { + id, + metadata: args.source_range.into(), + }, + }, + p1: start, + p2: untype_point(interior_absolute).0, + p3: untyped_end.0, }; + let mut new_sketch = sketch.clone(); + if let Some(tag) = &tag { + new_sketch.add_tag(tag, ¤t_path, exec_state); + } + + new_sketch.paths.push(current_path); + + Ok(new_sketch) +} + +#[allow(clippy::too_many_arguments)] +pub async fn relative_arc( + args: &Args, + id: uuid::Uuid, + exec_state: &mut ExecState, + sketch: Sketch, + from: Point2d, + angle_start: TyF64, + angle_end: TyF64, + radius: TyF64, + tag: Option, +) -> Result { + let a_start = Angle::from_degrees(angle_start.n); + let a_end = Angle::from_degrees(angle_end.n); + let (center, end) = arc_center_and_end(from.into(), a_start, a_end, radius.n); if angle_start == angle_end { return Err(KclError::Type(KclErrorDetails { message: "Arc start and end angles must be different".to_string(), source_ranges: vec![args.source_range], })); } - let ccw = angle_start < angle_end; - - let id = exec_state.next_uuid(); + let ccw = angle_start.n < angle_end.n; args.batch_modeling_cmd( id, ModelingCmd::from(mcmd::ExtendPath { path: sketch.id.into(), segment: PathSegment::Arc { - start: angle_start, - end: angle_end, + start: a_start, + end: a_end, center: KPoint2d::from(center).map(LengthUnit), - radius: LengthUnit(radius), + radius: LengthUnit(radius.n), relative: false, }, }), @@ -1787,7 +1860,7 @@ pub(crate) async fn inner_arc( }, }, center, - radius, + radius: radius.n, ccw, }; @@ -1800,98 +1873,6 @@ pub(crate) async fn inner_arc( Ok(new_sketch) } - -/// Draw a three point arc. -pub async fn arc_to(exec_state: &mut ExecState, args: Args) -> Result { - let (data, sketch, tag): (ArcToData, Sketch, Option) = args.get_data_and_sketch_and_tag(exec_state)?; - - let new_sketch = inner_arc_to(data, sketch, tag, exec_state, args).await?; - Ok(KclValue::Sketch { - value: Box::new(new_sketch), - }) -} - -/// Draw a three point arc. -/// -/// The arc is constructed such that the start point is the current position of the sketch and two more points defined as the end and interior point. -/// The interior point is placed between the start point and end point. The radius of the arc will be controlled by how far the interior point is placed from -/// the start and end. -/// -/// ```no_run -/// exampleSketch = startSketchOn(XZ) -/// |> startProfileAt([0, 0], %) -/// |> arcTo({ -/// end = [10,0], -/// interior = [5,5] -/// }, %) -/// |> close() -/// example = extrude(exampleSketch, length = 10) -/// ``` -#[stdlib { - name = "arcTo", -}] -pub(crate) async fn inner_arc_to( - data: ArcToData, - sketch: Sketch, - tag: Option, - exec_state: &mut ExecState, - args: Args, -) -> Result { - let from: Point2d = sketch.current_pen_position()?; - let id = exec_state.next_uuid(); - - // The start point is taken from the path you are extending. - args.batch_modeling_cmd( - id, - ModelingCmd::from(mcmd::ExtendPath { - path: sketch.id.into(), - segment: PathSegment::ArcTo { - end: kcmc::shared::Point3d { - x: LengthUnit(data.end[0].n), - y: LengthUnit(data.end[1].n), - z: LengthUnit(0.0), - }, - interior: kcmc::shared::Point3d { - x: LengthUnit(data.interior[0].n), - y: LengthUnit(data.interior[1].n), - z: LengthUnit(0.0), - }, - relative: false, - }, - }), - ) - .await?; - - let start = [from.x, from.y]; - let interior = data.interior; - let end = data.end.clone(); - - let current_path = Path::ArcThreePoint { - base: BasePath { - from: from.into(), - to: untype_point(data.end).0, - tag: tag.clone(), - units: sketch.units, - geo_meta: GeoMeta { - id, - metadata: args.source_range.into(), - }, - }, - p1: start, - p2: untype_point(interior).0, - p3: untype_point(end).0, - }; - - let mut new_sketch = sketch.clone(); - if let Some(tag) = &tag { - new_sketch.add_tag(tag, ¤t_path, exec_state); - } - - new_sketch.paths.push(current_path); - - Ok(new_sketch) -} - /// Draw a tangential arc to a specific point. pub async fn tangential_arc(exec_state: &mut ExecState, args: Args) -> Result { let sketch = diff --git a/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md index 5afee2e7a..c2d2ae1a6 100644 --- a/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/import_async/artifact_graph_flowchart.snap.md @@ -108,7 +108,7 @@ flowchart LR 112["Segment
[1250, 1288, 0]"] 113["Segment
[1250, 1288, 0]"] 114["Segment
[1250, 1288, 0]"] - 115["Segment
[1651, 1753, 0]"] + 115["Segment
[1651, 1749, 0]"] 116["Segment
[1478, 1508, 0]"] 117["Segment
[1478, 1508, 0]"] 118["Segment
[1478, 1508, 0]"] @@ -210,17 +210,17 @@ flowchart LR 214["Segment
[1478, 1508, 0]"] 215["Segment
[1478, 1508, 0]"] 216["Segment
[1478, 1508, 0]"] - 217["Segment
[1799, 1806, 0]"] + 217["Segment
[1795, 1802, 0]"] 218[Solid2d] end subgraph path220 [Path] - 220["Path
[2287, 2387, 0]"] - 221["Segment
[2393, 2420, 0]"] - 222["Segment
[2426, 2454, 0]"] - 223["Segment
[2460, 2488, 0]"] - 224["Segment
[2494, 2614, 0]"] - 225["Segment
[2620, 2729, 0]"] - 226["Segment
[2735, 2742, 0]"] + 220["Path
[2283, 2383, 0]"] + 221["Segment
[2389, 2416, 0]"] + 222["Segment
[2422, 2450, 0]"] + 223["Segment
[2456, 2484, 0]"] + 224["Segment
[2490, 2606, 0]"] + 225["Segment
[2612, 2717, 0]"] + 226["Segment
[2723, 2730, 0]"] 227[Solid2d] end 1["Plane
[168, 185, 0]"] @@ -232,8 +232,8 @@ flowchart LR 10["SweepEdge Opposite"] 11["SweepEdge Adjacent"] 12["Plane
[1539, 1556, 0]"] - 219["Sweep Extrusion
[1812, 1840, 0]"] - 228["Sweep Extrusion
[2748, 2777, 0]"] + 219["Sweep Extrusion
[1808, 1836, 0]"] + 228["Sweep Extrusion
[2736, 2765, 0]"] 229[Wall] 230[Wall] 231[Wall] @@ -246,7 +246,7 @@ flowchart LR 238["SweepEdge Adjacent"] 239["SweepEdge Opposite"] 240["SweepEdge Adjacent"] - 241["StartSketchOnFace
[2250, 2281, 0]"] + 241["StartSketchOnFace
[2246, 2277, 0]"] 2 --- 3 3 --- 4 3 ---- 6 diff --git a/rust/kcl-lib/tests/import_async/ast.snap b/rust/kcl-lib/tests/import_async/ast.snap index df32f4a51..92f7f2f0f 100644 --- a/rust/kcl-lib/tests/import_async/ast.snap +++ b/rust/kcl-lib/tests/import_async/ast.snap @@ -3242,123 +3242,98 @@ description: Result of parsing import_async.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toothAngle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "baseDiameter", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "toothAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "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, + "name": "baseDiameter", + "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" + } } ], "callee": { @@ -3379,8 +3354,9 @@ description: Result of parsing import_async.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4452,217 +4428,42 @@ description: Result of parsing import_async.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "left": { + "left": { + "argument": { "commentStart": 0, "end": 0, - "left": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "*", - "right": { - "arguments": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startAngle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toDegrees", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "360", + "raw": "1", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 360.0, + "value": 1.0, "suffix": "None" } }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { "commentStart": 0, "end": 0, - "name": "radius", + "operator": "-", "start": 0, - "type": "Identifier" + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "start": 0, - "type": "ObjectProperty", - "value": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "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": "arc", - "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": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { + "operator": "*", + "right": { "arguments": [ { "abs_path": false, @@ -4701,73 +4502,76 @@ description: Result of parsing import_async.kcl "start": 0, "type": "CallExpression", "type": "CallExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, - { + "operator": "+", + "right": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "radius", - "start": 0, - "type": "Identifier" - }, + "raw": "360", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "value": 360.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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "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": "holeRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -4788,8 +4592,132 @@ description: Result of parsing import_async.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": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "toDegrees", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + } + }, + { + "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": "holeRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], diff --git a/rust/kcl-lib/tests/import_async/input.kcl b/rust/kcl-lib/tests/import_async/input.kcl index c136bc8dd..17e97a2a3 100644 --- a/rust/kcl-lib/tests/import_async/input.kcl +++ b/rust/kcl-lib/tests/import_async/input.kcl @@ -68,11 +68,11 @@ fn rightInvolute(i, sg) { start = startSketchOn(XY) |> startProfileAt([xs[101], ys[101]], %) teeth = reduce([0..100], start, leftInvolute) - |> arc({ + |> arc( angleStart = 0, angleEnd = toothAngle, - radius = baseDiameter / 2 - }, %) + radius = baseDiameter / 2, + ) |> reduce([1..101], %, rightInvolute) |> close() |> extrude(length = gearHeight) @@ -100,16 +100,16 @@ keyWay = startSketchOn(body, face = END) |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc({ - angleEnd = 180, + |> arc( angleStart = -1 * toDegrees(startAngle) + 360, - radius = holeRadius - }, %) - |> arc({ - angleEnd = toDegrees(startAngle), + angleEnd = 180, + radius = holeRadius, + ) + |> arc( angleStart = 180, - radius = holeRadius - }, %) + angleEnd = toDegrees(startAngle), + radius = holeRadius, + ) |> close() |> extrude(length = -gearHeight) diff --git a/rust/kcl-lib/tests/import_async/unparsed.snap b/rust/kcl-lib/tests/import_async/unparsed.snap index 9616a116f..76d5a6b8f 100644 --- a/rust/kcl-lib/tests/import_async/unparsed.snap +++ b/rust/kcl-lib/tests/import_async/unparsed.snap @@ -71,11 +71,7 @@ fn rightInvolute(i, sg) { start = startSketchOn(XY) |> startProfileAt([xs[101], ys[101]], %) teeth = reduce([0..100], start, leftInvolute) - |> arc({ - angleStart = 0, - angleEnd = toothAngle, - radius = baseDiameter / 2 - }, %) + |> arc(angleStart = 0, angleEnd = toothAngle, radius = baseDiameter / 2) |> reduce([1..101], %, rightInvolute) |> close() |> extrude(length = gearHeight) @@ -103,16 +99,8 @@ keyWay = startSketchOn(body, face = END) |> xLine(length = keywayDepth) |> yLine(length = -keywayWidth) |> xLine(length = -keywayDepth) - |> arc({ - angleEnd = 180, - angleStart = -1 * toDegrees(startAngle) + 360, - radius = holeRadius - }, %) - |> arc({ - angleEnd = toDegrees(startAngle), - angleStart = 180, - radius = holeRadius - }, %) + |> arc(angleStart = -1 * toDegrees(startAngle) + 360, angleEnd = 180, radius = holeRadius) + |> arc(angleStart = 180, angleEnd = toDegrees(startAngle), radius = holeRadius) |> close() |> extrude(length = -gearHeight) diff --git a/rust/kcl-lib/tests/kcl_samples/80-20-rail/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/80-20-rail/artifact_graph_flowchart.snap.md index 105b43a0b..a3b593060 100644 --- a/rust/kcl-lib/tests/kcl_samples/80-20-rail/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/80-20-rail/artifact_graph_flowchart.snap.md @@ -2,80 +2,80 @@ flowchart LR subgraph path2 [Path] 2["Path
[349, 446, 0]"] - 3["Segment
[454, 559, 0]"] - 4["Segment
[567, 676, 0]"] - 5["Segment
[684, 716, 0]"] - 6["Segment
[724, 833, 0]"] - 7["Segment
[841, 888, 0]"] - 8["Segment
[896, 944, 0]"] - 9["Segment
[952, 1001, 0]"] - 10["Segment
[1009, 1107, 0]"] - 11["Segment
[1115, 1163, 0]"] - 12["Segment
[1171, 1260, 0]"] - 13["Segment
[1268, 1317, 0]"] - 14["Segment
[1325, 1374, 0]"] - 15["Segment
[1382, 1415, 0]"] - 16["Segment
[1423, 1532, 0]"] - 17["Segment
[1540, 1572, 0]"] - 18["Segment
[1580, 1689, 0]"] - 19["Segment
[1697, 1800, 0]"] - 20["Segment
[1841, 1951, 0]"] - 21["Segment
[1959, 1991, 0]"] - 22["Segment
[1999, 2109, 0]"] - 23["Segment
[2117, 2164, 0]"] - 24["Segment
[2172, 2222, 0]"] - 25["Segment
[2230, 2280, 0]"] - 26["Segment
[2298, 2408, 0]"] - 27["Segment
[2426, 2475, 0]"] - 28["Segment
[2489, 2584, 0]"] - 29["Segment
[2598, 2648, 0]"] - 30["Segment
[2662, 2711, 0]"] - 31["Segment
[2719, 2752, 0]"] - 32["Segment
[2760, 2870, 0]"] - 33["Segment
[2878, 2910, 0]"] - 34["Segment
[2918, 3028, 0]"] - 35["Segment
[3069, 3171, 0]"] - 36["Segment
[3179, 3289, 0]"] - 37["Segment
[3297, 3330, 0]"] - 38["Segment
[3338, 3448, 0]"] - 39["Segment
[3456, 3505, 0]"] - 40["Segment
[3513, 3563, 0]"] - 41["Segment
[3571, 3620, 0]"] - 42["Segment
[3628, 3737, 0]"] - 43["Segment
[3745, 3795, 0]"] - 44["Segment
[3803, 3899, 0]"] - 45["Segment
[3907, 3956, 0]"] - 46["Segment
[3964, 4013, 0]"] - 47["Segment
[4021, 4055, 0]"] - 48["Segment
[4063, 4173, 0]"] - 49["Segment
[4181, 4214, 0]"] - 50["Segment
[4222, 4332, 0]"] - 51["Segment
[4340, 4444, 0]"] - 52["Segment
[4485, 4595, 0]"] - 53["Segment
[4603, 4636, 0]"] - 54["Segment
[4644, 4754, 0]"] - 55["Segment
[4762, 4811, 0]"] - 56["Segment
[4819, 4868, 0]"] - 57["Segment
[4876, 4925, 0]"] - 58["Segment
[4933, 5033, 0]"] - 59["Segment
[5041, 5091, 0]"] - 60["Segment
[5099, 5188, 0]"] - 61["Segment
[5196, 5245, 0]"] - 62["Segment
[5253, 5303, 0]"] - 63["Segment
[5311, 5345, 0]"] - 64["Segment
[5353, 5463, 0]"] - 65["Segment
[5471, 5504, 0]"] - 66["Segment
[5512, 5622, 0]"] - 67["Segment
[5630, 5637, 0]"] + 3["Segment
[454, 518, 0]"] + 4["Segment
[526, 594, 0]"] + 5["Segment
[602, 634, 0]"] + 6["Segment
[642, 710, 0]"] + 7["Segment
[718, 765, 0]"] + 8["Segment
[773, 821, 0]"] + 9["Segment
[829, 878, 0]"] + 10["Segment
[886, 984, 0]"] + 11["Segment
[992, 1040, 0]"] + 12["Segment
[1048, 1137, 0]"] + 13["Segment
[1145, 1194, 0]"] + 14["Segment
[1202, 1251, 0]"] + 15["Segment
[1259, 1292, 0]"] + 16["Segment
[1300, 1368, 0]"] + 17["Segment
[1376, 1408, 0]"] + 18["Segment
[1416, 1484, 0]"] + 19["Segment
[1492, 1554, 0]"] + 20["Segment
[1595, 1664, 0]"] + 21["Segment
[1672, 1704, 0]"] + 22["Segment
[1712, 1781, 0]"] + 23["Segment
[1789, 1836, 0]"] + 24["Segment
[1844, 1894, 0]"] + 25["Segment
[1902, 1952, 0]"] + 26["Segment
[1970, 2080, 0]"] + 27["Segment
[2098, 2147, 0]"] + 28["Segment
[2161, 2256, 0]"] + 29["Segment
[2270, 2320, 0]"] + 30["Segment
[2334, 2383, 0]"] + 31["Segment
[2391, 2424, 0]"] + 32["Segment
[2432, 2501, 0]"] + 33["Segment
[2509, 2541, 0]"] + 34["Segment
[2549, 2618, 0]"] + 35["Segment
[2659, 2720, 0]"] + 36["Segment
[2728, 2797, 0]"] + 37["Segment
[2805, 2838, 0]"] + 38["Segment
[2846, 2915, 0]"] + 39["Segment
[2923, 2972, 0]"] + 40["Segment
[2980, 3030, 0]"] + 41["Segment
[3038, 3087, 0]"] + 42["Segment
[3095, 3204, 0]"] + 43["Segment
[3212, 3262, 0]"] + 44["Segment
[3270, 3366, 0]"] + 45["Segment
[3374, 3423, 0]"] + 46["Segment
[3431, 3480, 0]"] + 47["Segment
[3488, 3522, 0]"] + 48["Segment
[3530, 3599, 0]"] + 49["Segment
[3607, 3640, 0]"] + 50["Segment
[3648, 3717, 0]"] + 51["Segment
[3725, 3788, 0]"] + 52["Segment
[3829, 3898, 0]"] + 53["Segment
[3906, 3939, 0]"] + 54["Segment
[3947, 4016, 0]"] + 55["Segment
[4024, 4073, 0]"] + 56["Segment
[4081, 4130, 0]"] + 57["Segment
[4138, 4187, 0]"] + 58["Segment
[4195, 4295, 0]"] + 59["Segment
[4303, 4353, 0]"] + 60["Segment
[4361, 4450, 0]"] + 61["Segment
[4458, 4507, 0]"] + 62["Segment
[4515, 4565, 0]"] + 63["Segment
[4573, 4607, 0]"] + 64["Segment
[4615, 4684, 0]"] + 65["Segment
[4692, 4725, 0]"] + 66["Segment
[4733, 4802, 0]"] + 67["Segment
[4810, 4817, 0]"] 68[Solid2d] end subgraph path69 [Path] - 69["Path
[5688, 5866, 0]"] - 70["Segment
[5688, 5866, 0]"] + 69["Path
[4868, 5046, 0]"] + 70["Segment
[4868, 5046, 0]"] 71[Solid2d] end 1["Plane
[323, 341, 0]"] - 72["Sweep Extrusion
[5878, 5906, 0]"] + 72["Sweep Extrusion
[5058, 5086, 0]"] 73[Wall] 74[Wall] 75[Wall] @@ -270,38 +270,38 @@ flowchart LR 264["SweepEdge Adjacent"] 265["SweepEdge Opposite"] 266["SweepEdge Adjacent"] - 267["EdgeCut Fillet
[5914, 6619, 0]"] - 268["EdgeCut Fillet
[5914, 6619, 0]"] - 269["EdgeCut Fillet
[5914, 6619, 0]"] - 270["EdgeCut Fillet
[5914, 6619, 0]"] - 271["EdgeCut Fillet
[5914, 6619, 0]"] - 272["EdgeCut Fillet
[5914, 6619, 0]"] - 273["EdgeCut Fillet
[5914, 6619, 0]"] - 274["EdgeCut Fillet
[5914, 6619, 0]"] - 275["EdgeCut Fillet
[5914, 6619, 0]"] - 276["EdgeCut Fillet
[5914, 6619, 0]"] - 277["EdgeCut Fillet
[5914, 6619, 0]"] - 278["EdgeCut Fillet
[5914, 6619, 0]"] - 279["EdgeCut Fillet
[5914, 6619, 0]"] - 280["EdgeCut Fillet
[5914, 6619, 0]"] - 281["EdgeCut Fillet
[5914, 6619, 0]"] - 282["EdgeCut Fillet
[5914, 6619, 0]"] - 283["EdgeCut Fillet
[6627, 7331, 0]"] - 284["EdgeCut Fillet
[6627, 7331, 0]"] - 285["EdgeCut Fillet
[6627, 7331, 0]"] - 286["EdgeCut Fillet
[6627, 7331, 0]"] - 287["EdgeCut Fillet
[6627, 7331, 0]"] - 288["EdgeCut Fillet
[6627, 7331, 0]"] - 289["EdgeCut Fillet
[6627, 7331, 0]"] - 290["EdgeCut Fillet
[6627, 7331, 0]"] - 291["EdgeCut Fillet
[6627, 7331, 0]"] - 292["EdgeCut Fillet
[6627, 7331, 0]"] - 293["EdgeCut Fillet
[6627, 7331, 0]"] - 294["EdgeCut Fillet
[6627, 7331, 0]"] - 295["EdgeCut Fillet
[6627, 7331, 0]"] - 296["EdgeCut Fillet
[6627, 7331, 0]"] - 297["EdgeCut Fillet
[6627, 7331, 0]"] - 298["EdgeCut Fillet
[6627, 7331, 0]"] + 267["EdgeCut Fillet
[5094, 5799, 0]"] + 268["EdgeCut Fillet
[5094, 5799, 0]"] + 269["EdgeCut Fillet
[5094, 5799, 0]"] + 270["EdgeCut Fillet
[5094, 5799, 0]"] + 271["EdgeCut Fillet
[5094, 5799, 0]"] + 272["EdgeCut Fillet
[5094, 5799, 0]"] + 273["EdgeCut Fillet
[5094, 5799, 0]"] + 274["EdgeCut Fillet
[5094, 5799, 0]"] + 275["EdgeCut Fillet
[5094, 5799, 0]"] + 276["EdgeCut Fillet
[5094, 5799, 0]"] + 277["EdgeCut Fillet
[5094, 5799, 0]"] + 278["EdgeCut Fillet
[5094, 5799, 0]"] + 279["EdgeCut Fillet
[5094, 5799, 0]"] + 280["EdgeCut Fillet
[5094, 5799, 0]"] + 281["EdgeCut Fillet
[5094, 5799, 0]"] + 282["EdgeCut Fillet
[5094, 5799, 0]"] + 283["EdgeCut Fillet
[5807, 6511, 0]"] + 284["EdgeCut Fillet
[5807, 6511, 0]"] + 285["EdgeCut Fillet
[5807, 6511, 0]"] + 286["EdgeCut Fillet
[5807, 6511, 0]"] + 287["EdgeCut Fillet
[5807, 6511, 0]"] + 288["EdgeCut Fillet
[5807, 6511, 0]"] + 289["EdgeCut Fillet
[5807, 6511, 0]"] + 290["EdgeCut Fillet
[5807, 6511, 0]"] + 291["EdgeCut Fillet
[5807, 6511, 0]"] + 292["EdgeCut Fillet
[5807, 6511, 0]"] + 293["EdgeCut Fillet
[5807, 6511, 0]"] + 294["EdgeCut Fillet
[5807, 6511, 0]"] + 295["EdgeCut Fillet
[5807, 6511, 0]"] + 296["EdgeCut Fillet
[5807, 6511, 0]"] + 297["EdgeCut Fillet
[5807, 6511, 0]"] + 298["EdgeCut Fillet
[5807, 6511, 0]"] 1 --- 2 1 --- 69 2 --- 3 diff --git a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap index 1d95ea899..af7b9403d 100644 --- a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ast.snap @@ -225,119 +225,94 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": "0.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -358,145 +333,121 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -517,8 +468,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -594,139 +546,114 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -747,8 +674,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1724,139 +1652,114 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -1877,8 +1780,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1954,139 +1858,114 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -2107,133 +1986,109 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "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" + "value": 90.0, + "suffix": "None" } }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": "0.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -2254,145 +2109,121 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -2413,8 +2244,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2490,139 +2322,114 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -2643,8 +2450,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3652,139 +3460,114 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -3805,8 +3588,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3882,139 +3666,114 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.072", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.072, + "suffix": "None" + } + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -4035,125 +3794,101 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": "0.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -4174,153 +3909,129 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "180", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { + "value": 180.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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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" - } + "type": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -4341,8 +4052,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4426,147 +4138,122 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "180", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { + "value": 180.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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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" - } + "type": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -4587,8 +4274,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5604,147 +5292,122 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "180", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { + "value": 180.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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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" - } + "type": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -5765,8 +5428,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -5850,147 +5514,122 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "180", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { + "value": 180.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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "0", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 0.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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" - } + "type": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -6011,125 +5650,101 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "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" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": "0.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -6150,153 +5765,129 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90", "start": 0, - "type": "ObjectProperty", + "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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 90.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -6317,8 +5908,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -6402,147 +5994,122 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90", "start": 0, - "type": "ObjectProperty", + "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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 90.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -6563,8 +6130,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -7540,147 +7108,122 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90", "start": 0, - "type": "ObjectProperty", + "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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 90.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -7701,8 +7244,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -7786,147 +7330,122 @@ description: Result of parsing 80-20-rail.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90", "start": 0, - "type": "ObjectProperty", + "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, + "left": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "raw": "90", + "raw": "0.072", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 90.0, + "value": 0.072, "suffix": "None" } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + }, + "operator": "/", + "right": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "raw": "4", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 4.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "railHeight", "start": 0, "type": "Identifier" }, + "path": [], "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": "Name", + "type": "Name" }, - { - "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": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "0.072", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.072, - "suffix": "None" - } - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "4", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 4.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "railHeight", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -7947,8 +7466,9 @@ description: Result of parsing 80-20-rail.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], diff --git a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap index 611686853..e9d4c12fe 100644 --- a/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/80-20-rail/ops.snap @@ -10,7 +10,7 @@ description: Operations executed 80-20-rail.kcl "name": "rail8020", "functionSourceRange": [ 239, - 7352, + 6532, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md index 35d195538..f2c3d85b7 100644 --- a/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/axial-fan/artifact_graph_flowchart.snap.md @@ -136,25 +136,25 @@ flowchart LR end subgraph path243 [Path] 243["Path
[1100, 1212, 7]"] - 244["Segment
[1220, 1330, 7]"] - 245["Segment
[1338, 1672, 7]"] - 246["Segment
[1680, 2016, 7]"] - 247["Segment
[2024, 2255, 7]"] - 248["Segment
[2263, 2270, 7]"] + 244["Segment
[1220, 1289, 7]"] + 245["Segment
[1297, 1641, 7]"] + 246["Segment
[1649, 1995, 7]"] + 247["Segment
[2003, 2244, 7]"] + 248["Segment
[2252, 2259, 7]"] 249[Solid2d] end subgraph path251 [Path] 251["Path
[1100, 1212, 7]"] - 252["Segment
[1220, 1330, 7]"] - 253["Segment
[1338, 1672, 7]"] - 254["Segment
[1680, 2016, 7]"] - 255["Segment
[2024, 2255, 7]"] - 256["Segment
[2263, 2270, 7]"] + 252["Segment
[1220, 1289, 7]"] + 253["Segment
[1297, 1641, 7]"] + 254["Segment
[1649, 1995, 7]"] + 255["Segment
[2003, 2244, 7]"] + 256["Segment
[2252, 2259, 7]"] 257[Solid2d] end subgraph path259 [Path] 259["Path
[1100, 1212, 7]"] - 264["Segment
[2263, 2270, 7]"] + 264["Segment
[2252, 2259, 7]"] 265[Solid2d] end 1["Plane
[300, 317, 5]"] @@ -311,7 +311,7 @@ flowchart LR 261["SweepEdge Opposite"] 262["SweepEdge Opposite"] 263["SweepEdge Opposite"] - 266["Sweep Loft
[2389, 2509, 7]"] + 266["Sweep Loft
[2378, 2498, 7]"] 267[Wall] 268[Wall] 269[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap b/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap index 874e0f363..d6e2d8005 100644 --- a/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/axial-fan/ops.snap @@ -1079,7 +1079,7 @@ description: Operations executed axial-fan.kcl "name": "fanBlade", "functionSourceRange": [ 997, - 2290, + 2279, 7 ], "unlabeledArg": null, @@ -1358,7 +1358,7 @@ description: Operations executed axial-fan.kcl "name": "fanBlade", "functionSourceRange": [ 997, - 2290, + 2279, 7 ], "unlabeledArg": null, @@ -1637,7 +1637,7 @@ description: Operations executed axial-fan.kcl "name": "fanBlade", "functionSourceRange": [ 997, - 2290, + 2279, 7 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/ball-bearing/artifact_graph_flowchart.snap.md index 40be04c19..2925dd71a 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/artifact_graph_flowchart.snap.md @@ -12,31 +12,31 @@ flowchart LR end subgraph path15 [Path] 15["Path
[970, 1026, 0]"] - 16["Segment
[1032, 1124, 0]"] - 17["Segment
[1130, 1137, 0]"] + 16["Segment
[1032, 1091, 0]"] + 17["Segment
[1097, 1104, 0]"] 18[Solid2d] end subgraph path24 [Path] - 24["Path
[1507, 1640, 0]"] - 25["Segment
[1646, 1739, 0]"] - 26["Segment
[1745, 1776, 0]"] - 27["Segment
[1782, 1810, 0]"] - 28["Segment
[1816, 1823, 0]"] + 24["Path
[1474, 1607, 0]"] + 25["Segment
[1613, 1673, 0]"] + 26["Segment
[1679, 1710, 0]"] + 27["Segment
[1716, 1744, 0]"] + 28["Segment
[1750, 1757, 0]"] 29[Solid2d] end subgraph path40 [Path] - 40["Path
[2157, 2299, 0]"] - 41["Segment
[2157, 2299, 0]"] + 40["Path
[2091, 2233, 0]"] + 41["Segment
[2091, 2233, 0]"] 42[Solid2d] end subgraph path50 [Path] - 50["Path
[2693, 2746, 0]"] - 51["Segment
[2693, 2746, 0]"] + 50["Path
[2627, 2680, 0]"] + 51["Segment
[2627, 2680, 0]"] 52[Solid2d] end subgraph path53 [Path] - 53["Path
[2757, 2831, 0]"] - 54["Segment
[2757, 2831, 0]"] + 53["Path
[2691, 2765, 0]"] + 54["Segment
[2691, 2765, 0]"] 55[Solid2d] end 1["Plane
[610, 657, 0]"] @@ -47,12 +47,12 @@ flowchart LR 12["SweepEdge Opposite"] 13["SweepEdge Adjacent"] 14["Plane
[947, 964, 0]"] - 19["Sweep Revolve
[1219, 1249, 0]"] + 19["Sweep Revolve
[1186, 1216, 0]"] 20[Wall] 21[Wall] 22["SweepEdge Adjacent"] - 23["Plane
[1484, 1501, 0]"] - 30["Sweep Revolve
[1865, 1895, 0]"] + 23["Plane
[1451, 1468, 0]"] + 30["Sweep Revolve
[1799, 1829, 0]"] 31[Wall] 32[Wall] 33[Wall] @@ -61,22 +61,22 @@ flowchart LR 36["SweepEdge Adjacent"] 37["SweepEdge Adjacent"] 38["SweepEdge Adjacent"] - 39["Plane
[2134, 2151, 0]"] - 43["Sweep Revolve
[2342, 2393, 0]"] + 39["Plane
[2068, 2085, 0]"] + 43["Sweep Revolve
[2276, 2327, 0]"] 44[Wall] 45["Cap Start"] 46["Cap End"] 47["SweepEdge Opposite"] 48["SweepEdge Adjacent"] - 49["Plane
[2639, 2686, 0]"] - 56["Sweep Extrusion
[2851, 2904, 0]"] + 49["Plane
[2573, 2620, 0]"] + 56["Sweep Extrusion
[2785, 2838, 0]"] 57[Wall] 58["Cap Start"] 59["Cap End"] 60["SweepEdge Opposite"] 61["SweepEdge Adjacent"] 62["StartSketchOnPlane
[596, 658, 0]"] - 63["StartSketchOnPlane
[2625, 2687, 0]"] + 63["StartSketchOnPlane
[2559, 2621, 0]"] 1 --- 2 1 --- 5 2 --- 3 diff --git a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap index 4423b008f..949c6e0dc 100644 --- a/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/ball-bearing/ast.snap @@ -1120,119 +1120,94 @@ description: Result of parsing ball-bearing.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sphereDia", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "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, + "name": "sphereDia", + "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" + } } ], "callee": { @@ -1253,8 +1228,9 @@ description: Result of parsing ball-bearing.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], @@ -1959,119 +1935,94 @@ description: Result of parsing ball-bearing.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "120", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 120.0, - "suffix": "None" - } - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "sphereDia", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "120", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 120.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "60", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 60.0, + "suffix": "None" + } + } + }, + { + "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, + "name": "sphereDia", + "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" + } } ], "callee": { @@ -2092,8 +2043,9 @@ description: Result of parsing ball-bearing.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md index 0629f4762..f7e2f3434 100644 --- a/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/bench/artifact_graph_flowchart.snap.md @@ -203,33 +203,33 @@ flowchart LR subgraph path650 [Path] 650["Path
[3265, 3292, 5]"] 651["Segment
[3300, 3319, 5]"] - 652["Segment
[3327, 3417, 5]"] + 652["Segment
[3327, 3376, 5]"] end subgraph path654 [Path] - 654["Path
[3517, 3550, 5]"] - 655["Segment
[3558, 3577, 5]"] - 656["Segment
[3585, 3607, 5]"] - 657["Segment
[3615, 3638, 5]"] - 658["Segment
[3646, 3666, 5]"] - 659["Segment
[3674, 3698, 5]"] - 660["Segment
[3706, 3729, 5]"] - 661["Segment
[3737, 3744, 5]"] + 654["Path
[3476, 3509, 5]"] + 655["Segment
[3517, 3536, 5]"] + 656["Segment
[3544, 3566, 5]"] + 657["Segment
[3574, 3597, 5]"] + 658["Segment
[3605, 3625, 5]"] + 659["Segment
[3633, 3657, 5]"] + 660["Segment
[3665, 3688, 5]"] + 661["Segment
[3696, 3703, 5]"] 662[Solid2d] end subgraph path688 [Path] 688["Path
[3265, 3292, 5]"] 689["Segment
[3300, 3319, 5]"] - 690["Segment
[3327, 3417, 5]"] + 690["Segment
[3327, 3376, 5]"] end subgraph path692 [Path] - 692["Path
[3517, 3550, 5]"] - 693["Segment
[3558, 3577, 5]"] - 694["Segment
[3585, 3607, 5]"] - 695["Segment
[3615, 3638, 5]"] - 696["Segment
[3646, 3666, 5]"] - 697["Segment
[3674, 3698, 5]"] - 698["Segment
[3706, 3729, 5]"] - 699["Segment
[3737, 3744, 5]"] + 692["Path
[3476, 3509, 5]"] + 693["Segment
[3517, 3536, 5]"] + 694["Segment
[3544, 3566, 5]"] + 695["Segment
[3574, 3597, 5]"] + 696["Segment
[3605, 3625, 5]"] + 697["Segment
[3633, 3657, 5]"] + 698["Segment
[3665, 3688, 5]"] + 699["Segment
[3696, 3703, 5]"] 700[Solid2d] end 1["Plane
[333, 353, 5]"] @@ -704,9 +704,9 @@ flowchart LR 646["SweepEdge Opposite"] 647["SweepEdge Adjacent"] 648["Sweep Extrusion
[3160, 3184, 5]"] - 649["Plane
[3825, 3860, 5]"] - 653["Plane
[3891, 3920, 5]"] - 663["Sweep Sweep
[3932, 3959, 5]"] + 649["Plane
[3784, 3819, 5]"] + 653["Plane
[3850, 3879, 5]"] + 663["Sweep Sweep
[3891, 3918, 5]"] 664[Wall] 665[Wall] 666[Wall] @@ -730,9 +730,9 @@ flowchart LR 684["SweepEdge Adjacent"] 685["SweepEdge Opposite"] 686["SweepEdge Adjacent"] - 687["Plane
[3825, 3860, 5]"] - 691["Plane
[3891, 3920, 5]"] - 701["Sweep Sweep
[3932, 3959, 5]"] + 687["Plane
[3784, 3819, 5]"] + 691["Plane
[3850, 3879, 5]"] + 701["Sweep Sweep
[3891, 3918, 5]"] 702[Wall] 703[Wall] 704[Wall] @@ -765,9 +765,9 @@ flowchart LR 731["StartSketchOnPlane
[2172, 2192, 5]"] 732["StartSketchOnPlane
[2681, 2701, 5]"] 733["StartSketchOnPlane
[3237, 3257, 5]"] - 734["StartSketchOnPlane
[3489, 3509, 5]"] + 734["StartSketchOnPlane
[3448, 3468, 5]"] 735["StartSketchOnPlane
[3237, 3257, 5]"] - 736["StartSketchOnPlane
[3489, 3509, 5]"] + 736["StartSketchOnPlane
[3448, 3468, 5]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/bench/ops.snap b/rust/kcl-lib/tests/kcl_samples/bench/ops.snap index b9b797756..40d686974 100644 --- a/rust/kcl-lib/tests/kcl_samples/bench/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/bench/ops.snap @@ -1209,8 +1209,8 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRest", "functionSourceRange": [ - 3784, - 3972, + 3743, + 3931, 5 ], "unlabeledArg": null, @@ -1255,7 +1255,7 @@ description: Operations executed bench.kcl "name": "armRestPath", "functionSourceRange": [ 3213, - 3438, + 3397, 5 ], "unlabeledArg": null, @@ -1317,8 +1317,8 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRestProfile", "functionSourceRange": [ - 3457, - 3765, + 3416, + 3724, 5 ], "unlabeledArg": null, @@ -1378,8 +1378,8 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRest", "functionSourceRange": [ - 3784, - 3972, + 3743, + 3931, 5 ], "unlabeledArg": null, @@ -1424,7 +1424,7 @@ description: Operations executed bench.kcl "name": "armRestPath", "functionSourceRange": [ 3213, - 3438, + 3397, 5 ], "unlabeledArg": null, @@ -1486,8 +1486,8 @@ description: Operations executed bench.kcl "type": "FunctionCall", "name": "armRestProfile", "functionSourceRange": [ - 3457, - 3765, + 3416, + 3724, 5 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/bottle/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/bottle/artifact_graph_flowchart.snap.md index a74f5b416..f7016aa05 100644 --- a/rust/kcl-lib/tests/kcl_samples/bottle/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/bottle/artifact_graph_flowchart.snap.md @@ -3,25 +3,25 @@ flowchart LR subgraph path2 [Path] 2["Path
[337, 378, 0]"] 3["Segment
[384, 415, 0]"] - 4["Segment
[421, 528, 0]"] - 5["Segment
[534, 556, 0]"] - 6["Segment
[586, 593, 0]"] + 4["Segment
[421, 516, 0]"] + 5["Segment
[522, 544, 0]"] + 6["Segment
[574, 581, 0]"] 7[Solid2d] end subgraph path10 [Path] - 10["Path
[750, 800, 0]"] - 11["Segment
[750, 800, 0]"] + 10["Path
[738, 788, 0]"] + 11["Segment
[738, 788, 0]"] 12[Solid2d] end 1["Plane
[314, 331, 0]"] - 8["Sweep Extrusion
[599, 641, 0]"] - 9["Plane
[750, 800, 0]"] - 13["Sweep Extrusion
[806, 833, 0]"] + 8["Sweep Extrusion
[587, 629, 0]"] + 9["Plane
[738, 788, 0]"] + 13["Sweep Extrusion
[794, 821, 0]"] 14[Wall] 15["Cap End"] 16["SweepEdge Opposite"] 17["SweepEdge Adjacent"] - 18["StartSketchOnFace
[707, 744, 0]"] + 18["StartSketchOnFace
[695, 732, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap b/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap index 2cfb01920..0ec056728 100644 --- a/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/bottle/ast.snap @@ -430,184 +430,162 @@ description: Result of parsing bottle.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": "end", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "elements": [ - { + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "bottleLength", - "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" - } - }, + "name": "bottleLength", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Identifier" }, - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "bottleWidth", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "/", - "right": { - "commentStart": 0, - "end": 0, - "raw": "3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 3.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "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" } - ], - "end": 0, + }, "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "interior", - "start": 0, - "type": "Identifier" + "type": "BinaryExpression", + "type": "BinaryExpression" }, - "start": 0, - "type": "ObjectProperty", - "value": { + { "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, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "bottleWidth", - "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" - } - ], "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bottleWidth", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "/", + "right": { + "commentStart": 0, + "end": 0, + "raw": "3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 3.0, + "suffix": "None" + } + }, "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "interiorAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "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, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "bottleWidth", + "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" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -617,7 +595,7 @@ description: Result of parsing bottle.kcl "name": { "commentStart": 0, "end": 0, - "name": "arcTo", + "name": "arc", "start": 0, "type": "Identifier" }, @@ -628,8 +606,9 @@ description: Result of parsing bottle.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md index b1def1e22..0f33d1161 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/artifact_graph_flowchart.snap.md @@ -2,44 +2,44 @@ flowchart LR subgraph path2 [Path] 2["Path
[631, 865, 0]"] - 3["Segment
[875, 1008, 0]"] - 4["Segment
[1018, 1070, 0]"] - 5["Segment
[1080, 1127, 0]"] - 6["Segment
[1137, 1189, 0]"] - 7["Segment
[1199, 1246, 0]"] - 8["Segment
[1256, 1321, 0]"] - 9["Segment
[1331, 1339, 0]"] + 3["Segment
[875, 959, 0]"] + 4["Segment
[969, 1021, 0]"] + 5["Segment
[1031, 1078, 0]"] + 6["Segment
[1088, 1140, 0]"] + 7["Segment
[1150, 1197, 0]"] + 8["Segment
[1207, 1272, 0]"] + 9["Segment
[1282, 1290, 0]"] 10[Solid2d] end subgraph path11 [Path] - 11["Path
[1354, 1404, 0]"] - 12["Segment
[1354, 1404, 0]"] + 11["Path
[1305, 1355, 0]"] + 12["Segment
[1305, 1355, 0]"] 13[Solid2d] end subgraph path15 [Path] 15["Path
[631, 865, 0]"] - 16["Segment
[875, 1008, 0]"] - 17["Segment
[1018, 1070, 0]"] - 18["Segment
[1080, 1127, 0]"] - 19["Segment
[1137, 1189, 0]"] - 20["Segment
[1199, 1246, 0]"] - 21["Segment
[1256, 1321, 0]"] - 22["Segment
[1331, 1339, 0]"] + 16["Segment
[875, 959, 0]"] + 17["Segment
[969, 1021, 0]"] + 18["Segment
[1031, 1078, 0]"] + 19["Segment
[1088, 1140, 0]"] + 20["Segment
[1150, 1197, 0]"] + 21["Segment
[1207, 1272, 0]"] + 22["Segment
[1282, 1290, 0]"] 23[Solid2d] end subgraph path24 [Path] - 24["Path
[1354, 1404, 0]"] - 25["Segment
[1354, 1404, 0]"] + 24["Path
[1305, 1355, 0]"] + 25["Segment
[1305, 1355, 0]"] 26[Solid2d] end subgraph path28 [Path] 28["Path
[631, 865, 0]"] - 35["Segment
[1331, 1339, 0]"] + 35["Segment
[1282, 1290, 0]"] 36[Solid2d] end subgraph path37 [Path] - 37["Path
[1354, 1404, 0]"] - 38["Segment
[1354, 1404, 0]"] + 37["Path
[1305, 1355, 0]"] + 38["Segment
[1305, 1355, 0]"] 39[Solid2d] end 1["Plane
[587, 620, 0]"] @@ -51,7 +51,7 @@ flowchart LR 32["SweepEdge Opposite"] 33["SweepEdge Opposite"] 34["SweepEdge Opposite"] - 40["Sweep Loft
[1534, 1623, 0]"] + 40["Sweep Loft
[1485, 1574, 0]"] 41[Wall] 42[Wall] 43[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap index 3394ccb51..f093fd39d 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ast.snap @@ -691,155 +691,130 @@ description: Result of parsing cycloidal-gear.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "helixAngleP", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 90.0, + "suffix": "None" } }, - { + "operator": "+", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "key": { + "name": { "commentStart": 0, "end": 0, - "name": "angleEnd", + "name": "helixAngleP", "start": 0, "type": "Identifier" }, + "path": [], "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "left": { - "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" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "helixAngleP", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "Name", + "type": "Name" }, - { - "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" - } - } - ], - "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "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" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "helixAngleP", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "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" + } } ], "callee": { @@ -860,8 +835,9 @@ description: Result of parsing cycloidal-gear.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap index 49112be9a..33ee14570 100644 --- a/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/cycloidal-gear/ops.snap @@ -10,7 +10,7 @@ description: Operations executed cycloidal-gear.kcl "name": "cycloidalGear", "functionSourceRange": [ 265, - 1644, + 1595, 0 ], "unlabeledArg": null, @@ -25,7 +25,7 @@ description: Operations executed cycloidal-gear.kcl "name": "gearSketch", "functionSourceRange": [ 491, - 1435, + 1386, 0 ], "unlabeledArg": null, @@ -186,7 +186,7 @@ description: Operations executed cycloidal-gear.kcl "name": "gearSketch", "functionSourceRange": [ 491, - 1435, + 1386, 0 ], "unlabeledArg": null, @@ -347,7 +347,7 @@ description: Operations executed cycloidal-gear.kcl "name": "gearSketch", "functionSourceRange": [ 491, - 1435, + 1386, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md index ef39ace49..58e45026b 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/artifact_graph_flowchart.snap.md @@ -5,8 +5,8 @@ flowchart LR 3["Segment
[1505, 1537, 0]"] 4["Segment
[1543, 1580, 0]"] 5["Segment
[1586, 1619, 0]"] - 6["Segment
[1625, 1725, 0]"] - 7["Segment
[1731, 1738, 0]"] + 6["Segment
[1625, 1692, 0]"] + 7["Segment
[1698, 1705, 0]"] 8[Solid2d] end subgraph path9 [Path] @@ -37,27 +37,27 @@ flowchart LR 29[Solid2d] end subgraph path49 [Path] - 49["Path
[2741, 2794, 0]"] - 50["Segment
[2800, 2859, 0]"] - 51["Segment
[2865, 2900, 0]"] - 52["Segment
[2906, 2939, 0]"] - 53["Segment
[2945, 3004, 0]"] - 54["Segment
[3010, 3046, 0]"] - 55["Segment
[3052, 3076, 0]"] - 56["Segment
[3082, 3089, 0]"] + 49["Path
[2708, 2761, 0]"] + 50["Segment
[2767, 2826, 0]"] + 51["Segment
[2832, 2867, 0]"] + 52["Segment
[2873, 2906, 0]"] + 53["Segment
[2912, 2971, 0]"] + 54["Segment
[2977, 3013, 0]"] + 55["Segment
[3019, 3043, 0]"] + 56["Segment
[3049, 3056, 0]"] 57[Solid2d] end subgraph path83 [Path] - 83["Path
[3684, 3731, 0]"] - 84["Segment
[3737, 3787, 0]"] - 85["Segment
[3793, 3892, 0]"] - 86["Segment
[3898, 3949, 0]"] - 87["Segment
[3955, 4053, 0]"] - 88["Segment
[4059, 4112, 0]"] - 89["Segment
[4118, 4218, 0]"] - 90["Segment
[4224, 4298, 0]"] - 91["Segment
[4304, 4405, 0]"] - 92["Segment
[4411, 4418, 0]"] + 83["Path
[3651, 3698, 0]"] + 84["Segment
[3704, 3754, 0]"] + 85["Segment
[3760, 3826, 0]"] + 86["Segment
[3832, 3883, 0]"] + 87["Segment
[3889, 3954, 0]"] + 88["Segment
[3960, 4013, 0]"] + 89["Segment
[4019, 4086, 0]"] + 90["Segment
[4092, 4166, 0]"] + 91["Segment
[4172, 4240, 0]"] + 92["Segment
[4246, 4253, 0]"] 93[Solid2d] end subgraph path121 [Path] @@ -70,7 +70,7 @@ flowchart LR 127[Solid2d] end 1["Plane
[1374, 1391, 0]"] - 30["Sweep Extrusion
[2313, 2363, 0]"] + 30["Sweep Extrusion
[2280, 2330, 0]"] 31[Wall] 32[Wall] 33[Wall] @@ -88,8 +88,8 @@ flowchart LR 45["SweepEdge Adjacent"] 46["SweepEdge Opposite"] 47["SweepEdge Adjacent"] - 48["Plane
[2638, 2680, 0]"] - 58["Sweep Extrusion
[3123, 3167, 0]"] + 48["Plane
[2605, 2647, 0]"] + 58["Sweep Extrusion
[3090, 3134, 0]"] 59[Wall] 60[Wall] 61[Wall] @@ -113,8 +113,8 @@ flowchart LR 79["SweepEdge Adjacent"] 80["SweepEdge Opposite"] 81["SweepEdge Adjacent"] - 82["Plane
[3610, 3636, 0]"] - 94["Sweep Extrusion
[4474, 4516, 0]"] + 82["Plane
[3577, 3603, 0]"] + 94["Sweep Extrusion
[4309, 4351, 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
[4751, 4801, 0]"] + 128["Sweep Extrusion
[4586, 4636, 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
[2400, 2541, 0]"] - 142["EdgeCut Fillet
[2400, 2541, 0]"] - 143["EdgeCut Fillet
[3210, 3341, 0]"] - 144["EdgeCut Fillet
[3210, 3341, 0]"] - 145["StartSketchOnPlane
[2624, 2681, 0]"] - 146["StartSketchOnFace
[4575, 4614, 0]"] + 141["EdgeCut Fillet
[2367, 2508, 0]"] + 142["EdgeCut Fillet
[2367, 2508, 0]"] + 143["EdgeCut Fillet
[3177, 3308, 0]"] + 144["EdgeCut Fillet
[3177, 3308, 0]"] + 145["StartSketchOnPlane
[2591, 2648, 0]"] + 146["StartSketchOnFace
[4410, 4449, 0]"] 1 --- 2 1 --- 9 1 --- 16 diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap index 54e706100..51d7a0860 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/ast.snap @@ -2690,95 +2690,70 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "196.912390", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 196.91239, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "163.087610", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 163.08761, - "suffix": "None" - } - } - }, - { - "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": "110.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 110.0, - "suffix": "None" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "163.087610", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 163.08761, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "196.912390", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 196.91239, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "110.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 110.0, + "suffix": "None" + } + } } ], "callee": { @@ -2799,8 +2774,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": [], @@ -5419,107 +5395,82 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "90.0", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "90.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "value": 90.0, + "suffix": "None" } }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": "gripFilletRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "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": "gripFilletRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5540,8 +5491,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": [ @@ -5641,99 +5593,74 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": "gripFilletRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "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": "gripFilletRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5754,8 +5681,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": [ @@ -5863,99 +5791,74 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "180.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - } - }, - { - "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": "gripFilletRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "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": "gripFilletRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -5976,8 +5879,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": [ @@ -6103,99 +6007,74 @@ description: Result of parsing food-service-spatula.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "180.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "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": "gripFilletRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "suffix": "None" + } + } + }, + { + "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": "gripFilletRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -6216,8 +6095,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": [], diff --git a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap index 9e9a264ec..d3e9969b3 100644 --- a/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/food-service-spatula/program_memory.snap @@ -583,9 +583,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -745,9 +745,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1108,9 +1108,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1270,9 +1270,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1598,9 +1598,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -1811,9 +1811,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2841, - "end": 2858, - "start": 2841, + "commentStart": 2808, + "end": 2825, + "start": 2808, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1838,9 +1838,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2989, - "end": 3003, - "start": 2989, + "commentStart": 2956, + "end": 2970, + "start": 2956, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -1882,9 +1882,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2841, - "end": 2858, - "start": 2841, + "commentStart": 2808, + "end": 2825, + "start": 2808, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -1945,9 +1945,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.3213 ], "tag": { - "commentStart": 2989, - "end": 3003, - "start": 2989, + "commentStart": 2956, + "end": 2970, + "start": 2956, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2303,9 +2303,9 @@ description: Variables in memory after executing food-service-spatula.kcl 3.5 ], "tag": { - "commentStart": 2841, - "end": 2858, - "start": 2841, + "commentStart": 2808, + "end": 2825, + "start": 2808, "type": "TagDeclarator", "value": "handleBottomEdge" }, @@ -2366,9 +2366,9 @@ description: Variables in memory after executing food-service-spatula.kcl 91.3213 ], "tag": { - "commentStart": 2989, - "end": 3003, - "start": 2989, + "commentStart": 2956, + "end": 2970, + "start": 2956, "type": "TagDeclarator", "value": "handleTopEdge" }, @@ -2658,9 +2658,9 @@ description: Variables in memory after executing food-service-spatula.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, @@ -2820,9 +2820,9 @@ description: Variables in memory after executing food-service-spatula.kcl 7.0 ], "tag": { - "commentStart": 4285, - "end": 4297, - "start": 4285, + "commentStart": 4153, + "end": 4165, + "start": 4153, "type": "TagDeclarator", "value": "gripEdgeTop" }, diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/french-press/artifact_graph_flowchart.snap.md index 565fab2e3..956af5871 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/french-press/artifact_graph_flowchart.snap.md @@ -13,111 +13,111 @@ flowchart LR 18["Path
[971, 1015, 0]"] 19["Segment
[1021, 1040, 0]"] 20["Segment
[1046, 1080, 0]"] - 21["Segment
[1086, 1170, 0]"] - 22["Segment
[1176, 1227, 0]"] - 23["Segment
[1233, 1317, 0]"] - 24["Segment
[1323, 1381, 0]"] - 25["Segment
[1387, 1469, 0]"] - 26["Segment
[1475, 1515, 0]"] - 27["Segment
[1521, 1540, 0]"] - 28["Segment
[1546, 1599, 0]"] - 29["Segment
[1605, 1687, 0]"] - 30["Segment
[1693, 1763, 0]"] - 31["Segment
[1769, 1853, 0]"] - 32["Segment
[1859, 1929, 0]"] - 33["Segment
[1935, 2019, 0]"] - 34["Segment
[2025, 2081, 0]"] - 35["Segment
[2087, 2094, 0]"] + 21["Segment
[1086, 1137, 0]"] + 22["Segment
[1143, 1194, 0]"] + 23["Segment
[1200, 1251, 0]"] + 24["Segment
[1257, 1315, 0]"] + 25["Segment
[1321, 1370, 0]"] + 26["Segment
[1376, 1416, 0]"] + 27["Segment
[1422, 1441, 0]"] + 28["Segment
[1447, 1500, 0]"] + 29["Segment
[1506, 1555, 0]"] + 30["Segment
[1561, 1631, 0]"] + 31["Segment
[1637, 1688, 0]"] + 32["Segment
[1694, 1764, 0]"] + 33["Segment
[1770, 1821, 0]"] + 34["Segment
[1827, 1883, 0]"] + 35["Segment
[1889, 1896, 0]"] 36[Solid2d] end subgraph path89 [Path] - 89["Path
[2361, 2420, 0]"] - 90["Segment
[2361, 2420, 0]"] + 89["Path
[2163, 2222, 0]"] + 90["Segment
[2163, 2222, 0]"] 91[Solid2d] end subgraph path98 [Path] - 98["Path
[2526, 2556, 0]"] - 99["Segment
[2562, 2581, 0]"] - 100["Segment
[2587, 2670, 0]"] - 101["Segment
[2676, 2732, 0]"] - 102["Segment
[2738, 2745, 0]"] + 98["Path
[2328, 2358, 0]"] + 99["Segment
[2364, 2383, 0]"] + 100["Segment
[2389, 2439, 0]"] + 101["Segment
[2445, 2501, 0]"] + 102["Segment
[2507, 2514, 0]"] 103[Solid2d] end subgraph path117 [Path] - 117["Path
[2983, 3014, 0]"] - 118["Segment
[3020, 3065, 0]"] - 119["Segment
[3071, 3148, 0]"] - 120["Segment
[3154, 3193, 0]"] - 121["Segment
[3199, 3245, 0]"] - 122["Segment
[3251, 3276, 0]"] - 123["Segment
[3282, 3338, 0]"] - 124["Segment
[3344, 3351, 0]"] + 117["Path
[2752, 2783, 0]"] + 118["Segment
[2789, 2834, 0]"] + 119["Segment
[2840, 2917, 0]"] + 120["Segment
[2923, 2962, 0]"] + 121["Segment
[2968, 3014, 0]"] + 122["Segment
[3020, 3045, 0]"] + 123["Segment
[3051, 3107, 0]"] + 124["Segment
[3113, 3120, 0]"] 125[Solid2d] end subgraph path140 [Path] - 140["Path
[3431, 3458, 0]"] - 141["Segment
[3464, 3484, 0]"] - 142["Segment
[3490, 3533, 0]"] - 143["Segment
[3539, 3557, 0]"] - 144["Segment
[3563, 3583, 0]"] - 145["Segment
[3589, 3609, 0]"] - 146["Segment
[3615, 3655, 0]"] - 147["Segment
[3661, 3717, 0]"] - 148["Segment
[3723, 3730, 0]"] + 140["Path
[3200, 3227, 0]"] + 141["Segment
[3233, 3253, 0]"] + 142["Segment
[3259, 3302, 0]"] + 143["Segment
[3308, 3326, 0]"] + 144["Segment
[3332, 3352, 0]"] + 145["Segment
[3358, 3378, 0]"] + 146["Segment
[3384, 3424, 0]"] + 147["Segment
[3430, 3486, 0]"] + 148["Segment
[3492, 3499, 0]"] 149[Solid2d] end subgraph path166 [Path] - 166["Path
[3834, 3893, 0]"] - 167["Segment
[3834, 3893, 0]"] + 166["Path
[3603, 3662, 0]"] + 167["Segment
[3603, 3662, 0]"] 168[Solid2d] end subgraph path169 [Path] - 169["Path
[3904, 3941, 0]"] - 170["Segment
[3904, 3941, 0]"] + 169["Path
[3673, 3710, 0]"] + 170["Segment
[3673, 3710, 0]"] 171[Solid2d] end subgraph path178 [Path] - 178["Path
[4088, 4126, 0]"] - 179["Segment
[4088, 4126, 0]"] + 178["Path
[3857, 3895, 0]"] + 179["Segment
[3857, 3895, 0]"] 180[Solid2d] end subgraph path192 [Path] - 192["Path
[4404, 4442, 0]"] - 193["Segment
[4404, 4442, 0]"] + 192["Path
[4173, 4211, 0]"] + 193["Segment
[4173, 4211, 0]"] 194[Solid2d] end subgraph path203 [Path] - 203["Path
[4694, 4746, 0]"] - 204["Segment
[4694, 4746, 0]"] + 203["Path
[4463, 4515, 0]"] + 204["Segment
[4463, 4515, 0]"] 205[Solid2d] end subgraph path213 [Path] - 213["Path
[4991, 5035, 0]"] - 214["Segment
[5041, 5081, 0]"] - 215["Segment
[5087, 5106, 0]"] - 216["Segment
[5112, 5131, 0]"] - 217["Segment
[5137, 5156, 0]"] - 218["Segment
[5162, 5187, 0]"] - 219["Segment
[5193, 5333, 0]"] - 220["Segment
[5339, 5395, 0]"] - 221["Segment
[5401, 5408, 0]"] + 213["Path
[4760, 4804, 0]"] + 214["Segment
[4810, 4850, 0]"] + 215["Segment
[4856, 4875, 0]"] + 216["Segment
[4881, 4900, 0]"] + 217["Segment
[4906, 4925, 0]"] + 218["Segment
[4931, 4956, 0]"] + 219["Segment
[4962, 5102, 0]"] + 220["Segment
[5108, 5164, 0]"] + 221["Segment
[5170, 5177, 0]"] 222[Solid2d] end subgraph path239 [Path] - 239["Path
[5538, 5567, 0]"] - 240["Segment
[5573, 5594, 0]"] - 241["Segment
[5600, 5640, 0]"] - 242["Segment
[5646, 5686, 0]"] - 243["Segment
[5692, 5733, 0]"] - 244["Segment
[5739, 5761, 0]"] - 245["Segment
[5767, 5788, 0]"] - 246["Segment
[5794, 5819, 0]"] - 247["Segment
[5825, 5865, 0]"] - 248["Segment
[5871, 5912, 0]"] - 249["Segment
[5918, 5959, 0]"] - 250["Segment
[5965, 5986, 0]"] - 251["Segment
[5992, 6048, 0]"] - 252["Segment
[6054, 6061, 0]"] + 239["Path
[5307, 5336, 0]"] + 240["Segment
[5342, 5363, 0]"] + 241["Segment
[5369, 5409, 0]"] + 242["Segment
[5415, 5455, 0]"] + 243["Segment
[5461, 5502, 0]"] + 244["Segment
[5508, 5530, 0]"] + 245["Segment
[5536, 5557, 0]"] + 246["Segment
[5563, 5588, 0]"] + 247["Segment
[5594, 5634, 0]"] + 248["Segment
[5640, 5681, 0]"] + 249["Segment
[5687, 5728, 0]"] + 250["Segment
[5734, 5755, 0]"] + 251["Segment
[5761, 5817, 0]"] + 252["Segment
[5823, 5830, 0]"] 253[Solid2d] end 1["Plane
[242, 259, 0]"] @@ -130,7 +130,7 @@ flowchart LR 15["SweepEdge Adjacent"] 16["SweepEdge Adjacent"] 17["Plane
[942, 965, 0]"] - 37["Sweep Extrusion
[2100, 2122, 0]"] + 37["Sweep Extrusion
[1902, 1924, 0]"] 38[Wall] 39[Wall] 40[Wall] @@ -181,14 +181,14 @@ flowchart LR 85["SweepEdge Adjacent"] 86["SweepEdge Opposite"] 87["SweepEdge Adjacent"] - 88["Plane
[2327, 2354, 0]"] - 92["Sweep Extrusion
[2435, 2469, 0]"] + 88["Plane
[2129, 2156, 0]"] + 92["Sweep Extrusion
[2237, 2271, 0]"] 93[Wall] 94["Cap Start"] 95["Cap End"] 96["SweepEdge Opposite"] 97["SweepEdge Adjacent"] - 104["Sweep Extrusion
[2894, 2929, 0]"] + 104["Sweep Extrusion
[2663, 2698, 0]"] 105[Wall] 106[Wall] 107[Wall] @@ -198,10 +198,10 @@ flowchart LR 111["SweepEdge Adjacent"] 112["SweepEdge Opposite"] 113["SweepEdge Adjacent"] - 114["Sweep Extrusion
[2894, 2929, 0]"] - 115["Sweep Extrusion
[2894, 2929, 0]"] - 116["Plane
[2960, 2977, 0]"] - 126["Sweep Revolve
[3357, 3374, 0]"] + 114["Sweep Extrusion
[2663, 2698, 0]"] + 115["Sweep Extrusion
[2663, 2698, 0]"] + 116["Plane
[2729, 2746, 0]"] + 126["Sweep Revolve
[3126, 3143, 0]"] 127[Wall] 128[Wall] 129[Wall] @@ -214,8 +214,8 @@ flowchart LR 136["SweepEdge Adjacent"] 137["SweepEdge Adjacent"] 138["SweepEdge Adjacent"] - 139["Plane
[3408, 3425, 0]"] - 150["Sweep Revolve
[3736, 3753, 0]"] + 139["Plane
[3177, 3194, 0]"] + 150["Sweep Revolve
[3505, 3522, 0]"] 151[Wall] 152[Wall] 153[Wall] @@ -230,40 +230,40 @@ flowchart LR 162["SweepEdge Adjacent"] 163["SweepEdge Adjacent"] 164["SweepEdge Adjacent"] - 165["Plane
[3797, 3827, 0]"] - 172["Sweep Extrusion
[3960, 3994, 0]"] + 165["Plane
[3566, 3596, 0]"] + 172["Sweep Extrusion
[3729, 3763, 0]"] 173[Wall] 174["Cap Start"] 175["Cap End"] 176["SweepEdge Opposite"] 177["SweepEdge Adjacent"] - 181["Sweep Extrusion
[4275, 4310, 0]"] + 181["Sweep Extrusion
[4044, 4079, 0]"] 182[Wall] 183["SweepEdge Opposite"] 184["SweepEdge Adjacent"] - 185["Sweep Extrusion
[4275, 4310, 0]"] - 186["Sweep Extrusion
[4275, 4310, 0]"] - 187["Sweep Extrusion
[4275, 4310, 0]"] - 188["Sweep Extrusion
[4275, 4310, 0]"] - 189["Sweep Extrusion
[4275, 4310, 0]"] - 190["Sweep Extrusion
[4275, 4310, 0]"] - 191["Sweep Extrusion
[4275, 4310, 0]"] - 195["Sweep Extrusion
[4591, 4626, 0]"] + 185["Sweep Extrusion
[4044, 4079, 0]"] + 186["Sweep Extrusion
[4044, 4079, 0]"] + 187["Sweep Extrusion
[4044, 4079, 0]"] + 188["Sweep Extrusion
[4044, 4079, 0]"] + 189["Sweep Extrusion
[4044, 4079, 0]"] + 190["Sweep Extrusion
[4044, 4079, 0]"] + 191["Sweep Extrusion
[4044, 4079, 0]"] + 195["Sweep Extrusion
[4360, 4395, 0]"] 196[Wall] 197["SweepEdge Opposite"] 198["SweepEdge Adjacent"] - 199["Sweep Extrusion
[4591, 4626, 0]"] - 200["Sweep Extrusion
[4591, 4626, 0]"] - 201["Sweep Extrusion
[4591, 4626, 0]"] - 202["Plane
[4671, 4688, 0]"] - 206["Sweep Extrusion
[4842, 4883, 0]"] + 199["Sweep Extrusion
[4360, 4395, 0]"] + 200["Sweep Extrusion
[4360, 4395, 0]"] + 201["Sweep Extrusion
[4360, 4395, 0]"] + 202["Plane
[4440, 4457, 0]"] + 206["Sweep Extrusion
[4611, 4652, 0]"] 207[Wall] 208["Cap Start"] 209["Cap End"] 210["SweepEdge Opposite"] 211["SweepEdge Adjacent"] - 212["Plane
[4968, 4985, 0]"] - 223["Sweep Revolve
[5414, 5431, 0]"] + 212["Plane
[4737, 4754, 0]"] + 223["Sweep Revolve
[5183, 5200, 0]"] 224[Wall] 225[Wall] 226[Wall] @@ -278,8 +278,8 @@ flowchart LR 235["SweepEdge Adjacent"] 236["SweepEdge Adjacent"] 237["SweepEdge Adjacent"] - 238["Plane
[5486, 5531, 0]"] - 254["Sweep Extrusion
[6075, 6120, 0]"] + 238["Plane
[5255, 5300, 0]"] + 254["Sweep Extrusion
[5844, 5889, 0]"] 255[Wall] 256[Wall] 257[Wall] @@ -318,12 +318,12 @@ flowchart LR 290["SweepEdge Adjacent"] 291["SweepEdge Opposite"] 292["SweepEdge Adjacent"] - 293["StartSketchOnPlane
[2313, 2355, 0]"] - 294["StartSketchOnFace
[2483, 2520, 0]"] - 295["StartSketchOnPlane
[3783, 3828, 0]"] - 296["StartSketchOnFace
[4045, 4082, 0]"] - 297["StartSketchOnFace
[4361, 4398, 0]"] - 298["StartSketchOnPlane
[5472, 5532, 0]"] + 293["StartSketchOnPlane
[2115, 2157, 0]"] + 294["StartSketchOnFace
[2285, 2322, 0]"] + 295["StartSketchOnPlane
[3552, 3597, 0]"] + 296["StartSketchOnFace
[3814, 3851, 0]"] + 297["StartSketchOnFace
[4130, 4167, 0]"] + 298["StartSketchOnPlane
[5241, 5301, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap b/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap index c19042367..9cf48c798 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/ast.snap @@ -1406,95 +1406,70 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "205", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 205.0, - "suffix": "None" - } - } - }, - { - "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.3", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.3, - "suffix": "None" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "205", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 205.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.3", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.3, + "suffix": "None" + } + } } ], "callee": { @@ -1515,8 +1490,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": [ @@ -1616,103 +1592,78 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "30", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 30.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "120", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 120.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - }, - { - "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" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "30", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 30.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "120", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 120.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" + } + } } ], "callee": { @@ -1733,8 +1684,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": [ @@ -1834,95 +1786,70 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.5, - "suffix": "None" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "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" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.5, + "suffix": "None" + } + } } ], "callee": { @@ -1943,8 +1870,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": [ @@ -2174,95 +2102,70 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "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" - } - } - }, - { - "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" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "60", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 60.0, + "suffix": "None" + } + } + }, + { + "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" + } + } } ], "callee": { @@ -2283,8 +2186,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": [ @@ -2432,103 +2336,78 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "120", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "120", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 120.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" + "value": 120.0, + "suffix": "None" } }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "30", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 30.0, - "suffix": "None" - } - } - }, - { - "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.5", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.5, - "suffix": "None" - } - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + "commentStart": 0, + "end": 0, + "operator": "-", + "start": 0, + "type": "UnaryExpression", + "type": "UnaryExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "30", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 30.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.5", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.5, + "suffix": "None" + } + } } ], "callee": { @@ -2549,8 +2428,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": [ @@ -2706,95 +2586,70 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "205", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 205.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "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" - } - } - }, - { - "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" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "205", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 205.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "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" + } + } } ], "callee": { @@ -2815,8 +2670,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": [ @@ -3758,103 +3614,78 @@ description: Result of parsing french-press.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "30", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 30.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - }, - { - "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": "1.2", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.2, - "suffix": "None" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "30", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 30.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": "1.2", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 1.2, + "suffix": "None" + } + } } ], "callee": { @@ -3875,8 +3706,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": [ diff --git a/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap index 79fd99256..841cc5cb4 100644 --- a/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/french-press/program_memory.snap @@ -4983,9 +4983,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -5003,9 +5003,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -5023,9 +5023,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -5043,9 +5043,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -5063,9 +5063,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -5083,9 +5083,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -5189,9 +5189,9 @@ description: Variables in memory after executing french-press.kcl 0.3732 ], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -5239,9 +5239,9 @@ description: Variables in memory after executing french-press.kcl -0.966 ], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -5289,9 +5289,9 @@ description: Variables in memory after executing french-press.kcl -0.133 ], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -5333,9 +5333,9 @@ description: Variables in memory after executing french-press.kcl -0.033 ], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -5383,9 +5383,9 @@ description: Variables in memory after executing french-press.kcl -0.1134 ], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -5433,9 +5433,9 @@ description: Variables in memory after executing french-press.kcl -0.1789 ], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -5654,9 +5654,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -5674,9 +5674,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -5694,9 +5694,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -5714,9 +5714,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -5734,9 +5734,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -5754,9 +5754,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -5860,9 +5860,9 @@ description: Variables in memory after executing french-press.kcl 0.3732 ], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -5910,9 +5910,9 @@ description: Variables in memory after executing french-press.kcl -0.966 ], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -5960,9 +5960,9 @@ description: Variables in memory after executing french-press.kcl -0.133 ], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -6004,9 +6004,9 @@ description: Variables in memory after executing french-press.kcl -0.033 ], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -6054,9 +6054,9 @@ description: Variables in memory after executing french-press.kcl -0.1134 ], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -6104,9 +6104,9 @@ description: Variables in memory after executing french-press.kcl -0.1789 ], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -6325,9 +6325,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -6345,9 +6345,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -6365,9 +6365,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -6385,9 +6385,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -6405,9 +6405,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -6425,9 +6425,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -6531,9 +6531,9 @@ description: Variables in memory after executing french-press.kcl 0.3732 ], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -6581,9 +6581,9 @@ description: Variables in memory after executing french-press.kcl -0.966 ], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -6631,9 +6631,9 @@ description: Variables in memory after executing french-press.kcl -0.133 ], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -6675,9 +6675,9 @@ description: Variables in memory after executing french-press.kcl -0.033 ], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -6725,9 +6725,9 @@ description: Variables in memory after executing french-press.kcl -0.1134 ], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -6775,9 +6775,9 @@ description: Variables in memory after executing french-press.kcl -0.1789 ], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -6996,9 +6996,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -7016,9 +7016,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -7036,9 +7036,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -7056,9 +7056,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -7076,9 +7076,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -7096,9 +7096,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -7202,9 +7202,9 @@ description: Variables in memory after executing french-press.kcl 0.3732 ], "tag": { - "commentStart": 1220, - "end": 1226, - "start": 1220, + "commentStart": 1187, + "end": 1193, + "start": 1187, "type": "TagDeclarator", "value": "edge2" }, @@ -7252,9 +7252,9 @@ description: Variables in memory after executing french-press.kcl -0.966 ], "tag": { - "commentStart": 1374, - "end": 1380, - "start": 1374, + "commentStart": 1308, + "end": 1314, + "start": 1308, "type": "TagDeclarator", "value": "edge3" }, @@ -7302,9 +7302,9 @@ description: Variables in memory after executing french-press.kcl -0.133 ], "tag": { - "commentStart": 1506, - "end": 1514, - "start": 1506, + "commentStart": 1407, + "end": 1415, + "start": 1407, "type": "TagDeclarator", "value": "edgeLen" }, @@ -7346,9 +7346,9 @@ description: Variables in memory after executing french-press.kcl -0.033 ], "tag": { - "commentStart": 1592, - "end": 1598, - "start": 1592, + "commentStart": 1493, + "end": 1499, + "start": 1493, "type": "TagDeclarator", "value": "edge4" }, @@ -7396,9 +7396,9 @@ description: Variables in memory after executing french-press.kcl -0.1134 ], "tag": { - "commentStart": 1756, - "end": 1762, - "start": 1756, + "commentStart": 1624, + "end": 1630, + "start": 1624, "type": "TagDeclarator", "value": "edge5" }, @@ -7446,9 +7446,9 @@ description: Variables in memory after executing french-press.kcl -0.1789 ], "tag": { - "commentStart": 1922, - "end": 1928, - "start": 1922, + "commentStart": 1757, + "end": 1763, + "start": 1757, "type": "TagDeclarator", "value": "edge6" }, @@ -8538,9 +8538,9 @@ description: Variables in memory after executing french-press.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3142, - "end": 3147, - "start": 3142, + "commentStart": 2911, + "end": 2916, + "start": 2911, "type": "TagDeclarator", "value": "seg1" }, @@ -8608,9 +8608,9 @@ description: Variables in memory after executing french-press.kcl 1.11 ], "tag": { - "commentStart": 3142, - "end": 3147, - "start": 3142, + "commentStart": 2911, + "end": 2916, + "start": 2911, "type": "TagDeclarator", "value": "seg1" }, diff --git a/rust/kcl-lib/tests/kcl_samples/gear/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gear/artifact_graph_flowchart.snap.md index 522600636..5417b4e06 100644 --- a/rust/kcl-lib/tests/kcl_samples/gear/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gear/artifact_graph_flowchart.snap.md @@ -108,7 +108,7 @@ flowchart LR 111["Segment
[1537, 1575, 0]"] 112["Segment
[1537, 1575, 0]"] 113["Segment
[1537, 1575, 0]"] - 114["Segment
[1938, 2040, 0]"] + 114["Segment
[1938, 2007, 0]"] 115["Segment
[1765, 1795, 0]"] 116["Segment
[1765, 1795, 0]"] 117["Segment
[1765, 1795, 0]"] @@ -210,17 +210,17 @@ flowchart LR 213["Segment
[1765, 1795, 0]"] 214["Segment
[1765, 1795, 0]"] 215["Segment
[1765, 1795, 0]"] - 216["Segment
[2086, 2093, 0]"] + 216["Segment
[2053, 2060, 0]"] 217[Solid2d] end subgraph path219 [Path] - 219["Path
[2574, 2674, 0]"] - 220["Segment
[2680, 2707, 0]"] - 221["Segment
[2713, 2741, 0]"] - 222["Segment
[2747, 2775, 0]"] - 223["Segment
[2781, 2901, 0]"] - 224["Segment
[2907, 3016, 0]"] - 225["Segment
[3022, 3029, 0]"] + 219["Path
[2541, 2641, 0]"] + 220["Segment
[2647, 2674, 0]"] + 221["Segment
[2680, 2708, 0]"] + 222["Segment
[2714, 2742, 0]"] + 223["Segment
[2748, 2835, 0]"] + 224["Segment
[2841, 2917, 0]"] + 225["Segment
[2923, 2930, 0]"] 226[Solid2d] end 1["Plane
[1299, 1316, 0]"] @@ -231,8 +231,8 @@ flowchart LR 9["SweepEdge Opposite"] 10["SweepEdge Adjacent"] 11["Plane
[1826, 1843, 0]"] - 218["Sweep Extrusion
[2099, 2127, 0]"] - 227["Sweep Extrusion
[3035, 3064, 0]"] + 218["Sweep Extrusion
[2066, 2094, 0]"] + 227["Sweep Extrusion
[2936, 2965, 0]"] 228[Wall] 229[Wall] 230[Wall] @@ -245,7 +245,7 @@ flowchart LR 237["SweepEdge Adjacent"] 238["SweepEdge Opposite"] 239["SweepEdge Adjacent"] - 240["StartSketchOnFace
[2537, 2568, 0]"] + 240["StartSketchOnFace
[2504, 2535, 0]"] 1 --- 2 2 --- 3 2 ---- 5 diff --git a/rust/kcl-lib/tests/kcl_samples/gear/ast.snap b/rust/kcl-lib/tests/kcl_samples/gear/ast.snap index 4454091bb..3e901dfd1 100644 --- a/rust/kcl-lib/tests/kcl_samples/gear/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gear/ast.snap @@ -3081,123 +3081,98 @@ description: Result of parsing gear.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toothAngle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "baseDiameter", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "toothAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "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, + "name": "baseDiameter", + "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" + } } ], "callee": { @@ -3218,8 +3193,9 @@ description: Result of parsing gear.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4291,217 +4267,42 @@ description: Result of parsing gear.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "left": { + "left": { + "argument": { "commentStart": 0, "end": 0, - "left": { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 1.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - }, - "operator": "*", - "right": { - "arguments": [ - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "startAngle", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "callee": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "toDegrees", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name" - }, - "commentStart": 0, - "end": 0, - "start": 0, - "type": "CallExpression", - "type": "CallExpression" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "360", + "raw": "1", "start": 0, "type": "Literal", "type": "Literal", "value": { - "value": 360.0, + "value": 1.0, "suffix": "None" } }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { "commentStart": 0, "end": 0, - "name": "radius", + "operator": "-", "start": 0, - "type": "Identifier" + "type": "UnaryExpression", + "type": "UnaryExpression" }, - "start": 0, - "type": "ObjectProperty", - "value": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "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": "arc", - "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": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { + "operator": "*", + "right": { "arguments": [ { "abs_path": false, @@ -4540,73 +4341,76 @@ description: Result of parsing gear.kcl "start": 0, "type": "CallExpression", "type": "CallExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } + "type": "BinaryExpression", + "type": "BinaryExpression" }, - { + "operator": "+", + "right": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "radius", - "start": 0, - "type": "Identifier" - }, + "raw": "360", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "holeRadius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "value": 360.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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "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": "holeRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } } ], "callee": { @@ -4627,8 +4431,132 @@ description: Result of parsing gear.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": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "arguments": [ + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "startAngle", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "toDegrees", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpression", + "type": "CallExpression" + } + }, + { + "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": "holeRadius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + } + ], + "callee": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "arc", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name" + }, + "commentStart": 0, + "end": 0, + "start": 0, + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md index ea17177f6..a5c9f9b43 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/artifact_graph_flowchart.snap.md @@ -19,66 +19,66 @@ flowchart LR 34[Solid2d] end subgraph path54 [Path] - 54["Path
[4747, 4827, 0]"] - 55["Segment
[4747, 4827, 0]"] + 54["Path
[4583, 4663, 0]"] + 55["Segment
[4583, 4663, 0]"] 56[Solid2d] end subgraph path58 [Path] - 58["Path
[4378, 4403, 0]"] - 59["Segment
[4411, 4452, 0]"] - 60["Segment
[4460, 4501, 0]"] - 61["Segment
[4509, 4562, 0]"] - 62["Segment
[4570, 4591, 0]"] + 58["Path
[4214, 4239, 0]"] + 59["Segment
[4247, 4288, 0]"] + 60["Segment
[4296, 4337, 0]"] + 61["Segment
[4345, 4398, 0]"] + 62["Segment
[4406, 4427, 0]"] 63[Solid2d] end subgraph path65 [Path] 65["Path
[2723, 2810, 0]"] 66["Segment
[2818, 2897, 0]"] - 67["Segment
[2905, 3011, 0]"] - 68["Segment
[3019, 3101, 0]"] - 69["Segment
[3109, 3155, 0]"] - 70["Segment
[3163, 3242, 0]"] - 71["Segment
[3250, 3358, 0]"] - 72["Segment
[3366, 3445, 0]"] - 73["Segment
[3453, 3499, 0]"] - 74["Segment
[3507, 3589, 0]"] - 75["Segment
[3597, 3706, 0]"] - 76["Segment
[3714, 3793, 0]"] - 77["Segment
[3801, 3866, 0]"] - 78["Segment
[3874, 3956, 0]"] - 79["Segment
[3964, 4073, 0]"] - 80["Segment
[4081, 4163, 0]"] - 81["Segment
[4171, 4220, 0]"] - 82["Segment
[4228, 4235, 0]"] + 67["Segment
[2905, 2970, 0]"] + 68["Segment
[2978, 3060, 0]"] + 69["Segment
[3068, 3114, 0]"] + 70["Segment
[3122, 3201, 0]"] + 71["Segment
[3209, 3276, 0]"] + 72["Segment
[3284, 3363, 0]"] + 73["Segment
[3371, 3417, 0]"] + 74["Segment
[3425, 3507, 0]"] + 75["Segment
[3515, 3583, 0]"] + 76["Segment
[3591, 3670, 0]"] + 77["Segment
[3678, 3743, 0]"] + 78["Segment
[3751, 3833, 0]"] + 79["Segment
[3841, 3909, 0]"] + 80["Segment
[3917, 3999, 0]"] + 81["Segment
[4007, 4056, 0]"] + 82["Segment
[4064, 4071, 0]"] 83[Solid2d] end subgraph path100 [Path] - 100["Path
[4378, 4403, 0]"] - 101["Segment
[4411, 4452, 0]"] - 102["Segment
[4460, 4501, 0]"] - 103["Segment
[4509, 4562, 0]"] - 104["Segment
[4570, 4591, 0]"] + 100["Path
[4214, 4239, 0]"] + 101["Segment
[4247, 4288, 0]"] + 102["Segment
[4296, 4337, 0]"] + 103["Segment
[4345, 4398, 0]"] + 104["Segment
[4406, 4427, 0]"] 105[Solid2d] end subgraph path106 [Path] 106["Path
[2723, 2810, 0]"] 107["Segment
[2818, 2897, 0]"] - 108["Segment
[2905, 3011, 0]"] - 109["Segment
[3019, 3101, 0]"] - 110["Segment
[3109, 3155, 0]"] - 111["Segment
[3163, 3242, 0]"] - 112["Segment
[3250, 3358, 0]"] - 113["Segment
[3366, 3445, 0]"] - 114["Segment
[3453, 3499, 0]"] - 115["Segment
[3507, 3589, 0]"] - 116["Segment
[3597, 3706, 0]"] - 117["Segment
[3714, 3793, 0]"] - 118["Segment
[3801, 3866, 0]"] - 119["Segment
[3874, 3956, 0]"] - 120["Segment
[3964, 4073, 0]"] - 121["Segment
[4081, 4163, 0]"] - 122["Segment
[4171, 4220, 0]"] - 123["Segment
[4228, 4235, 0]"] + 108["Segment
[2905, 2970, 0]"] + 109["Segment
[2978, 3060, 0]"] + 110["Segment
[3068, 3114, 0]"] + 111["Segment
[3122, 3201, 0]"] + 112["Segment
[3209, 3276, 0]"] + 113["Segment
[3284, 3363, 0]"] + 114["Segment
[3371, 3417, 0]"] + 115["Segment
[3425, 3507, 0]"] + 116["Segment
[3515, 3583, 0]"] + 117["Segment
[3591, 3670, 0]"] + 118["Segment
[3678, 3743, 0]"] + 119["Segment
[3751, 3833, 0]"] + 120["Segment
[3841, 3909, 0]"] + 121["Segment
[3917, 3999, 0]"] + 122["Segment
[4007, 4056, 0]"] + 123["Segment
[4064, 4071, 0]"] 124[Solid2d] end 1["Plane
[1217, 1255, 0]"] @@ -119,10 +119,10 @@ flowchart LR 50["SweepEdge Adjacent"] 51["SweepEdge Opposite"] 52["SweepEdge Adjacent"] - 53["Plane
[4724, 4741, 0]"] - 57["Plane
[4350, 4370, 0]"] + 53["Plane
[4560, 4577, 0]"] + 57["Plane
[4186, 4206, 0]"] 64["Plane
[2695, 2715, 0]"] - 84["Sweep Extrusion
[5170, 5212, 0]"] + 84["Sweep Extrusion
[5006, 5048, 0]"] 85[Wall] 86[Wall] 87[Wall] @@ -137,8 +137,8 @@ flowchart LR 96["SweepEdge Adjacent"] 97["SweepEdge Opposite"] 98["SweepEdge Adjacent"] - 99["Plane
[5706, 5741, 0]"] - 125["Sweep Extrusion
[5824, 5875, 0]"] + 99["Plane
[5542, 5577, 0]"] + 125["Sweep Extrusion
[5660, 5711, 0]"] 126[Wall] 127[Wall] 128[Wall] @@ -153,17 +153,17 @@ flowchart LR 137["SweepEdge Adjacent"] 138["SweepEdge Opposite"] 139["SweepEdge Adjacent"] - 140["EdgeCut Fillet
[5275, 5614, 0]"] - 141["EdgeCut Fillet
[5275, 5614, 0]"] - 142["EdgeCut Fillet
[5275, 5614, 0]"] - 143["EdgeCut Fillet
[5275, 5614, 0]"] - 144["EdgeCut Fillet
[5939, 6283, 0]"] - 145["EdgeCut Fillet
[5939, 6283, 0]"] - 146["EdgeCut Fillet
[5939, 6283, 0]"] - 147["EdgeCut Fillet
[5939, 6283, 0]"] + 140["EdgeCut Fillet
[5111, 5450, 0]"] + 141["EdgeCut Fillet
[5111, 5450, 0]"] + 142["EdgeCut Fillet
[5111, 5450, 0]"] + 143["EdgeCut Fillet
[5111, 5450, 0]"] + 144["EdgeCut Fillet
[5775, 6119, 0]"] + 145["EdgeCut Fillet
[5775, 6119, 0]"] + 146["EdgeCut Fillet
[5775, 6119, 0]"] + 147["EdgeCut Fillet
[5775, 6119, 0]"] 148["StartSketchOnPlane
[894, 914, 0]"] 149["StartSketchOnPlane
[894, 914, 0]"] - 150["StartSketchOnPlane
[4350, 4370, 0]"] + 150["StartSketchOnPlane
[4186, 4206, 0]"] 151["StartSketchOnPlane
[2695, 2715, 0]"] 1 --- 2 2 --- 3 diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap index 7d04ddae7..331fc9103 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ast.snap @@ -3062,119 +3062,94 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "magOuterDiam", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "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, + "name": "magOuterDiam", + "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" + } } ], "callee": { @@ -3195,8 +3170,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3630,119 +3606,94 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "180.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "magOuterDiam", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "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, + "name": "magOuterDiam", + "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" + } } ], "callee": { @@ -3763,8 +3714,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4198,119 +4150,94 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "180.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "magOuterDiam", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "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, + "name": "magOuterDiam", + "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" + } } ], "callee": { @@ -4331,8 +4258,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -4792,119 +4720,94 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "360.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 360.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "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": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "magOuterDiam", - "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" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "suffix": "None" + } + } + }, + { + "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, + "name": "magOuterDiam", + "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" + } } ], "callee": { @@ -4925,8 +4828,9 @@ description: Result of parsing gridfinity-baseplate-magnets.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap index 964702590..9b36670e1 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/ops.snap @@ -1107,8 +1107,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "FunctionCall", "name": "magnetBase", "functionSourceRange": [ - 4319, - 4661, + 4155, + 4497, 0 ], "unlabeledArg": null, @@ -1138,7 +1138,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "name": "magnetCenterCutout", "functionSourceRange": [ 2668, - 4259, + 4095, 0 ], "unlabeledArg": null, @@ -1366,8 +1366,8 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "type": "FunctionCall", "name": "magnetBase", "functionSourceRange": [ - 4319, - 4661, + 4155, + 4497, 0 ], "unlabeledArg": null, @@ -1397,7 +1397,7 @@ description: Operations executed gridfinity-baseplate-magnets.kcl "name": "magnetCenterCutout", "functionSourceRange": [ 2668, - 4259, + 4095, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap index 66e5ce4ef..6cad01b29 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-baseplate-magnets/program_memory.snap @@ -11475,9 +11475,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -11488,9 +11488,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -11501,9 +11501,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -11514,9 +11514,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -11537,9 +11537,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -11562,9 +11562,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -11587,9 +11587,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -11612,9 +11612,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -11731,9 +11731,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -11744,9 +11744,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -11757,9 +11757,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -11770,9 +11770,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -11793,9 +11793,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -11818,9 +11818,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -11843,9 +11843,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -11868,9 +11868,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -12061,9 +12061,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -12074,9 +12074,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -12087,9 +12087,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -12100,9 +12100,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -12123,9 +12123,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -12148,9 +12148,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -12173,9 +12173,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -12198,9 +12198,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -12317,9 +12317,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -12330,9 +12330,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -12343,9 +12343,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -12356,9 +12356,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -12379,9 +12379,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -12404,9 +12404,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -12429,9 +12429,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -12454,9 +12454,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -12651,9 +12651,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -12676,9 +12676,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -12701,9 +12701,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -12726,9 +12726,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, @@ -12842,9 +12842,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4443, - "end": 4451, - "start": 4443, + "commentStart": 4279, + "end": 4287, + "start": 4279, "type": "TagDeclarator", "value": "line001" }, @@ -12867,9 +12867,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 0.0 ], "tag": { - "commentStart": 4492, - "end": 4500, - "start": 4492, + "commentStart": 4328, + "end": 4336, + "start": 4328, "type": "TagDeclarator", "value": "line002" }, @@ -12892,9 +12892,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4553, - "end": 4561, - "start": 4553, + "commentStart": 4389, + "end": 4397, + "start": 4389, "type": "TagDeclarator", "value": "line003" }, @@ -12917,9 +12917,9 @@ description: Variables in memory after executing gridfinity-baseplate-magnets.kc 42.0 ], "tag": { - "commentStart": 4582, - "end": 4590, - "start": 4582, + "commentStart": 4418, + "end": 4426, + "start": 4418, "type": "TagDeclarator", "value": "line004" }, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md index b9cfde526..930fb045a 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/artifact_graph_flowchart.snap.md @@ -44,49 +44,49 @@ flowchart LR subgraph path119 [Path] 119["Path
[5326, 5351, 0]"] 120["Segment
[5411, 5454, 0]"] - 121["Segment
[5462, 5571, 0]"] - 122["Segment
[5634, 5683, 0]"] - 123["Segment
[5691, 5716, 0]"] - 124["Segment
[5724, 5767, 0]"] - 125["Segment
[5775, 5800, 0]"] - 126["Segment
[5808, 5852, 0]"] - 127["Segment
[5860, 5867, 0]"] + 121["Segment
[5462, 5582, 0]"] + 122["Segment
[5645, 5694, 0]"] + 123["Segment
[5702, 5727, 0]"] + 124["Segment
[5735, 5778, 0]"] + 125["Segment
[5786, 5811, 0]"] + 126["Segment
[5819, 5863, 0]"] + 127["Segment
[5871, 5878, 0]"] 128[Solid2d] end subgraph path157 [Path] 157["Path
[5326, 5351, 0]"] 158["Segment
[5411, 5454, 0]"] - 159["Segment
[5462, 5571, 0]"] - 160["Segment
[5634, 5683, 0]"] - 161["Segment
[5691, 5716, 0]"] - 162["Segment
[5724, 5767, 0]"] - 163["Segment
[5775, 5800, 0]"] - 164["Segment
[5808, 5852, 0]"] - 165["Segment
[5860, 5867, 0]"] + 159["Segment
[5462, 5582, 0]"] + 160["Segment
[5645, 5694, 0]"] + 161["Segment
[5702, 5727, 0]"] + 162["Segment
[5735, 5778, 0]"] + 163["Segment
[5786, 5811, 0]"] + 164["Segment
[5819, 5863, 0]"] + 165["Segment
[5871, 5878, 0]"] 166[Solid2d] end subgraph path195 [Path] 195["Path
[5326, 5351, 0]"] 196["Segment
[5411, 5454, 0]"] - 197["Segment
[5462, 5571, 0]"] - 198["Segment
[5634, 5683, 0]"] - 199["Segment
[5691, 5716, 0]"] - 200["Segment
[5724, 5767, 0]"] - 201["Segment
[5775, 5800, 0]"] - 202["Segment
[5808, 5852, 0]"] - 203["Segment
[5860, 5867, 0]"] + 197["Segment
[5462, 5582, 0]"] + 198["Segment
[5645, 5694, 0]"] + 199["Segment
[5702, 5727, 0]"] + 200["Segment
[5735, 5778, 0]"] + 201["Segment
[5786, 5811, 0]"] + 202["Segment
[5819, 5863, 0]"] + 203["Segment
[5871, 5878, 0]"] 204[Solid2d] end subgraph path233 [Path] 233["Path
[5326, 5351, 0]"] 234["Segment
[5411, 5454, 0]"] - 235["Segment
[5462, 5571, 0]"] - 236["Segment
[5634, 5683, 0]"] - 237["Segment
[5691, 5716, 0]"] - 238["Segment
[5724, 5767, 0]"] - 239["Segment
[5775, 5800, 0]"] - 240["Segment
[5808, 5852, 0]"] - 241["Segment
[5860, 5867, 0]"] + 235["Segment
[5462, 5582, 0]"] + 236["Segment
[5645, 5694, 0]"] + 237["Segment
[5702, 5727, 0]"] + 238["Segment
[5735, 5778, 0]"] + 239["Segment
[5786, 5811, 0]"] + 240["Segment
[5819, 5863, 0]"] + 241["Segment
[5871, 5878, 0]"] 242[Solid2d] end 1["Plane
[1541, 1588, 0]"] @@ -176,7 +176,7 @@ flowchart LR 116["EdgeCut Fillet
[4915, 5148, 0]"] 117["EdgeCut Fillet
[4915, 5148, 0]"] 118["Plane
[5298, 5318, 0]"] - 129["Sweep Extrusion
[6542, 6654, 0]"] + 129["Sweep Extrusion
[6553, 6665, 0]"] 130[Wall] 131[Wall] 132[Wall] @@ -204,7 +204,7 @@ flowchart LR 154["SweepEdge Opposite"] 155["SweepEdge Adjacent"] 156["Plane
[5298, 5318, 0]"] - 167["Sweep Extrusion
[6720, 6834, 0]"] + 167["Sweep Extrusion
[6731, 6845, 0]"] 168[Wall] 169[Wall] 170[Wall] @@ -232,7 +232,7 @@ flowchart LR 192["SweepEdge Opposite"] 193["SweepEdge Adjacent"] 194["Plane
[5298, 5318, 0]"] - 205["Sweep Revolve
[7660, 7715, 0]"] + 205["Sweep Revolve
[7671, 7726, 0]"] 206[Wall] 207[Wall] 208[Wall] @@ -260,7 +260,7 @@ flowchart LR 230["SweepEdge Opposite"] 231["SweepEdge Adjacent"] 232["Plane
[5298, 5318, 0]"] - 243["Sweep Revolve
[7777, 7831, 0]"] + 243["Sweep Revolve
[7788, 7842, 0]"] 244[Wall] 245[Wall] 246[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap index dc514889d..ae96415cd 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ast.snap @@ -6890,103 +6890,88 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "180.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "45.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 45.0, - "suffix": "None" - } - } - }, - { - "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.500000", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.5, - "suffix": "None" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "45.0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 45.0, + "suffix": "None" + } + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "arc000" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.500000", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.5, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "arc000" + } } ], "callee": { @@ -7007,8 +6992,9 @@ description: Result of parsing gridfinity-bins-stacking-lip.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap index 5c7a860b1..01287a36d 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/ops.snap @@ -1652,7 +1652,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "lipFace", "functionSourceRange": [ 5273, - 5889, + 5900, 0 ], "unlabeledArg": null, @@ -1894,7 +1894,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "lipFace", "functionSourceRange": [ 5273, - 5889, + 5900, 0 ], "unlabeledArg": null, @@ -2434,7 +2434,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "lipFace", "functionSourceRange": [ 5273, - 5889, + 5900, 0 ], "unlabeledArg": null, @@ -2751,7 +2751,7 @@ description: Operations executed gridfinity-bins-stacking-lip.kcl "name": "lipFace", "functionSourceRange": [ 5273, - 5889, + 5900, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap index 912980a17..f2a612b3b 100644 --- a/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/gridfinity-bins-stacking-lip/program_memory.snap @@ -14906,9 +14906,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -14919,9 +14919,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -15008,9 +15008,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -15033,9 +15033,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -15256,9 +15256,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -15269,9 +15269,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -15358,9 +15358,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -15383,9 +15383,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -15611,9 +15611,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -15624,9 +15624,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -15713,9 +15713,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -15738,9 +15738,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -15961,9 +15961,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -15974,9 +15974,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -16063,9 +16063,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -16088,9 +16088,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -16332,9 +16332,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -16345,9 +16345,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -16434,9 +16434,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -16459,9 +16459,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -16682,9 +16682,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -16695,9 +16695,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -16784,9 +16784,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -16809,9 +16809,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -17047,9 +17047,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -17060,9 +17060,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -17149,9 +17149,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -17174,9 +17174,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -17397,9 +17397,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -17410,9 +17410,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -17499,9 +17499,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -17524,9 +17524,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -17747,9 +17747,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -17760,9 +17760,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -17849,9 +17849,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -17874,9 +17874,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -18097,9 +18097,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -18110,9 +18110,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -18199,9 +18199,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -18224,9 +18224,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -18515,9 +18515,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -18528,9 +18528,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -18617,9 +18617,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -18642,9 +18642,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -18865,9 +18865,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -18878,9 +18878,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, @@ -18967,9 +18967,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc ], "radius": 0.5, "tag": { - "commentStart": 5563, - "end": 5570, - "start": 5563, + "commentStart": 5565, + "end": 5572, + "start": 5565, "type": "TagDeclarator", "value": "arc000" }, @@ -18992,9 +18992,9 @@ description: Variables in memory after executing gridfinity-bins-stacking-lip.kc 6.1464 ], "tag": { - "commentStart": 5674, - "end": 5682, - "start": 5674, + "commentStart": 5685, + "end": 5693, + "start": 5685, "type": "TagDeclarator", "value": "line001" }, diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md index 344a2436d..939f77e74 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/artifact_graph_flowchart.snap.md @@ -31,327 +31,327 @@ flowchart LR end subgraph path61 [Path] 61["Path
[1993, 2052, 0]"] - 62["Segment
[2060, 2152, 0]"] - 63["Segment
[2160, 2234, 0]"] - 64["Segment
[2242, 2281, 0]"] - 65["Segment
[2289, 2396, 0]"] - 66["Segment
[2404, 2443, 0]"] - 67["Segment
[2451, 2568, 0]"] - 68["Segment
[2576, 2615, 0]"] - 69["Segment
[2623, 2708, 0]"] - 70["Segment
[2716, 2723, 0]"] + 62["Segment
[2060, 2111, 0]"] + 63["Segment
[2119, 2193, 0]"] + 64["Segment
[2201, 2240, 0]"] + 65["Segment
[2248, 2355, 0]"] + 66["Segment
[2363, 2402, 0]"] + 67["Segment
[2410, 2527, 0]"] + 68["Segment
[2535, 2574, 0]"] + 69["Segment
[2582, 2667, 0]"] + 70["Segment
[2675, 2682, 0]"] 71[Solid2d] end subgraph path100 [Path] 100["Path
[1993, 2052, 0]"] - 101["Segment
[2060, 2152, 0]"] - 102["Segment
[2160, 2234, 0]"] - 103["Segment
[2242, 2281, 0]"] - 104["Segment
[2289, 2396, 0]"] - 105["Segment
[2404, 2443, 0]"] - 106["Segment
[2451, 2568, 0]"] - 107["Segment
[2576, 2615, 0]"] - 108["Segment
[2623, 2708, 0]"] - 109["Segment
[2716, 2723, 0]"] + 101["Segment
[2060, 2111, 0]"] + 102["Segment
[2119, 2193, 0]"] + 103["Segment
[2201, 2240, 0]"] + 104["Segment
[2248, 2355, 0]"] + 105["Segment
[2363, 2402, 0]"] + 106["Segment
[2410, 2527, 0]"] + 107["Segment
[2535, 2574, 0]"] + 108["Segment
[2582, 2667, 0]"] + 109["Segment
[2675, 2682, 0]"] 110[Solid2d] end subgraph path139 [Path] 139["Path
[1993, 2052, 0]"] - 140["Segment
[2060, 2152, 0]"] - 141["Segment
[2160, 2234, 0]"] - 142["Segment
[2242, 2281, 0]"] - 143["Segment
[2289, 2396, 0]"] - 144["Segment
[2404, 2443, 0]"] - 145["Segment
[2451, 2568, 0]"] - 146["Segment
[2576, 2615, 0]"] - 147["Segment
[2623, 2708, 0]"] - 148["Segment
[2716, 2723, 0]"] + 140["Segment
[2060, 2111, 0]"] + 141["Segment
[2119, 2193, 0]"] + 142["Segment
[2201, 2240, 0]"] + 143["Segment
[2248, 2355, 0]"] + 144["Segment
[2363, 2402, 0]"] + 145["Segment
[2410, 2527, 0]"] + 146["Segment
[2535, 2574, 0]"] + 147["Segment
[2582, 2667, 0]"] + 148["Segment
[2675, 2682, 0]"] 149[Solid2d] end subgraph path178 [Path] 178["Path
[1993, 2052, 0]"] - 179["Segment
[2060, 2152, 0]"] - 180["Segment
[2160, 2234, 0]"] - 181["Segment
[2242, 2281, 0]"] - 182["Segment
[2289, 2396, 0]"] - 183["Segment
[2404, 2443, 0]"] - 184["Segment
[2451, 2568, 0]"] - 185["Segment
[2576, 2615, 0]"] - 186["Segment
[2623, 2708, 0]"] - 187["Segment
[2716, 2723, 0]"] + 179["Segment
[2060, 2111, 0]"] + 180["Segment
[2119, 2193, 0]"] + 181["Segment
[2201, 2240, 0]"] + 182["Segment
[2248, 2355, 0]"] + 183["Segment
[2363, 2402, 0]"] + 184["Segment
[2410, 2527, 0]"] + 185["Segment
[2535, 2574, 0]"] + 186["Segment
[2582, 2667, 0]"] + 187["Segment
[2675, 2682, 0]"] 188[Solid2d] end subgraph path217 [Path] 217["Path
[1993, 2052, 0]"] - 218["Segment
[2060, 2152, 0]"] - 219["Segment
[2160, 2234, 0]"] - 220["Segment
[2242, 2281, 0]"] - 221["Segment
[2289, 2396, 0]"] - 222["Segment
[2404, 2443, 0]"] - 223["Segment
[2451, 2568, 0]"] - 224["Segment
[2576, 2615, 0]"] - 225["Segment
[2623, 2708, 0]"] - 226["Segment
[2716, 2723, 0]"] + 218["Segment
[2060, 2111, 0]"] + 219["Segment
[2119, 2193, 0]"] + 220["Segment
[2201, 2240, 0]"] + 221["Segment
[2248, 2355, 0]"] + 222["Segment
[2363, 2402, 0]"] + 223["Segment
[2410, 2527, 0]"] + 224["Segment
[2535, 2574, 0]"] + 225["Segment
[2582, 2667, 0]"] + 226["Segment
[2675, 2682, 0]"] 227[Solid2d] end subgraph path256 [Path] 256["Path
[1993, 2052, 0]"] - 257["Segment
[2060, 2152, 0]"] - 258["Segment
[2160, 2234, 0]"] - 259["Segment
[2242, 2281, 0]"] - 260["Segment
[2289, 2396, 0]"] - 261["Segment
[2404, 2443, 0]"] - 262["Segment
[2451, 2568, 0]"] - 263["Segment
[2576, 2615, 0]"] - 264["Segment
[2623, 2708, 0]"] - 265["Segment
[2716, 2723, 0]"] + 257["Segment
[2060, 2111, 0]"] + 258["Segment
[2119, 2193, 0]"] + 259["Segment
[2201, 2240, 0]"] + 260["Segment
[2248, 2355, 0]"] + 261["Segment
[2363, 2402, 0]"] + 262["Segment
[2410, 2527, 0]"] + 263["Segment
[2535, 2574, 0]"] + 264["Segment
[2582, 2667, 0]"] + 265["Segment
[2675, 2682, 0]"] 266[Solid2d] end subgraph path295 [Path] 295["Path
[1993, 2052, 0]"] - 296["Segment
[2060, 2152, 0]"] - 297["Segment
[2160, 2234, 0]"] - 298["Segment
[2242, 2281, 0]"] - 299["Segment
[2289, 2396, 0]"] - 300["Segment
[2404, 2443, 0]"] - 301["Segment
[2451, 2568, 0]"] - 302["Segment
[2576, 2615, 0]"] - 303["Segment
[2623, 2708, 0]"] - 304["Segment
[2716, 2723, 0]"] + 296["Segment
[2060, 2111, 0]"] + 297["Segment
[2119, 2193, 0]"] + 298["Segment
[2201, 2240, 0]"] + 299["Segment
[2248, 2355, 0]"] + 300["Segment
[2363, 2402, 0]"] + 301["Segment
[2410, 2527, 0]"] + 302["Segment
[2535, 2574, 0]"] + 303["Segment
[2582, 2667, 0]"] + 304["Segment
[2675, 2682, 0]"] 305[Solid2d] end subgraph path334 [Path] 334["Path
[1993, 2052, 0]"] - 335["Segment
[2060, 2152, 0]"] - 336["Segment
[2160, 2234, 0]"] - 337["Segment
[2242, 2281, 0]"] - 338["Segment
[2289, 2396, 0]"] - 339["Segment
[2404, 2443, 0]"] - 340["Segment
[2451, 2568, 0]"] - 341["Segment
[2576, 2615, 0]"] - 342["Segment
[2623, 2708, 0]"] - 343["Segment
[2716, 2723, 0]"] + 335["Segment
[2060, 2111, 0]"] + 336["Segment
[2119, 2193, 0]"] + 337["Segment
[2201, 2240, 0]"] + 338["Segment
[2248, 2355, 0]"] + 339["Segment
[2363, 2402, 0]"] + 340["Segment
[2410, 2527, 0]"] + 341["Segment
[2535, 2574, 0]"] + 342["Segment
[2582, 2667, 0]"] + 343["Segment
[2675, 2682, 0]"] 344[Solid2d] end subgraph path373 [Path] 373["Path
[1993, 2052, 0]"] - 374["Segment
[2060, 2152, 0]"] - 375["Segment
[2160, 2234, 0]"] - 376["Segment
[2242, 2281, 0]"] - 377["Segment
[2289, 2396, 0]"] - 378["Segment
[2404, 2443, 0]"] - 379["Segment
[2451, 2568, 0]"] - 380["Segment
[2576, 2615, 0]"] - 381["Segment
[2623, 2708, 0]"] - 382["Segment
[2716, 2723, 0]"] + 374["Segment
[2060, 2111, 0]"] + 375["Segment
[2119, 2193, 0]"] + 376["Segment
[2201, 2240, 0]"] + 377["Segment
[2248, 2355, 0]"] + 378["Segment
[2363, 2402, 0]"] + 379["Segment
[2410, 2527, 0]"] + 380["Segment
[2535, 2574, 0]"] + 381["Segment
[2582, 2667, 0]"] + 382["Segment
[2675, 2682, 0]"] 383[Solid2d] end subgraph path412 [Path] 412["Path
[1993, 2052, 0]"] - 413["Segment
[2060, 2152, 0]"] - 414["Segment
[2160, 2234, 0]"] - 415["Segment
[2242, 2281, 0]"] - 416["Segment
[2289, 2396, 0]"] - 417["Segment
[2404, 2443, 0]"] - 418["Segment
[2451, 2568, 0]"] - 419["Segment
[2576, 2615, 0]"] - 420["Segment
[2623, 2708, 0]"] - 421["Segment
[2716, 2723, 0]"] + 413["Segment
[2060, 2111, 0]"] + 414["Segment
[2119, 2193, 0]"] + 415["Segment
[2201, 2240, 0]"] + 416["Segment
[2248, 2355, 0]"] + 417["Segment
[2363, 2402, 0]"] + 418["Segment
[2410, 2527, 0]"] + 419["Segment
[2535, 2574, 0]"] + 420["Segment
[2582, 2667, 0]"] + 421["Segment
[2675, 2682, 0]"] 422[Solid2d] end subgraph path451 [Path] 451["Path
[1993, 2052, 0]"] - 452["Segment
[2060, 2152, 0]"] - 453["Segment
[2160, 2234, 0]"] - 454["Segment
[2242, 2281, 0]"] - 455["Segment
[2289, 2396, 0]"] - 456["Segment
[2404, 2443, 0]"] - 457["Segment
[2451, 2568, 0]"] - 458["Segment
[2576, 2615, 0]"] - 459["Segment
[2623, 2708, 0]"] - 460["Segment
[2716, 2723, 0]"] + 452["Segment
[2060, 2111, 0]"] + 453["Segment
[2119, 2193, 0]"] + 454["Segment
[2201, 2240, 0]"] + 455["Segment
[2248, 2355, 0]"] + 456["Segment
[2363, 2402, 0]"] + 457["Segment
[2410, 2527, 0]"] + 458["Segment
[2535, 2574, 0]"] + 459["Segment
[2582, 2667, 0]"] + 460["Segment
[2675, 2682, 0]"] 461[Solid2d] end subgraph path490 [Path] 490["Path
[1993, 2052, 0]"] - 491["Segment
[2060, 2152, 0]"] - 492["Segment
[2160, 2234, 0]"] - 493["Segment
[2242, 2281, 0]"] - 494["Segment
[2289, 2396, 0]"] - 495["Segment
[2404, 2443, 0]"] - 496["Segment
[2451, 2568, 0]"] - 497["Segment
[2576, 2615, 0]"] - 498["Segment
[2623, 2708, 0]"] - 499["Segment
[2716, 2723, 0]"] + 491["Segment
[2060, 2111, 0]"] + 492["Segment
[2119, 2193, 0]"] + 493["Segment
[2201, 2240, 0]"] + 494["Segment
[2248, 2355, 0]"] + 495["Segment
[2363, 2402, 0]"] + 496["Segment
[2410, 2527, 0]"] + 497["Segment
[2535, 2574, 0]"] + 498["Segment
[2582, 2667, 0]"] + 499["Segment
[2675, 2682, 0]"] 500[Solid2d] end subgraph path529 [Path] 529["Path
[1993, 2052, 0]"] - 530["Segment
[2060, 2152, 0]"] - 531["Segment
[2160, 2234, 0]"] - 532["Segment
[2242, 2281, 0]"] - 533["Segment
[2289, 2396, 0]"] - 534["Segment
[2404, 2443, 0]"] - 535["Segment
[2451, 2568, 0]"] - 536["Segment
[2576, 2615, 0]"] - 537["Segment
[2623, 2708, 0]"] - 538["Segment
[2716, 2723, 0]"] + 530["Segment
[2060, 2111, 0]"] + 531["Segment
[2119, 2193, 0]"] + 532["Segment
[2201, 2240, 0]"] + 533["Segment
[2248, 2355, 0]"] + 534["Segment
[2363, 2402, 0]"] + 535["Segment
[2410, 2527, 0]"] + 536["Segment
[2535, 2574, 0]"] + 537["Segment
[2582, 2667, 0]"] + 538["Segment
[2675, 2682, 0]"] 539[Solid2d] end subgraph path568 [Path] 568["Path
[1993, 2052, 0]"] - 569["Segment
[2060, 2152, 0]"] - 570["Segment
[2160, 2234, 0]"] - 571["Segment
[2242, 2281, 0]"] - 572["Segment
[2289, 2396, 0]"] - 573["Segment
[2404, 2443, 0]"] - 574["Segment
[2451, 2568, 0]"] - 575["Segment
[2576, 2615, 0]"] - 576["Segment
[2623, 2708, 0]"] - 577["Segment
[2716, 2723, 0]"] + 569["Segment
[2060, 2111, 0]"] + 570["Segment
[2119, 2193, 0]"] + 571["Segment
[2201, 2240, 0]"] + 572["Segment
[2248, 2355, 0]"] + 573["Segment
[2363, 2402, 0]"] + 574["Segment
[2410, 2527, 0]"] + 575["Segment
[2535, 2574, 0]"] + 576["Segment
[2582, 2667, 0]"] + 577["Segment
[2675, 2682, 0]"] 578[Solid2d] end subgraph path607 [Path] 607["Path
[1993, 2052, 0]"] - 608["Segment
[2060, 2152, 0]"] - 609["Segment
[2160, 2234, 0]"] - 610["Segment
[2242, 2281, 0]"] - 611["Segment
[2289, 2396, 0]"] - 612["Segment
[2404, 2443, 0]"] - 613["Segment
[2451, 2568, 0]"] - 614["Segment
[2576, 2615, 0]"] - 615["Segment
[2623, 2708, 0]"] - 616["Segment
[2716, 2723, 0]"] + 608["Segment
[2060, 2111, 0]"] + 609["Segment
[2119, 2193, 0]"] + 610["Segment
[2201, 2240, 0]"] + 611["Segment
[2248, 2355, 0]"] + 612["Segment
[2363, 2402, 0]"] + 613["Segment
[2410, 2527, 0]"] + 614["Segment
[2535, 2574, 0]"] + 615["Segment
[2582, 2667, 0]"] + 616["Segment
[2675, 2682, 0]"] 617[Solid2d] end subgraph path646 [Path] 646["Path
[1993, 2052, 0]"] - 647["Segment
[2060, 2152, 0]"] - 648["Segment
[2160, 2234, 0]"] - 649["Segment
[2242, 2281, 0]"] - 650["Segment
[2289, 2396, 0]"] - 651["Segment
[2404, 2443, 0]"] - 652["Segment
[2451, 2568, 0]"] - 653["Segment
[2576, 2615, 0]"] - 654["Segment
[2623, 2708, 0]"] - 655["Segment
[2716, 2723, 0]"] + 647["Segment
[2060, 2111, 0]"] + 648["Segment
[2119, 2193, 0]"] + 649["Segment
[2201, 2240, 0]"] + 650["Segment
[2248, 2355, 0]"] + 651["Segment
[2363, 2402, 0]"] + 652["Segment
[2410, 2527, 0]"] + 653["Segment
[2535, 2574, 0]"] + 654["Segment
[2582, 2667, 0]"] + 655["Segment
[2675, 2682, 0]"] 656[Solid2d] end subgraph path685 [Path] 685["Path
[1993, 2052, 0]"] - 686["Segment
[2060, 2152, 0]"] - 687["Segment
[2160, 2234, 0]"] - 688["Segment
[2242, 2281, 0]"] - 689["Segment
[2289, 2396, 0]"] - 690["Segment
[2404, 2443, 0]"] - 691["Segment
[2451, 2568, 0]"] - 692["Segment
[2576, 2615, 0]"] - 693["Segment
[2623, 2708, 0]"] - 694["Segment
[2716, 2723, 0]"] + 686["Segment
[2060, 2111, 0]"] + 687["Segment
[2119, 2193, 0]"] + 688["Segment
[2201, 2240, 0]"] + 689["Segment
[2248, 2355, 0]"] + 690["Segment
[2363, 2402, 0]"] + 691["Segment
[2410, 2527, 0]"] + 692["Segment
[2535, 2574, 0]"] + 693["Segment
[2582, 2667, 0]"] + 694["Segment
[2675, 2682, 0]"] 695[Solid2d] end subgraph path724 [Path] 724["Path
[1993, 2052, 0]"] - 725["Segment
[2060, 2152, 0]"] - 726["Segment
[2160, 2234, 0]"] - 727["Segment
[2242, 2281, 0]"] - 728["Segment
[2289, 2396, 0]"] - 729["Segment
[2404, 2443, 0]"] - 730["Segment
[2451, 2568, 0]"] - 731["Segment
[2576, 2615, 0]"] - 732["Segment
[2623, 2708, 0]"] - 733["Segment
[2716, 2723, 0]"] + 725["Segment
[2060, 2111, 0]"] + 726["Segment
[2119, 2193, 0]"] + 727["Segment
[2201, 2240, 0]"] + 728["Segment
[2248, 2355, 0]"] + 729["Segment
[2363, 2402, 0]"] + 730["Segment
[2410, 2527, 0]"] + 731["Segment
[2535, 2574, 0]"] + 732["Segment
[2582, 2667, 0]"] + 733["Segment
[2675, 2682, 0]"] 734[Solid2d] end subgraph path763 [Path] 763["Path
[1993, 2052, 0]"] - 764["Segment
[2060, 2152, 0]"] - 765["Segment
[2160, 2234, 0]"] - 766["Segment
[2242, 2281, 0]"] - 767["Segment
[2289, 2396, 0]"] - 768["Segment
[2404, 2443, 0]"] - 769["Segment
[2451, 2568, 0]"] - 770["Segment
[2576, 2615, 0]"] - 771["Segment
[2623, 2708, 0]"] - 772["Segment
[2716, 2723, 0]"] + 764["Segment
[2060, 2111, 0]"] + 765["Segment
[2119, 2193, 0]"] + 766["Segment
[2201, 2240, 0]"] + 767["Segment
[2248, 2355, 0]"] + 768["Segment
[2363, 2402, 0]"] + 769["Segment
[2410, 2527, 0]"] + 770["Segment
[2535, 2574, 0]"] + 771["Segment
[2582, 2667, 0]"] + 772["Segment
[2675, 2682, 0]"] 773[Solid2d] end subgraph path802 [Path] 802["Path
[1993, 2052, 0]"] - 803["Segment
[2060, 2152, 0]"] - 804["Segment
[2160, 2234, 0]"] - 805["Segment
[2242, 2281, 0]"] - 806["Segment
[2289, 2396, 0]"] - 807["Segment
[2404, 2443, 0]"] - 808["Segment
[2451, 2568, 0]"] - 809["Segment
[2576, 2615, 0]"] - 810["Segment
[2623, 2708, 0]"] - 811["Segment
[2716, 2723, 0]"] + 803["Segment
[2060, 2111, 0]"] + 804["Segment
[2119, 2193, 0]"] + 805["Segment
[2201, 2240, 0]"] + 806["Segment
[2248, 2355, 0]"] + 807["Segment
[2363, 2402, 0]"] + 808["Segment
[2410, 2527, 0]"] + 809["Segment
[2535, 2574, 0]"] + 810["Segment
[2582, 2667, 0]"] + 811["Segment
[2675, 2682, 0]"] 812[Solid2d] end subgraph path841 [Path] 841["Path
[1993, 2052, 0]"] - 842["Segment
[2060, 2152, 0]"] - 843["Segment
[2160, 2234, 0]"] - 844["Segment
[2242, 2281, 0]"] - 845["Segment
[2289, 2396, 0]"] - 846["Segment
[2404, 2443, 0]"] - 847["Segment
[2451, 2568, 0]"] - 848["Segment
[2576, 2615, 0]"] - 849["Segment
[2623, 2708, 0]"] - 850["Segment
[2716, 2723, 0]"] + 842["Segment
[2060, 2111, 0]"] + 843["Segment
[2119, 2193, 0]"] + 844["Segment
[2201, 2240, 0]"] + 845["Segment
[2248, 2355, 0]"] + 846["Segment
[2363, 2402, 0]"] + 847["Segment
[2410, 2527, 0]"] + 848["Segment
[2535, 2574, 0]"] + 849["Segment
[2582, 2667, 0]"] + 850["Segment
[2675, 2682, 0]"] 851[Solid2d] end subgraph path880 [Path] - 880["Path
[4955, 5042, 0]"] - 881["Segment
[5050, 5079, 0]"] - 882["Segment
[5087, 5115, 0]"] - 883["Segment
[5123, 5201, 0]"] - 884["Segment
[5209, 5256, 0]"] - 885["Segment
[5264, 5292, 0]"] - 886["Segment
[5300, 5329, 0]"] - 887["Segment
[5337, 5366, 0]"] - 888["Segment
[5374, 5440, 0]"] - 889["Segment
[5448, 5476, 0]"] - 890["Segment
[5484, 5513, 0]"] - 891["Segment
[5521, 5583, 0]"] - 892["Segment
[5591, 5619, 0]"] - 893["Segment
[5627, 5661, 0]"] - 894["Segment
[5669, 5699, 0]"] - 895["Segment
[5707, 5775, 0]"] - 896["Segment
[5783, 5790, 0]"] + 880["Path
[4914, 5001, 0]"] + 881["Segment
[5009, 5038, 0]"] + 882["Segment
[5046, 5074, 0]"] + 883["Segment
[5082, 5160, 0]"] + 884["Segment
[5168, 5215, 0]"] + 885["Segment
[5223, 5251, 0]"] + 886["Segment
[5259, 5288, 0]"] + 887["Segment
[5296, 5325, 0]"] + 888["Segment
[5333, 5399, 0]"] + 889["Segment
[5407, 5435, 0]"] + 890["Segment
[5443, 5472, 0]"] + 891["Segment
[5480, 5542, 0]"] + 892["Segment
[5550, 5578, 0]"] + 893["Segment
[5586, 5620, 0]"] + 894["Segment
[5628, 5658, 0]"] + 895["Segment
[5666, 5734, 0]"] + 896["Segment
[5742, 5749, 0]"] 897[Solid2d] end subgraph path950 [Path] - 950["Path
[5990, 6088, 0]"] - 951["Segment
[6096, 6215, 0]"] - 952["Segment
[6223, 6270, 0]"] - 953["Segment
[6278, 6399, 0]"] - 954["Segment
[6407, 6414, 0]"] + 950["Path
[5949, 6047, 0]"] + 951["Segment
[6055, 6133, 0]"] + 952["Segment
[6141, 6188, 0]"] + 953["Segment
[6196, 6276, 0]"] + 954["Segment
[6284, 6291, 0]"] 955[Solid2d] end subgraph path972 [Path] - 972["Path
[6522, 6619, 0]"] - 973["Segment
[6627, 6746, 0]"] - 974["Segment
[6754, 6802, 0]"] - 975["Segment
[6810, 6931, 0]"] - 976["Segment
[6939, 6946, 0]"] + 972["Path
[6399, 6496, 0]"] + 973["Segment
[6504, 6582, 0]"] + 974["Segment
[6590, 6638, 0]"] + 975["Segment
[6646, 6726, 0]"] + 976["Segment
[6734, 6741, 0]"] 977[Solid2d] end subgraph path994 [Path] - 994["Path
[5990, 6088, 0]"] - 995["Segment
[6096, 6215, 0]"] - 996["Segment
[6223, 6270, 0]"] - 997["Segment
[6278, 6399, 0]"] - 998["Segment
[6407, 6414, 0]"] + 994["Path
[5949, 6047, 0]"] + 995["Segment
[6055, 6133, 0]"] + 996["Segment
[6141, 6188, 0]"] + 997["Segment
[6196, 6276, 0]"] + 998["Segment
[6284, 6291, 0]"] 999[Solid2d] end subgraph path1016 [Path] - 1016["Path
[6522, 6619, 0]"] - 1017["Segment
[6627, 6746, 0]"] - 1018["Segment
[6754, 6802, 0]"] - 1019["Segment
[6810, 6931, 0]"] - 1020["Segment
[6939, 6946, 0]"] + 1016["Path
[6399, 6496, 0]"] + 1017["Segment
[6504, 6582, 0]"] + 1018["Segment
[6590, 6638, 0]"] + 1019["Segment
[6646, 6726, 0]"] + 1020["Segment
[6734, 6741, 0]"] 1021[Solid2d] end 1["Plane
[532, 549, 0]"] @@ -395,7 +395,7 @@ flowchart LR 58["SweepEdge Opposite"] 59["SweepEdge Adjacent"] 60["Plane
[1954, 1977, 0]"] - 72["Sweep Extrusion
[2731, 2757, 0]"] + 72["Sweep Extrusion
[2690, 2716, 0]"] 73[Wall] 74[Wall] 75[Wall] @@ -423,7 +423,7 @@ flowchart LR 97["SweepEdge Opposite"] 98["SweepEdge Adjacent"] 99["Plane
[1954, 1977, 0]"] - 111["Sweep Extrusion
[2731, 2757, 0]"] + 111["Sweep Extrusion
[2690, 2716, 0]"] 112[Wall] 113[Wall] 114[Wall] @@ -451,7 +451,7 @@ flowchart LR 136["SweepEdge Opposite"] 137["SweepEdge Adjacent"] 138["Plane
[1954, 1977, 0]"] - 150["Sweep Extrusion
[2731, 2757, 0]"] + 150["Sweep Extrusion
[2690, 2716, 0]"] 151[Wall] 152[Wall] 153[Wall] @@ -479,7 +479,7 @@ flowchart LR 175["SweepEdge Opposite"] 176["SweepEdge Adjacent"] 177["Plane
[1954, 1977, 0]"] - 189["Sweep Extrusion
[2731, 2757, 0]"] + 189["Sweep Extrusion
[2690, 2716, 0]"] 190[Wall] 191[Wall] 192[Wall] @@ -507,7 +507,7 @@ flowchart LR 214["SweepEdge Opposite"] 215["SweepEdge Adjacent"] 216["Plane
[1954, 1977, 0]"] - 228["Sweep Extrusion
[2731, 2757, 0]"] + 228["Sweep Extrusion
[2690, 2716, 0]"] 229[Wall] 230[Wall] 231[Wall] @@ -535,7 +535,7 @@ flowchart LR 253["SweepEdge Opposite"] 254["SweepEdge Adjacent"] 255["Plane
[1954, 1977, 0]"] - 267["Sweep Extrusion
[2731, 2757, 0]"] + 267["Sweep Extrusion
[2690, 2716, 0]"] 268[Wall] 269[Wall] 270[Wall] @@ -563,7 +563,7 @@ flowchart LR 292["SweepEdge Opposite"] 293["SweepEdge Adjacent"] 294["Plane
[1954, 1977, 0]"] - 306["Sweep Extrusion
[2731, 2757, 0]"] + 306["Sweep Extrusion
[2690, 2716, 0]"] 307[Wall] 308[Wall] 309[Wall] @@ -591,7 +591,7 @@ flowchart LR 331["SweepEdge Opposite"] 332["SweepEdge Adjacent"] 333["Plane
[1954, 1977, 0]"] - 345["Sweep Extrusion
[2731, 2757, 0]"] + 345["Sweep Extrusion
[2690, 2716, 0]"] 346[Wall] 347[Wall] 348[Wall] @@ -619,7 +619,7 @@ flowchart LR 370["SweepEdge Opposite"] 371["SweepEdge Adjacent"] 372["Plane
[1954, 1977, 0]"] - 384["Sweep Extrusion
[2731, 2757, 0]"] + 384["Sweep Extrusion
[2690, 2716, 0]"] 385[Wall] 386[Wall] 387[Wall] @@ -647,7 +647,7 @@ flowchart LR 409["SweepEdge Opposite"] 410["SweepEdge Adjacent"] 411["Plane
[1954, 1977, 0]"] - 423["Sweep Extrusion
[2731, 2757, 0]"] + 423["Sweep Extrusion
[2690, 2716, 0]"] 424[Wall] 425[Wall] 426[Wall] @@ -675,7 +675,7 @@ flowchart LR 448["SweepEdge Opposite"] 449["SweepEdge Adjacent"] 450["Plane
[1954, 1977, 0]"] - 462["Sweep Extrusion
[2731, 2757, 0]"] + 462["Sweep Extrusion
[2690, 2716, 0]"] 463[Wall] 464[Wall] 465[Wall] @@ -703,7 +703,7 @@ flowchart LR 487["SweepEdge Opposite"] 488["SweepEdge Adjacent"] 489["Plane
[1954, 1977, 0]"] - 501["Sweep Extrusion
[2731, 2757, 0]"] + 501["Sweep Extrusion
[2690, 2716, 0]"] 502[Wall] 503[Wall] 504[Wall] @@ -731,7 +731,7 @@ flowchart LR 526["SweepEdge Opposite"] 527["SweepEdge Adjacent"] 528["Plane
[1954, 1977, 0]"] - 540["Sweep Extrusion
[2731, 2757, 0]"] + 540["Sweep Extrusion
[2690, 2716, 0]"] 541[Wall] 542[Wall] 543[Wall] @@ -759,7 +759,7 @@ flowchart LR 565["SweepEdge Opposite"] 566["SweepEdge Adjacent"] 567["Plane
[1954, 1977, 0]"] - 579["Sweep Extrusion
[2731, 2757, 0]"] + 579["Sweep Extrusion
[2690, 2716, 0]"] 580[Wall] 581[Wall] 582[Wall] @@ -787,7 +787,7 @@ flowchart LR 604["SweepEdge Opposite"] 605["SweepEdge Adjacent"] 606["Plane
[1954, 1977, 0]"] - 618["Sweep Extrusion
[2731, 2757, 0]"] + 618["Sweep Extrusion
[2690, 2716, 0]"] 619[Wall] 620[Wall] 621[Wall] @@ -815,7 +815,7 @@ flowchart LR 643["SweepEdge Opposite"] 644["SweepEdge Adjacent"] 645["Plane
[1954, 1977, 0]"] - 657["Sweep Extrusion
[2731, 2757, 0]"] + 657["Sweep Extrusion
[2690, 2716, 0]"] 658[Wall] 659[Wall] 660[Wall] @@ -843,7 +843,7 @@ flowchart LR 682["SweepEdge Opposite"] 683["SweepEdge Adjacent"] 684["Plane
[1954, 1977, 0]"] - 696["Sweep Extrusion
[2731, 2757, 0]"] + 696["Sweep Extrusion
[2690, 2716, 0]"] 697[Wall] 698[Wall] 699[Wall] @@ -871,7 +871,7 @@ flowchart LR 721["SweepEdge Opposite"] 722["SweepEdge Adjacent"] 723["Plane
[1954, 1977, 0]"] - 735["Sweep Extrusion
[2731, 2757, 0]"] + 735["Sweep Extrusion
[2690, 2716, 0]"] 736[Wall] 737[Wall] 738[Wall] @@ -899,7 +899,7 @@ flowchart LR 760["SweepEdge Opposite"] 761["SweepEdge Adjacent"] 762["Plane
[1954, 1977, 0]"] - 774["Sweep Extrusion
[2731, 2757, 0]"] + 774["Sweep Extrusion
[2690, 2716, 0]"] 775[Wall] 776[Wall] 777[Wall] @@ -927,7 +927,7 @@ flowchart LR 799["SweepEdge Opposite"] 800["SweepEdge Adjacent"] 801["Plane
[1954, 1977, 0]"] - 813["Sweep Extrusion
[2731, 2757, 0]"] + 813["Sweep Extrusion
[2690, 2716, 0]"] 814[Wall] 815[Wall] 816[Wall] @@ -955,7 +955,7 @@ flowchart LR 838["SweepEdge Opposite"] 839["SweepEdge Adjacent"] 840["Plane
[1954, 1977, 0]"] - 852["Sweep Extrusion
[2731, 2757, 0]"] + 852["Sweep Extrusion
[2690, 2716, 0]"] 853[Wall] 854[Wall] 855[Wall] @@ -982,8 +982,8 @@ flowchart LR 876["SweepEdge Adjacent"] 877["SweepEdge Opposite"] 878["SweepEdge Adjacent"] - 879["Plane
[4924, 4947, 0]"] - 898["Sweep Extrusion
[5798, 5822, 0]"] + 879["Plane
[4883, 4906, 0]"] + 898["Sweep Extrusion
[5757, 5781, 0]"] 899[Wall] 900[Wall] 901[Wall] @@ -1034,8 +1034,8 @@ flowchart LR 946["SweepEdge Adjacent"] 947["SweepEdge Opposite"] 948["SweepEdge Adjacent"] - 949["Plane
[5959, 5982, 0]"] - 956["Sweep Extrusion
[6422, 6446, 0]"] + 949["Plane
[5918, 5941, 0]"] + 956["Sweep Extrusion
[6299, 6323, 0]"] 957[Wall] 958[Wall] 959[Wall] @@ -1050,8 +1050,8 @@ flowchart LR 968["SweepEdge Adjacent"] 969["SweepEdge Opposite"] 970["SweepEdge Adjacent"] - 971["Plane
[6491, 6514, 0]"] - 978["Sweep Extrusion
[6954, 6978, 0]"] + 971["Plane
[6368, 6391, 0]"] + 978["Sweep Extrusion
[6749, 6773, 0]"] 979[Wall] 980[Wall] 981[Wall] @@ -1066,8 +1066,8 @@ flowchart LR 990["SweepEdge Adjacent"] 991["SweepEdge Opposite"] 992["SweepEdge Adjacent"] - 993["Plane
[5959, 5982, 0]"] - 1000["Sweep Extrusion
[6422, 6446, 0]"] + 993["Plane
[5918, 5941, 0]"] + 1000["Sweep Extrusion
[6299, 6323, 0]"] 1001[Wall] 1002[Wall] 1003[Wall] @@ -1082,8 +1082,8 @@ flowchart LR 1012["SweepEdge Adjacent"] 1013["SweepEdge Opposite"] 1014["SweepEdge Adjacent"] - 1015["Plane
[6491, 6514, 0]"] - 1022["Sweep Extrusion
[6954, 6978, 0]"] + 1015["Plane
[6368, 6391, 0]"] + 1022["Sweep Extrusion
[6749, 6773, 0]"] 1023[Wall] 1024[Wall] 1025[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap index 362d46bc6..922d7ab4e 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ast.snap @@ -2868,95 +2868,70 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "270", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 270.0, - "suffix": "None" - } - } - }, - { - "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.1", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.1, - "suffix": "None" - } - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "270", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 270.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0.1", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.1, + "suffix": "None" + } + } } ], "callee": { @@ -2977,8 +2952,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -10125,179 +10101,154 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "47.15", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 47.15, + "suffix": "None" } }, - { + "operator": "+", + "right": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, + "raw": "6", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "180", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 6.0, + "suffix": "None" } }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": ".525", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.525, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "scale", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "47.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 47.15, + "suffix": "None" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": ".525", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.525, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -10318,8 +10269,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -10417,179 +10369,154 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { + "left": { "commentStart": 0, "end": 0, - "name": "angleStart", + "raw": "47.15", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 47.15, + "suffix": "None" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "11", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.0, + "suffix": "None" + } }, "start": 0, - "type": "ObjectProperty", + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "180", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 180.0, + "suffix": "None" } }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": ".288", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.288, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "scale", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "47.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 47.15, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "11", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": ".288", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.288, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -10610,8 +10537,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], @@ -11003,179 +10931,154 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { + "left": { "commentStart": 0, "end": 0, - "name": "angleStart", + "raw": "47.15", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 47.15, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } }, "start": 0, - "type": "ObjectProperty", + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "180", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 180.0, + "suffix": "None" } }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "6", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 6.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": ".525", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.525, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "scale", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "47.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 47.15, + "suffix": "None" + } + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "6", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 6.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": ".525", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.525, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -11196,8 +11099,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -11303,179 +11207,154 @@ description: Result of parsing keyboard.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, + "raw": "47.15", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 47.15, + "suffix": "None" } }, - { + "operator": "-", + "right": { "commentStart": 0, "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, + "raw": "11", "start": 0, - "type": "ObjectProperty", + "type": "Literal", + "type": "Literal", "value": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "left": { - "commentStart": 0, - "end": 0, - "raw": "47.15", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 47.15, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "commentStart": 0, - "end": 0, - "raw": "11", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 11.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "commentStart": 0, - "end": 0, - "raw": "180", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 180.0, - "suffix": "None" - } - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "value": 11.0, + "suffix": "None" } }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": ".288", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.288, - "suffix": "None" - } - }, - "operator": "*", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "scale", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "47.15", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 47.15, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "commentStart": 0, + "end": 0, + "raw": "11", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 11.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": ".288", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.288, + "suffix": "None" + } + }, + "operator": "*", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "scale", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -11496,8 +11375,9 @@ description: Result of parsing keyboard.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], diff --git a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap index 3e3a355b5..bbe3461e8 100644 --- a/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/keyboard/ops.snap @@ -212,7 +212,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -544,7 +544,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -876,7 +876,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -1208,7 +1208,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -1540,7 +1540,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -1872,7 +1872,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -2204,7 +2204,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -2536,7 +2536,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -2868,7 +2868,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -3200,7 +3200,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -3532,7 +3532,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -3864,7 +3864,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -4196,7 +4196,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -4528,7 +4528,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -4860,7 +4860,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -5192,7 +5192,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -5524,7 +5524,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -5856,7 +5856,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -6188,7 +6188,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -6520,7 +6520,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -6852,7 +6852,7 @@ description: Operations executed keyboard.kcl "name": "keyFn", "functionSourceRange": [ 1887, - 3015, + 2974, 0 ], "unlabeledArg": null, @@ -7201,8 +7201,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "z", "functionSourceRange": [ - 4893, - 5872, + 4852, + 5831, 0 ], "unlabeledArg": null, @@ -7438,8 +7438,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "o", "functionSourceRange": [ - 5919, - 7028, + 5878, + 6823, 0 ], "unlabeledArg": null, @@ -7894,8 +7894,8 @@ description: Operations executed keyboard.kcl "type": "FunctionCall", "name": "o", "functionSourceRange": [ - 5919, - 7028, + 5878, + 6823, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md index 8e7bdf5df..e902a3c30 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/artifact_graph_flowchart.snap.md @@ -53,10 +53,10 @@ flowchart LR subgraph path101 [Path] 101["Path
[1785, 1841, 0]"] 102["Segment
[1849, 1873, 0]"] - 103["Segment
[1881, 1999, 0]"] - 104["Segment
[2007, 2031, 0]"] - 105["Segment
[2039, 2207, 0]"] - 106["Segment
[2215, 2222, 0]"] + 103["Segment
[1881, 1981, 0]"] + 104["Segment
[1989, 2013, 0]"] + 105["Segment
[2021, 2199, 0]"] + 106["Segment
[2207, 2214, 0]"] 107[Solid2d] end 1["Plane
[547, 574, 0]"] @@ -129,7 +129,7 @@ flowchart LR 98["Cap End"] 99["SweepEdge Opposite"] 100["SweepEdge Adjacent"] - 108["Sweep Extrusion
[2230, 2253, 0]"] + 108["Sweep Extrusion
[2222, 2245, 0]"] 109[Wall] 110[Wall] 111[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap index 11cb5775a..8da5a8168 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ast.snap @@ -2873,176 +2873,154 @@ description: Result of parsing makeup-mirror.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "interiorAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "interior", + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetX", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "start": 0, - "type": "ObjectProperty", - "value": { + { "commentStart": 0, - "elements": [ - { - "abs_path": false, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "offsetX", - "start": 0, - "type": "Identifier" - }, - "path": [], + "name": "altitude", "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, - { + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "altitude", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "gestellR", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, + "name": "gestellR", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "end", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "offsetX", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "gestellR", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" + "type": "Identifier" }, - { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "altitude", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - ], - "end": 0, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "left": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetX", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "gestellR", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "altitude", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } } ], "callee": { @@ -3052,7 +3030,7 @@ description: Result of parsing makeup-mirror.kcl "name": { "commentStart": 0, "end": 0, - "name": "arcTo", + "name": "arc", "start": 0, "type": "Identifier" }, @@ -3063,8 +3041,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -3120,32 +3099,47 @@ description: Result of parsing makeup-mirror.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "interiorAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "abs_path": false, "commentStart": 0, "end": 0, - "name": "interior", + "name": { + "commentStart": 0, + "end": 0, + "name": "offsetX", + "start": 0, + "type": "Identifier" + }, + "path": [], "start": 0, - "type": "Identifier" + "type": "Name", + "type": "Name" }, - "start": 0, - "type": "ObjectProperty", - "value": { + { "commentStart": 0, - "elements": [ - { + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "left": { "abs_path": false, "commentStart": 0, "end": 0, "name": { "commentStart": 0, "end": 0, - "name": "offsetX", + "name": "altitude", "start": 0, "type": "Identifier" }, @@ -3154,172 +3148,135 @@ description: Result of parsing makeup-mirror.kcl "type": "Name", "type": "Name" }, - { + "operator": "-", + "right": { + "abs_path": false, "commentStart": 0, "end": 0, - "left": { + "name": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "altitude", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "gestellR", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, + "name": "gestellR", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "gestellD", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "type": "Identifier" }, + "path": [], "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "end", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "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" + "type": "Name", + "type": "Name" }, - { - "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" - }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, + "name": "gestellD", "start": 0, - "type": "CallExpression", - "type": "CallExpression" - } - ], - "end": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + "type": "BinaryExpression", + "type": "BinaryExpression" } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "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": "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" + } } ], "callee": { @@ -3329,7 +3286,7 @@ description: Result of parsing makeup-mirror.kcl "name": { "commentStart": 0, "end": 0, - "name": "arcTo", + "name": "arc", "start": 0, "type": "Identifier" }, @@ -3340,8 +3297,9 @@ description: Result of parsing makeup-mirror.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [], diff --git a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap index ceb7e751e..c319325bc 100644 --- a/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/makeup-mirror/ops.snap @@ -805,7 +805,7 @@ description: Operations executed makeup-mirror.kcl "name": "mirrorFn", "functionSourceRange": [ 1510, - 2272, + 2264, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/artifact_graph_flowchart.snap.md index 32a47ae91..f58ffd7dd 100644 --- a/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/multi-axis-robot/artifact_graph_flowchart.snap.md @@ -37,122 +37,122 @@ flowchart LR subgraph path75 [Path] 75["Path
[493, 529, 6]"] 76["Segment
[535, 572, 6]"] - 77["Segment
[578, 666, 6]"] - 78["Segment
[672, 721, 6]"] - 79["Segment
[727, 783, 6]"] - 80["Segment
[789, 796, 6]"] + 77["Segment
[578, 633, 6]"] + 78["Segment
[639, 688, 6]"] + 79["Segment
[694, 750, 6]"] + 80["Segment
[756, 763, 6]"] 81[Solid2d] end subgraph path97 [Path] - 97["Path
[898, 1073, 6]"] - 98["Segment
[898, 1073, 6]"] + 97["Path
[865, 1040, 6]"] + 98["Segment
[865, 1040, 6]"] 99[Solid2d] end subgraph path105 [Path] - 105["Path
[1282, 1429, 6]"] - 106["Segment
[1282, 1429, 6]"] + 105["Path
[1249, 1396, 6]"] + 106["Segment
[1249, 1396, 6]"] 107[Solid2d] end subgraph path116 [Path] - 116["Path
[1751, 1925, 6]"] - 117["Segment
[1751, 1925, 6]"] + 116["Path
[1718, 1892, 6]"] + 117["Segment
[1718, 1892, 6]"] 118[Solid2d] end subgraph path125 [Path] - 125["Path
[2150, 2190, 6]"] - 126["Segment
[2150, 2190, 6]"] + 125["Path
[2117, 2157, 6]"] + 126["Segment
[2117, 2157, 6]"] 127[Solid2d] end subgraph path137 [Path] 137["Path
[251, 394, 7]"] - 138["Segment
[400, 516, 7]"] - 139["Segment
[522, 574, 7]"] - 140["Segment
[580, 696, 7]"] - 141["Segment
[702, 758, 7]"] - 142["Segment
[764, 771, 7]"] + 138["Segment
[400, 483, 7]"] + 139["Segment
[489, 541, 7]"] + 140["Segment
[547, 630, 7]"] + 141["Segment
[636, 692, 7]"] + 142["Segment
[698, 705, 7]"] 143[Solid2d] end subgraph path159 [Path] - 159["Path
[892, 956, 7]"] - 160["Segment
[892, 956, 7]"] + 159["Path
[826, 890, 7]"] + 160["Segment
[826, 890, 7]"] 161[Solid2d] end subgraph path167 [Path] - 167["Path
[1130, 1338, 7]"] - 168["Segment
[1130, 1338, 7]"] + 167["Path
[1064, 1272, 7]"] + 168["Segment
[1064, 1272, 7]"] 169[Solid2d] end subgraph path175 [Path] - 175["Path
[1546, 1590, 7]"] - 176["Segment
[1546, 1590, 7]"] + 175["Path
[1480, 1524, 7]"] + 176["Segment
[1480, 1524, 7]"] 177[Solid2d] end subgraph path190 [Path] - 190["Path
[1833, 2025, 7]"] - 191["Segment
[1833, 2025, 7]"] + 190["Path
[1767, 1959, 7]"] + 191["Segment
[1767, 1959, 7]"] 192[Solid2d] end subgraph path201 [Path] - 201["Path
[2383, 2558, 7]"] - 202["Segment
[2383, 2558, 7]"] + 201["Path
[2317, 2492, 7]"] + 202["Segment
[2317, 2492, 7]"] 203[Solid2d] end subgraph path210 [Path] 210["Path
[271, 504, 8]"] - 211["Segment
[510, 629, 8]"] - 212["Segment
[635, 689, 8]"] - 213["Segment
[695, 814, 8]"] - 214["Segment
[820, 890, 8]"] - 215["Segment
[896, 903, 8]"] + 211["Segment
[510, 596, 8]"] + 212["Segment
[602, 656, 8]"] + 213["Segment
[662, 748, 8]"] + 214["Segment
[754, 824, 8]"] + 215["Segment
[830, 837, 8]"] 216[Solid2d] end subgraph path232 [Path] - 232["Path
[1022, 1231, 8]"] - 233["Segment
[1022, 1231, 8]"] + 232["Path
[956, 1165, 8]"] + 233["Segment
[956, 1165, 8]"] 234[Solid2d] end subgraph path240 [Path] - 240["Path
[1441, 1630, 8]"] - 241["Segment
[1441, 1630, 8]"] + 240["Path
[1375, 1564, 8]"] + 241["Segment
[1375, 1564, 8]"] 242[Solid2d] end subgraph path255 [Path] - 255["Path
[2056, 2342, 8]"] - 256["Segment
[2056, 2342, 8]"] + 255["Path
[1990, 2276, 8]"] + 256["Segment
[1990, 2276, 8]"] 257[Solid2d] end subgraph path264 [Path] - 264["Path
[2446, 2730, 8]"] - 265["Segment
[2446, 2730, 8]"] + 264["Path
[2380, 2664, 8]"] + 265["Segment
[2380, 2664, 8]"] 266[Solid2d] end subgraph path273 [Path] - 273["Path
[2889, 2927, 8]"] - 274["Segment
[2889, 2927, 8]"] + 273["Path
[2823, 2861, 8]"] + 274["Segment
[2823, 2861, 8]"] 275[Solid2d] end subgraph path282 [Path] - 282["Path
[3062, 3287, 8]"] - 283["Segment
[3293, 3361, 8]"] - 284["Segment
[3367, 3510, 8]"] - 285["Segment
[3516, 3584, 8]"] - 286["Segment
[3590, 3666, 8]"] - 287["Segment
[3672, 3748, 8]"] - 288["Segment
[3754, 3828, 8]"] - 289["Segment
[3834, 3890, 8]"] - 290["Segment
[3896, 3903, 8]"] + 282["Path
[2996, 3221, 8]"] + 283["Segment
[3227, 3295, 8]"] + 284["Segment
[3301, 3411, 8]"] + 285["Segment
[3417, 3485, 8]"] + 286["Segment
[3491, 3567, 8]"] + 287["Segment
[3573, 3649, 8]"] + 288["Segment
[3655, 3729, 8]"] + 289["Segment
[3735, 3791, 8]"] + 290["Segment
[3797, 3804, 8]"] 291[Solid2d] end subgraph path316 [Path] - 316["Path
[4037, 4262, 8]"] - 317["Segment
[4268, 4338, 8]"] - 318["Segment
[4344, 4492, 8]"] - 319["Segment
[4498, 4568, 8]"] - 320["Segment
[4574, 4652, 8]"] - 321["Segment
[4658, 4736, 8]"] - 322["Segment
[4742, 4818, 8]"] - 323["Segment
[4824, 4880, 8]"] - 324["Segment
[4886, 4893, 8]"] + 316["Path
[3938, 4163, 8]"] + 317["Segment
[4169, 4239, 8]"] + 318["Segment
[4245, 4360, 8]"] + 319["Segment
[4366, 4436, 8]"] + 320["Segment
[4442, 4520, 8]"] + 321["Segment
[4526, 4604, 8]"] + 322["Segment
[4610, 4686, 8]"] + 323["Segment
[4692, 4748, 8]"] + 324["Segment
[4754, 4761, 8]"] 325[Solid2d] end 1["Plane
[201, 218, 5]"] @@ -207,7 +207,7 @@ flowchart LR 72["SweepEdge Opposite"] 73["SweepEdge Adjacent"] 74["Plane
[464, 487, 6]"] - 82["Sweep Extrusion
[811, 841, 6]"] + 82["Sweep Extrusion
[778, 808, 6]"] 83[Wall] 84[Wall] 85[Wall] @@ -222,35 +222,35 @@ flowchart LR 94["SweepEdge Adjacent"] 95["SweepEdge Opposite"] 96["SweepEdge Adjacent"] - 100["Sweep Extrusion
[1087, 1119, 6]"] + 100["Sweep Extrusion
[1054, 1086, 6]"] 101[Wall] 102["Cap End"] 103["SweepEdge Opposite"] 104["SweepEdge Adjacent"] - 108["Sweep Extrusion
[1662, 1694, 6]"] + 108["Sweep Extrusion
[1629, 1661, 6]"] 109[Wall] 110["Cap End"] 111["SweepEdge Opposite"] 112["SweepEdge Adjacent"] - 113["Sweep Extrusion
[1662, 1694, 6]"] - 114["Sweep Extrusion
[1662, 1694, 6]"] - 115["Sweep Extrusion
[1662, 1694, 6]"] - 119["Sweep Extrusion
[1939, 1972, 6]"] + 113["Sweep Extrusion
[1629, 1661, 6]"] + 114["Sweep Extrusion
[1629, 1661, 6]"] + 115["Sweep Extrusion
[1629, 1661, 6]"] + 119["Sweep Extrusion
[1906, 1939, 6]"] 120[Wall] 121["Cap End"] 122["SweepEdge Opposite"] 123["SweepEdge Adjacent"] - 124["Plane
[2121, 2144, 6]"] - 128["Sweep Extrusion
[2192, 2223, 6]"] + 124["Plane
[2088, 2111, 6]"] + 128["Sweep Extrusion
[2159, 2190, 6]"] 129[Wall] 130["Cap Start"] 131["Cap End"] 132["SweepEdge Opposite"] 133["SweepEdge Adjacent"] 134["EdgeCut Fillet
[321, 383, 6]"] - 135["EdgeCut Fillet
[1978, 2040, 6]"] + 135["EdgeCut Fillet
[1945, 2007, 6]"] 136["Plane
[222, 245, 7]"] - 144["Sweep Extrusion
[785, 833, 7]"] + 144["Sweep Extrusion
[719, 767, 7]"] 145[Wall] 146[Wall] 147[Wall] @@ -265,43 +265,43 @@ flowchart LR 156["SweepEdge Adjacent"] 157["SweepEdge Opposite"] 158["SweepEdge Adjacent"] - 162["Sweep Extrusion
[971, 1004, 7]"] + 162["Sweep Extrusion
[905, 938, 7]"] 163[Wall] 164["Cap End"] 165["SweepEdge Opposite"] 166["SweepEdge Adjacent"] - 170["Sweep Extrusion
[1353, 1383, 7]"] + 170["Sweep Extrusion
[1287, 1317, 7]"] 171[Wall] 172["Cap End"] 173["SweepEdge Opposite"] 174["SweepEdge Adjacent"] - 178["Sweep Extrusion
[1743, 1776, 7]"] + 178["Sweep Extrusion
[1677, 1710, 7]"] 179[Wall] 180["Cap End"] 181["SweepEdge Opposite"] 182["SweepEdge Adjacent"] - 183["Sweep Extrusion
[1743, 1776, 7]"] - 184["Sweep Extrusion
[1743, 1776, 7]"] - 185["Sweep Extrusion
[1743, 1776, 7]"] - 186["Sweep Extrusion
[1743, 1776, 7]"] - 187["Sweep Extrusion
[1743, 1776, 7]"] - 188["Sweep Extrusion
[1743, 1776, 7]"] - 189["Sweep Extrusion
[1743, 1776, 7]"] - 193["Sweep Extrusion
[2293, 2326, 7]"] + 183["Sweep Extrusion
[1677, 1710, 7]"] + 184["Sweep Extrusion
[1677, 1710, 7]"] + 185["Sweep Extrusion
[1677, 1710, 7]"] + 186["Sweep Extrusion
[1677, 1710, 7]"] + 187["Sweep Extrusion
[1677, 1710, 7]"] + 188["Sweep Extrusion
[1677, 1710, 7]"] + 189["Sweep Extrusion
[1677, 1710, 7]"] + 193["Sweep Extrusion
[2227, 2260, 7]"] 194[Wall] 195["Cap End"] 196["SweepEdge Opposite"] 197["SweepEdge Adjacent"] - 198["Sweep Extrusion
[2293, 2326, 7]"] - 199["Sweep Extrusion
[2293, 2326, 7]"] - 200["Sweep Extrusion
[2293, 2326, 7]"] - 204["Sweep Extrusion
[2560, 2590, 7]"] + 198["Sweep Extrusion
[2227, 2260, 7]"] + 199["Sweep Extrusion
[2227, 2260, 7]"] + 200["Sweep Extrusion
[2227, 2260, 7]"] + 204["Sweep Extrusion
[2494, 2524, 7]"] 205[Wall] 206["Cap End"] 207["SweepEdge Opposite"] 208["SweepEdge Adjacent"] 209["Plane
[242, 265, 8]"] - 217["Sweep Extrusion
[917, 965, 8]"] + 217["Sweep Extrusion
[851, 899, 8]"] 218[Wall] 219[Wall] 220[Wall] @@ -316,42 +316,42 @@ flowchart LR 229["SweepEdge Adjacent"] 230["SweepEdge Opposite"] 231["SweepEdge Adjacent"] - 235["Sweep Extrusion
[1246, 1279, 8]"] + 235["Sweep Extrusion
[1180, 1213, 8]"] 236[Wall] 237["Cap End"] 238["SweepEdge Opposite"] 239["SweepEdge Adjacent"] - 243["Sweep Extrusion
[1895, 1928, 8]"] + 243["Sweep Extrusion
[1829, 1862, 8]"] 244[Wall] 245["Cap End"] 246["SweepEdge Opposite"] 247["SweepEdge Adjacent"] - 248["Sweep Extrusion
[1895, 1928, 8]"] - 249["Sweep Extrusion
[1895, 1928, 8]"] - 250["Sweep Extrusion
[1895, 1928, 8]"] - 251["Sweep Extrusion
[1895, 1928, 8]"] - 252["Sweep Extrusion
[1895, 1928, 8]"] - 253["Sweep Extrusion
[1895, 1928, 8]"] - 254["Sweep Extrusion
[1895, 1928, 8]"] - 258["Sweep Extrusion
[2356, 2389, 8]"] + 248["Sweep Extrusion
[1829, 1862, 8]"] + 249["Sweep Extrusion
[1829, 1862, 8]"] + 250["Sweep Extrusion
[1829, 1862, 8]"] + 251["Sweep Extrusion
[1829, 1862, 8]"] + 252["Sweep Extrusion
[1829, 1862, 8]"] + 253["Sweep Extrusion
[1829, 1862, 8]"] + 254["Sweep Extrusion
[1829, 1862, 8]"] + 258["Sweep Extrusion
[2290, 2323, 8]"] 259[Wall] 260["Cap Start"] 261["Cap End"] 262["SweepEdge Opposite"] 263["SweepEdge Adjacent"] - 267["Sweep Extrusion
[2745, 2778, 8]"] + 267["Sweep Extrusion
[2679, 2712, 8]"] 268[Wall] 269["Cap Start"] 270["Cap End"] 271["SweepEdge Opposite"] 272["SweepEdge Adjacent"] - 276["Sweep Extrusion
[2942, 2976, 8]"] + 276["Sweep Extrusion
[2876, 2910, 8]"] 277[Wall] 278["Cap Start"] 279["Cap End"] 280["SweepEdge Opposite"] 281["SweepEdge Adjacent"] - 292["Sweep Extrusion
[3918, 3951, 8]"] + 292["Sweep Extrusion
[3819, 3852, 8]"] 293[Wall] 294[Wall] 295[Wall] @@ -375,7 +375,7 @@ flowchart LR 313["SweepEdge Adjacent"] 314["SweepEdge Opposite"] 315["SweepEdge Adjacent"] - 326["Sweep Extrusion
[4895, 4928, 8]"] + 326["Sweep Extrusion
[4763, 4796, 8]"] 327[Wall] 328[Wall] 329[Wall] @@ -403,21 +403,21 @@ flowchart LR 351["StartSketchOnFace
[1368, 1405, 5]"] 352["StartSketchOnFace
[1542, 1579, 5]"] 353["StartSketchOnFace
[1933, 1970, 5]"] - 354["StartSketchOnFace
[855, 892, 6]"] - 355["StartSketchOnFace
[1239, 1276, 6]"] - 356["StartSketchOnFace
[1708, 1745, 6]"] - 357["StartSketchOnFace
[847, 886, 7]"] - 358["StartSketchOnFace
[1085, 1124, 7]"] - 359["StartSketchOnFace
[1503, 1540, 7]"] - 360["StartSketchOnFace
[1790, 1827, 7]"] - 361["StartSketchOnFace
[2340, 2377, 7]"] - 362["StartSketchOnFace
[979, 1016, 8]"] - 363["StartSketchOnFace
[1398, 1435, 8]"] - 364["StartSketchOnFace
[2011, 2050, 8]"] - 365["StartSketchOnFace
[2403, 2440, 8]"] - 366["StartSketchOnFace
[2844, 2883, 8]"] - 367["StartSketchOnFace
[3017, 3056, 8]"] - 368["StartSketchOnFace
[3992, 4031, 8]"] + 354["StartSketchOnFace
[822, 859, 6]"] + 355["StartSketchOnFace
[1206, 1243, 6]"] + 356["StartSketchOnFace
[1675, 1712, 6]"] + 357["StartSketchOnFace
[781, 820, 7]"] + 358["StartSketchOnFace
[1019, 1058, 7]"] + 359["StartSketchOnFace
[1437, 1474, 7]"] + 360["StartSketchOnFace
[1724, 1761, 7]"] + 361["StartSketchOnFace
[2274, 2311, 7]"] + 362["StartSketchOnFace
[913, 950, 8]"] + 363["StartSketchOnFace
[1332, 1369, 8]"] + 364["StartSketchOnFace
[1945, 1984, 8]"] + 365["StartSketchOnFace
[2337, 2374, 8]"] + 366["StartSketchOnFace
[2778, 2817, 8]"] + 367["StartSketchOnFace
[2951, 2990, 8]"] + 368["StartSketchOnFace
[3893, 3932, 8]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/artifact_graph_flowchart.snap.md index 7d58c416d..fc4659b14 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/artifact_graph_flowchart.snap.md @@ -3,57 +3,57 @@ flowchart LR subgraph path2 [Path] 2["Path
[538, 581, 0]"] 3["Segment
[587, 640, 0]"] - 4["Segment
[646, 748, 0]"] - 5["Segment
[754, 807, 0]"] - 6["Segment
[813, 860, 0]"] - 7["Segment
[866, 961, 0]"] - 8["Segment
[967, 1038, 0]"] - 9["Segment
[1044, 1095, 0]"] - 10["Segment
[1101, 1154, 0]"] - 11["Segment
[1160, 1229, 0]"] - 12["Segment
[1235, 1271, 0]"] - 13["Segment
[1277, 1307, 0]"] - 14["Segment
[1313, 1343, 0]"] - 15["Segment
[1349, 1379, 0]"] - 16["Segment
[1385, 1415, 0]"] - 17["Segment
[1421, 1450, 0]"] - 18["Segment
[1456, 1486, 0]"] - 19["Segment
[1492, 1521, 0]"] - 20["Segment
[1527, 1556, 0]"] - 21["Segment
[1562, 1658, 0]"] - 22["Segment
[1664, 1720, 0]"] - 23["Segment
[1726, 1733, 0]"] + 4["Segment
[646, 757, 0]"] + 5["Segment
[763, 816, 0]"] + 6["Segment
[822, 869, 0]"] + 7["Segment
[875, 970, 0]"] + 8["Segment
[976, 1047, 0]"] + 9["Segment
[1053, 1104, 0]"] + 10["Segment
[1110, 1163, 0]"] + 11["Segment
[1169, 1238, 0]"] + 12["Segment
[1244, 1280, 0]"] + 13["Segment
[1286, 1316, 0]"] + 14["Segment
[1322, 1352, 0]"] + 15["Segment
[1358, 1388, 0]"] + 16["Segment
[1394, 1424, 0]"] + 17["Segment
[1430, 1459, 0]"] + 18["Segment
[1465, 1495, 0]"] + 19["Segment
[1501, 1530, 0]"] + 20["Segment
[1536, 1565, 0]"] + 21["Segment
[1571, 1634, 0]"] + 22["Segment
[1640, 1696, 0]"] + 23["Segment
[1702, 1709, 0]"] 24[Solid2d] end subgraph path85 [Path] - 85["Path
[1893, 1937, 0]"] - 86["Segment
[1943, 2023, 0]"] - 87["Segment
[2029, 2139, 0]"] - 88["Segment
[2145, 2262, 0]"] - 89["Segment
[2268, 2324, 0]"] - 90["Segment
[2330, 2337, 0]"] + 85["Path
[1869, 1913, 0]"] + 86["Segment
[1919, 1999, 0]"] + 87["Segment
[2005, 2115, 0]"] + 88["Segment
[2121, 2238, 0]"] + 89["Segment
[2244, 2300, 0]"] + 90["Segment
[2306, 2313, 0]"] 91[Solid2d] end subgraph path107 [Path] - 107["Path
[2498, 2543, 0]"] - 108["Segment
[2549, 2627, 0]"] - 109["Segment
[2633, 2743, 0]"] - 110["Segment
[2749, 2866, 0]"] - 111["Segment
[2872, 2928, 0]"] - 112["Segment
[2934, 2941, 0]"] + 107["Path
[2474, 2519, 0]"] + 108["Segment
[2525, 2603, 0]"] + 109["Segment
[2609, 2719, 0]"] + 110["Segment
[2725, 2842, 0]"] + 111["Segment
[2848, 2904, 0]"] + 112["Segment
[2910, 2917, 0]"] 113[Solid2d] end subgraph path129 [Path] - 129["Path
[3100, 3145, 0]"] - 130["Segment
[3151, 3236, 0]"] - 131["Segment
[3242, 3352, 0]"] - 132["Segment
[3358, 3475, 0]"] - 133["Segment
[3481, 3537, 0]"] - 134["Segment
[3543, 3550, 0]"] + 129["Path
[3076, 3121, 0]"] + 130["Segment
[3127, 3212, 0]"] + 131["Segment
[3218, 3328, 0]"] + 132["Segment
[3334, 3451, 0]"] + 133["Segment
[3457, 3513, 0]"] + 134["Segment
[3519, 3526, 0]"] 135[Solid2d] end 1["Plane
[515, 532, 0]"] - 25["Sweep Extrusion
[1776, 1806, 0]"] + 25["Sweep Extrusion
[1752, 1782, 0]"] 26[Wall] 27[Wall] 28[Wall] @@ -113,7 +113,7 @@ flowchart LR 82["SweepEdge Adjacent"] 83["SweepEdge Opposite"] 84["SweepEdge Adjacent"] - 92["Sweep Extrusion
[2381, 2412, 0]"] + 92["Sweep Extrusion
[2357, 2388, 0]"] 93[Wall] 94[Wall] 95[Wall] @@ -128,7 +128,7 @@ flowchart LR 104["SweepEdge Adjacent"] 105["SweepEdge Opposite"] 106["SweepEdge Adjacent"] - 114["Sweep Extrusion
[2984, 3015, 0]"] + 114["Sweep Extrusion
[2960, 2991, 0]"] 115[Wall] 116[Wall] 117[Wall] @@ -143,7 +143,7 @@ flowchart LR 126["SweepEdge Adjacent"] 127["SweepEdge Opposite"] 128["SweepEdge Adjacent"] - 136["Sweep Extrusion
[3594, 3624, 0]"] + 136["Sweep Extrusion
[3570, 3600, 0]"] 137[Wall] 138[Wall] 139[Wall] @@ -158,9 +158,9 @@ flowchart LR 148["SweepEdge Adjacent"] 149["SweepEdge Opposite"] 150["SweepEdge Adjacent"] - 151["StartSketchOnFace
[1848, 1887, 0]"] - 152["StartSketchOnFace
[2453, 2492, 0]"] - 153["StartSketchOnFace
[3057, 3094, 0]"] + 151["StartSketchOnFace
[1824, 1863, 0]"] + 152["StartSketchOnFace
[2429, 2468, 0]"] + 153["StartSketchOnFace
[3033, 3070, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap index c66f80207..b03859747 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/ast.snap @@ -756,127 +756,112 @@ description: Result of parsing router-template-cross-bar.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "seg09" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "templateGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg09" + } } ], "callee": { @@ -897,8 +882,9 @@ description: Result of parsing router-template-cross-bar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -2351,119 +2337,94 @@ description: Result of parsing router-template-cross-bar.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "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": { - "commentStart": 0, - "end": 0, - "raw": "10", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 10.0, - "suffix": "None" - } - }, - "operator": "+", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "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": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "radius", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "left": { + "commentStart": 0, + "end": 0, + "raw": "10", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 10.0, + "suffix": "None" + } + }, + "operator": "+", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { + "commentStart": 0, + "end": 0, + "name": "templateGap", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -2484,8 +2445,9 @@ description: Result of parsing router-template-cross-bar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/program_memory.snap index 3c94a9c82..249ad8a8c 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/router-template-cross-bar/program_memory.snap @@ -54,9 +54,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -67,9 +67,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -80,9 +80,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -93,9 +93,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -106,9 +106,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -119,9 +119,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -132,9 +132,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -145,9 +145,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -158,9 +158,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -275,9 +275,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -300,9 +300,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -325,9 +325,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -350,9 +350,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -375,9 +375,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -400,9 +400,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -425,9 +425,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -450,9 +450,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -475,9 +475,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -833,9 +833,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -846,9 +846,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -859,9 +859,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -889,9 +889,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -914,9 +914,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -939,9 +939,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -1045,9 +1045,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -1058,9 +1058,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -1071,9 +1071,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -1084,9 +1084,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -1097,9 +1097,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -1110,9 +1110,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -1123,9 +1123,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -1136,9 +1136,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -1149,9 +1149,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -1266,9 +1266,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -1291,9 +1291,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -1316,9 +1316,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -1341,9 +1341,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -1366,9 +1366,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -1391,9 +1391,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -1416,9 +1416,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -1441,9 +1441,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -1466,9 +1466,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -1873,9 +1873,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2605, - "end": 2626, - "start": 2605, + "commentStart": 2581, + "end": 2602, + "start": 2581, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -1886,9 +1886,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2721, - "end": 2742, - "start": 2721, + "commentStart": 2697, + "end": 2718, + "start": 2697, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -1899,9 +1899,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2844, - "end": 2865, - "start": 2844, + "commentStart": 2820, + "end": 2841, + "start": 2820, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -1929,9 +1929,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2605, - "end": 2626, - "start": 2605, + "commentStart": 2581, + "end": 2602, + "start": 2581, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -1954,9 +1954,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2721, - "end": 2742, - "start": 2721, + "commentStart": 2697, + "end": 2718, + "start": 2697, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -1979,9 +1979,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 2844, - "end": 2865, - "start": 2844, + "commentStart": 2820, + "end": 2841, + "start": 2820, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -2085,9 +2085,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -2098,9 +2098,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -2111,9 +2111,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -2124,9 +2124,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -2137,9 +2137,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -2150,9 +2150,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -2163,9 +2163,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -2176,9 +2176,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -2189,9 +2189,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -2306,9 +2306,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -2331,9 +2331,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -2356,9 +2356,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -2381,9 +2381,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -2406,9 +2406,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -2431,9 +2431,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -2456,9 +2456,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -2481,9 +2481,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -2506,9 +2506,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -2913,9 +2913,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3214, - "end": 3235, - "start": 3214, + "commentStart": 3190, + "end": 3211, + "start": 3190, "type": "TagDeclarator", "value": "rectangleSegmentA003" }, @@ -2926,9 +2926,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3330, - "end": 3351, - "start": 3330, + "commentStart": 3306, + "end": 3327, + "start": 3306, "type": "TagDeclarator", "value": "rectangleSegmentB003" }, @@ -2939,9 +2939,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 3453, - "end": 3474, - "start": 3453, + "commentStart": 3429, + "end": 3450, + "start": 3429, "type": "TagDeclarator", "value": "rectangleSegmentC003" }, @@ -2969,9 +2969,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 3214, - "end": 3235, - "start": 3214, + "commentStart": 3190, + "end": 3211, + "start": 3190, "type": "TagDeclarator", "value": "rectangleSegmentA003" }, @@ -2994,9 +2994,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 3330, - "end": 3351, - "start": 3330, + "commentStart": 3306, + "end": 3327, + "start": 3306, "type": "TagDeclarator", "value": "rectangleSegmentB003" }, @@ -3019,9 +3019,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 3453, - "end": 3474, - "start": 3453, + "commentStart": 3429, + "end": 3450, + "start": 3429, "type": "TagDeclarator", "value": "rectangleSegmentC003" }, @@ -3112,9 +3112,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -3125,9 +3125,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -3138,9 +3138,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -3168,9 +3168,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -3193,9 +3193,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -3218,9 +3218,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -3324,9 +3324,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -3337,9 +3337,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -3350,9 +3350,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -3363,9 +3363,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -3376,9 +3376,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -3389,9 +3389,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -3402,9 +3402,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -3415,9 +3415,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -3428,9 +3428,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -3545,9 +3545,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -3570,9 +3570,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -3595,9 +3595,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -3620,9 +3620,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -3645,9 +3645,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -3670,9 +3670,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -3695,9 +3695,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -3720,9 +3720,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -3745,9 +3745,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -4370,9 +4370,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -4395,9 +4395,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -4420,9 +4420,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -4445,9 +4445,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -4470,9 +4470,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -4495,9 +4495,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -4520,9 +4520,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -4545,9 +4545,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -4570,9 +4570,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -4925,9 +4925,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -4950,9 +4950,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -4975,9 +4975,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -5081,9 +5081,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -5094,9 +5094,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -5107,9 +5107,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -5120,9 +5120,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -5133,9 +5133,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -5146,9 +5146,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -5159,9 +5159,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -5172,9 +5172,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -5185,9 +5185,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -5302,9 +5302,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -5327,9 +5327,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -5352,9 +5352,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -5377,9 +5377,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -5402,9 +5402,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -5427,9 +5427,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -5452,9 +5452,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -5477,9 +5477,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -5502,9 +5502,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -5906,9 +5906,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2605, - "end": 2626, - "start": 2605, + "commentStart": 2581, + "end": 2602, + "start": 2581, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -5931,9 +5931,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2721, - "end": 2742, - "start": 2721, + "commentStart": 2697, + "end": 2718, + "start": 2697, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -5956,9 +5956,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 2844, - "end": 2865, - "start": 2844, + "commentStart": 2820, + "end": 2841, + "start": 2820, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -6062,9 +6062,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -6075,9 +6075,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -6088,9 +6088,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -6101,9 +6101,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -6114,9 +6114,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -6127,9 +6127,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -6140,9 +6140,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -6153,9 +6153,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -6166,9 +6166,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -6283,9 +6283,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -6308,9 +6308,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -6333,9 +6333,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -6358,9 +6358,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -6383,9 +6383,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -6408,9 +6408,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -6433,9 +6433,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -6458,9 +6458,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -6483,9 +6483,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -6887,9 +6887,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 3214, - "end": 3235, - "start": 3214, + "commentStart": 3190, + "end": 3211, + "start": 3190, "type": "TagDeclarator", "value": "rectangleSegmentA003" }, @@ -6912,9 +6912,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 3330, - "end": 3351, - "start": 3330, + "commentStart": 3306, + "end": 3327, + "start": 3306, "type": "TagDeclarator", "value": "rectangleSegmentB003" }, @@ -6937,9 +6937,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 3453, - "end": 3474, - "start": 3453, + "commentStart": 3429, + "end": 3450, + "start": 3429, "type": "TagDeclarator", "value": "rectangleSegmentC003" }, @@ -7030,9 +7030,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -7043,9 +7043,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -7056,9 +7056,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -7086,9 +7086,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2001, - "end": 2022, - "start": 2001, + "commentStart": 1977, + "end": 1998, + "start": 1977, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -7111,9 +7111,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 0.0 ], "tag": { - "commentStart": 2117, - "end": 2138, - "start": 2117, + "commentStart": 2093, + "end": 2114, + "start": 2093, "type": "TagDeclarator", "value": "rectangleSegmentB002" }, @@ -7136,9 +7136,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 2240, - "end": 2261, - "start": 2240, + "commentStart": 2216, + "end": 2237, + "start": 2216, "type": "TagDeclarator", "value": "rectangleSegmentC002" }, @@ -7242,9 +7242,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -7255,9 +7255,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -7268,9 +7268,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -7281,9 +7281,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -7294,9 +7294,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -7307,9 +7307,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -7320,9 +7320,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -7333,9 +7333,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -7346,9 +7346,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, @@ -7463,9 +7463,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl ], "radius": 11.88125, "tag": { - "commentStart": 741, - "end": 747, - "start": 741, + "commentStart": 743, + "end": 749, + "start": 743, "type": "TagDeclarator", "value": "seg09" }, @@ -7488,9 +7488,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 20.0 ], "tag": { - "commentStart": 800, - "end": 806, - "start": 800, + "commentStart": 809, + "end": 815, + "start": 809, "type": "TagDeclarator", "value": "seg03" }, @@ -7513,9 +7513,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 853, - "end": 859, - "start": 853, + "commentStart": 862, + "end": 868, + "start": 862, "type": "TagDeclarator", "value": "seg07" }, @@ -7538,9 +7538,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl -10.0 ], "tag": { - "commentStart": 954, - "end": 960, - "start": 954, + "commentStart": 963, + "end": 969, + "start": 963, "type": "TagDeclarator", "value": "seg02" }, @@ -7563,9 +7563,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1031, - "end": 1037, - "start": 1031, + "commentStart": 1040, + "end": 1046, + "start": 1040, "type": "TagDeclarator", "value": "seg06" }, @@ -7588,9 +7588,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 10.9406 ], "tag": { - "commentStart": 1088, - "end": 1094, - "start": 1088, + "commentStart": 1097, + "end": 1103, + "start": 1097, "type": "TagDeclarator", "value": "seg08" }, @@ -7613,9 +7613,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1147, - "end": 1153, - "start": 1147, + "commentStart": 1156, + "end": 1162, + "start": 1156, "type": "TagDeclarator", "value": "seg05" }, @@ -7638,9 +7638,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 30.9406 ], "tag": { - "commentStart": 1222, - "end": 1228, - "start": 1222, + "commentStart": 1231, + "end": 1237, + "start": 1231, "type": "TagDeclarator", "value": "seg10" }, @@ -7663,9 +7663,9 @@ description: Variables in memory after executing router-template-cross-bar.kcl 41.8813 ], "tag": { - "commentStart": 1264, - "end": 1270, - "start": 1264, + "commentStart": 1273, + "end": 1279, + "start": 1273, "type": "TagDeclarator", "value": "seg04" }, diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-slate/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/router-template-slate/artifact_graph_flowchart.snap.md index 1b3ec3dd1..29f3941f1 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-slate/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/router-template-slate/artifact_graph_flowchart.snap.md @@ -3,40 +3,40 @@ flowchart LR subgraph path2 [Path] 2["Path
[537, 580, 0]"] 3["Segment
[586, 625, 0]"] - 4["Segment
[631, 729, 0]"] - 5["Segment
[735, 811, 0]"] - 6["Segment
[817, 886, 0]"] - 7["Segment
[892, 932, 0]"] - 8["Segment
[938, 974, 0]"] - 9["Segment
[1014, 1044, 0]"] - 10["Segment
[1050, 1079, 0]"] - 11["Segment
[1085, 1114, 0]"] - 12["Segment
[1120, 1149, 0]"] - 13["Segment
[1155, 1255, 0]"] - 14["Segment
[1261, 1317, 0]"] - 15["Segment
[1323, 1330, 0]"] + 4["Segment
[631, 696, 0]"] + 5["Segment
[702, 778, 0]"] + 6["Segment
[784, 853, 0]"] + 7["Segment
[859, 899, 0]"] + 8["Segment
[905, 941, 0]"] + 9["Segment
[981, 1011, 0]"] + 10["Segment
[1017, 1046, 0]"] + 11["Segment
[1052, 1081, 0]"] + 12["Segment
[1087, 1116, 0]"] + 13["Segment
[1122, 1189, 0]"] + 14["Segment
[1195, 1251, 0]"] + 15["Segment
[1257, 1264, 0]"] 16[Solid2d] end subgraph path52 [Path] - 52["Path
[1490, 1590, 0]"] - 53["Segment
[1596, 1643, 0]"] - 54["Segment
[1649, 1761, 0]"] - 55["Segment
[1767, 1884, 0]"] - 56["Segment
[1890, 1946, 0]"] - 57["Segment
[1952, 1959, 0]"] + 52["Path
[1424, 1524, 0]"] + 53["Segment
[1530, 1577, 0]"] + 54["Segment
[1583, 1695, 0]"] + 55["Segment
[1701, 1818, 0]"] + 56["Segment
[1824, 1880, 0]"] + 57["Segment
[1886, 1893, 0]"] 58[Solid2d] end subgraph path74 [Path] - 74["Path
[2121, 2220, 0]"] - 75["Segment
[2226, 2272, 0]"] - 76["Segment
[2278, 2361, 0]"] - 77["Segment
[2367, 2455, 0]"] - 78["Segment
[2461, 2517, 0]"] - 79["Segment
[2523, 2530, 0]"] + 74["Path
[2055, 2154, 0]"] + 75["Segment
[2160, 2206, 0]"] + 76["Segment
[2212, 2295, 0]"] + 77["Segment
[2301, 2389, 0]"] + 78["Segment
[2395, 2451, 0]"] + 79["Segment
[2457, 2464, 0]"] 80[Solid2d] end 1["Plane
[514, 531, 0]"] - 17["Sweep Extrusion
[1373, 1403, 0]"] + 17["Sweep Extrusion
[1307, 1337, 0]"] 18[Wall] 19[Wall] 20[Wall] @@ -71,7 +71,7 @@ flowchart LR 49["SweepEdge Opposite"] 50["SweepEdge Adjacent"] 51["SweepEdge Opposite"] - 59["Sweep Extrusion
[2003, 2035, 0]"] + 59["Sweep Extrusion
[1937, 1969, 0]"] 60[Wall] 61[Wall] 62[Wall] @@ -86,7 +86,7 @@ flowchart LR 71["SweepEdge Adjacent"] 72["SweepEdge Opposite"] 73["SweepEdge Adjacent"] - 81["Sweep Extrusion
[2573, 2605, 0]"] + 81["Sweep Extrusion
[2507, 2539, 0]"] 82[Wall] 83[Wall] 84[Wall] @@ -101,8 +101,8 @@ flowchart LR 93["SweepEdge Adjacent"] 94["SweepEdge Opposite"] 95["SweepEdge Adjacent"] - 96["StartSketchOnFace
[1445, 1484, 0]"] - 97["StartSketchOnFace
[2076, 2115, 0]"] + 96["StartSketchOnFace
[1379, 1418, 0]"] + 97["StartSketchOnFace
[2010, 2049, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap b/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap index 783978759..8ad781395 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap +++ b/rust/kcl-lib/tests/kcl_samples/router-template-slate/ast.snap @@ -769,123 +769,98 @@ description: Result of parsing router-template-slate.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } + }, + { + "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": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + "name": { "commentStart": 0, "end": 0, "name": "radius", "start": 0, "type": "Identifier" }, + "path": [], "start": 0, - "type": "ObjectProperty", - "value": { + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "radius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, + "name": "templateGap", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -906,8 +881,9 @@ description: Result of parsing router-template-slate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1596,123 +1572,98 @@ description: Result of parsing router-template-slate.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleStart", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "180", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 180.0, + "suffix": "None" + } + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "90", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 90.0, + "suffix": "None" + } + } + }, + { + "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": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "90", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 90.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "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" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { + "name": { "commentStart": 0, "end": 0, "name": "radius", "start": 0, "type": "Identifier" }, + "path": [], "start": 0, - "type": "ObjectProperty", - "value": { + "type": "Name", + "type": "Name" + }, + "operator": "-", + "right": { + "abs_path": false, + "commentStart": 0, + "end": 0, + "name": { "commentStart": 0, "end": 0, - "left": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "radius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, - "operator": "-", - "right": { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { - "commentStart": 0, - "end": 0, - "name": "templateGap", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - }, + "name": "templateGap", "start": 0, - "type": "BinaryExpression", - "type": "BinaryExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + }, + "start": 0, + "type": "BinaryExpression", + "type": "BinaryExpression" + } } ], "callee": { @@ -1733,8 +1684,9 @@ description: Result of parsing router-template-slate.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/kcl_samples/router-template-slate/program_memory.snap b/rust/kcl-lib/tests/kcl_samples/router-template-slate/program_memory.snap index 41e40d2cc..561e8b5e8 100644 --- a/rust/kcl-lib/tests/kcl_samples/router-template-slate/program_memory.snap +++ b/rust/kcl-lib/tests/kcl_samples/router-template-slate/program_memory.snap @@ -48,9 +48,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -61,9 +61,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -74,9 +74,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -189,9 +189,9 @@ description: Variables in memory after executing router-template-slate.kcl 20.0 ], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -214,9 +214,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -239,9 +239,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -264,9 +264,9 @@ description: Variables in memory after executing router-template-slate.kcl -122.4938 ], "tag": { - "commentStart": 967, - "end": 973, - "start": 967, + "commentStart": 934, + "end": 940, + "start": 934, "type": "TagDeclarator", "value": "seg02" }, @@ -526,9 +526,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1621, - "end": 1642, - "start": 1621, + "commentStart": 1555, + "end": 1576, + "start": 1555, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -539,9 +539,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1739, - "end": 1760, - "start": 1739, + "commentStart": 1673, + "end": 1694, + "start": 1673, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -552,9 +552,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 1862, - "end": 1883, - "start": 1862, + "commentStart": 1796, + "end": 1817, + "start": 1796, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -582,9 +582,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 1621, - "end": 1642, - "start": 1621, + "commentStart": 1555, + "end": 1576, + "start": 1555, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -607,9 +607,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 1739, - "end": 1760, - "start": 1739, + "commentStart": 1673, + "end": 1694, + "start": 1673, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -632,9 +632,9 @@ description: Variables in memory after executing router-template-slate.kcl -92.4938 ], "tag": { - "commentStart": 1862, - "end": 1883, - "start": 1862, + "commentStart": 1796, + "end": 1817, + "start": 1796, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -745,9 +745,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -758,9 +758,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -771,9 +771,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -886,9 +886,9 @@ description: Variables in memory after executing router-template-slate.kcl 20.0 ], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -911,9 +911,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -936,9 +936,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -961,9 +961,9 @@ description: Variables in memory after executing router-template-slate.kcl -122.4938 ], "tag": { - "commentStart": 967, - "end": 973, - "start": 967, + "commentStart": 934, + "end": 940, + "start": 934, "type": "TagDeclarator", "value": "seg02" }, @@ -1272,9 +1272,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 2250, - "end": 2271, - "start": 2250, + "commentStart": 2184, + "end": 2205, + "start": 2184, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -1316,9 +1316,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 2250, - "end": 2271, - "start": 2250, + "commentStart": 2184, + "end": 2205, + "start": 2184, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -1467,9 +1467,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -1480,9 +1480,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -1493,9 +1493,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -1608,9 +1608,9 @@ description: Variables in memory after executing router-template-slate.kcl 20.0 ], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -1633,9 +1633,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -1658,9 +1658,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -1683,9 +1683,9 @@ description: Variables in memory after executing router-template-slate.kcl -122.4938 ], "tag": { - "commentStart": 967, - "end": 973, - "start": 967, + "commentStart": 934, + "end": 940, + "start": 934, "type": "TagDeclarator", "value": "seg02" }, @@ -2150,9 +2150,9 @@ description: Variables in memory after executing router-template-slate.kcl 20.0 ], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -2175,9 +2175,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2200,9 +2200,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -2225,9 +2225,9 @@ description: Variables in memory after executing router-template-slate.kcl -122.4938 ], "tag": { - "commentStart": 967, - "end": 973, - "start": 967, + "commentStart": 934, + "end": 940, + "start": 934, "type": "TagDeclarator", "value": "seg02" }, @@ -2484,9 +2484,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 1621, - "end": 1642, - "start": 1621, + "commentStart": 1555, + "end": 1576, + "start": 1555, "type": "TagDeclarator", "value": "rectangleSegmentA001" }, @@ -2509,9 +2509,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 1739, - "end": 1760, - "start": 1739, + "commentStart": 1673, + "end": 1694, + "start": 1673, "type": "TagDeclarator", "value": "rectangleSegmentB001" }, @@ -2534,9 +2534,9 @@ description: Variables in memory after executing router-template-slate.kcl -92.4938 ], "tag": { - "commentStart": 1862, - "end": 1883, - "start": 1862, + "commentStart": 1796, + "end": 1817, + "start": 1796, "type": "TagDeclarator", "value": "rectangleSegmentC001" }, @@ -2647,9 +2647,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -2660,9 +2660,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2673,9 +2673,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -2788,9 +2788,9 @@ description: Variables in memory after executing router-template-slate.kcl 20.0 ], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -2813,9 +2813,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -2838,9 +2838,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -2863,9 +2863,9 @@ description: Variables in memory after executing router-template-slate.kcl -122.4938 ], "tag": { - "commentStart": 967, - "end": 973, - "start": 967, + "commentStart": 934, + "end": 940, + "start": 934, "type": "TagDeclarator", "value": "seg02" }, @@ -3171,9 +3171,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 2250, - "end": 2271, - "start": 2250, + "commentStart": 2184, + "end": 2205, + "start": 2184, "type": "TagDeclarator", "value": "rectangleSegmentA002" }, @@ -3322,9 +3322,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -3335,9 +3335,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -3348,9 +3348,9 @@ description: Variables in memory after executing router-template-slate.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -3463,9 +3463,9 @@ description: Variables in memory after executing router-template-slate.kcl 20.0 ], "tag": { - "commentStart": 804, - "end": 810, - "start": 804, + "commentStart": 771, + "end": 777, + "start": 771, "type": "TagDeclarator", "value": "seg05" }, @@ -3488,9 +3488,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 879, - "end": 885, - "start": 879, + "commentStart": 846, + "end": 852, + "start": 846, "type": "TagDeclarator", "value": "seg04" }, @@ -3513,9 +3513,9 @@ description: Variables in memory after executing router-template-slate.kcl -12.4937 ], "tag": { - "commentStart": 925, - "end": 931, - "start": 925, + "commentStart": 892, + "end": 898, + "start": 892, "type": "TagDeclarator", "value": "seg03" }, @@ -3538,9 +3538,9 @@ description: Variables in memory after executing router-template-slate.kcl -122.4938 ], "tag": { - "commentStart": 967, - "end": 973, - "start": 967, + "commentStart": 934, + "end": 940, + "start": 934, "type": "TagDeclarator", "value": "seg02" }, diff --git a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md index 3b4705269..6a7da4b2c 100644 --- a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/artifact_graph_flowchart.snap.md @@ -100,34 +100,34 @@ flowchart LR end subgraph path175 [Path] 175["Path
[1092, 1190, 12]"] - 176["Segment
[1198, 1317, 12]"] - 177["Segment
[1325, 1372, 12]"] - 178["Segment
[1380, 1501, 12]"] - 179["Segment
[1509, 1516, 12]"] + 176["Segment
[1198, 1276, 12]"] + 177["Segment
[1284, 1331, 12]"] + 178["Segment
[1339, 1419, 12]"] + 179["Segment
[1427, 1434, 12]"] 180[Solid2d] end subgraph path182 [Path] - 182["Path
[1613, 1710, 12]"] - 183["Segment
[1718, 1837, 12]"] - 184["Segment
[1845, 1893, 12]"] - 185["Segment
[1901, 2022, 12]"] - 186["Segment
[2030, 2037, 12]"] + 182["Path
[1531, 1628, 12]"] + 183["Segment
[1636, 1714, 12]"] + 184["Segment
[1722, 1770, 12]"] + 185["Segment
[1778, 1858, 12]"] + 186["Segment
[1866, 1873, 12]"] 187[Solid2d] end subgraph path189 [Path] 189["Path
[1092, 1190, 12]"] - 190["Segment
[1198, 1317, 12]"] - 191["Segment
[1325, 1372, 12]"] - 192["Segment
[1380, 1501, 12]"] - 193["Segment
[1509, 1516, 12]"] + 190["Segment
[1198, 1276, 12]"] + 191["Segment
[1284, 1331, 12]"] + 192["Segment
[1339, 1419, 12]"] + 193["Segment
[1427, 1434, 12]"] 194[Solid2d] end subgraph path196 [Path] - 196["Path
[1613, 1710, 12]"] - 197["Segment
[1718, 1837, 12]"] - 198["Segment
[1845, 1893, 12]"] - 199["Segment
[1901, 2022, 12]"] - 200["Segment
[2030, 2037, 12]"] + 196["Path
[1531, 1628, 12]"] + 197["Segment
[1636, 1714, 12]"] + 198["Segment
[1722, 1770, 12]"] + 199["Segment
[1778, 1858, 12]"] + 200["Segment
[1866, 1873, 12]"] 201[Solid2d] end subgraph path230 [Path] @@ -142,9 +142,9 @@ flowchart LR 256["Path
[309, 339, 10]"] 257["Segment
[345, 377, 10]"] 258["Segment
[383, 416, 10]"] - 259["Segment
[422, 503, 10]"] - 260["Segment
[509, 536, 10]"] - 261["Segment
[542, 549, 10]"] + 259["Segment
[422, 470, 10]"] + 260["Segment
[476, 503, 10]"] + 261["Segment
[509, 516, 10]"] 262[Solid2d] end subgraph path274 [Path] @@ -326,7 +326,7 @@ flowchart LR 253["EdgeCut Fillet
[649, 855, 9]"] 254["EdgeCut Fillet
[649, 855, 9]"] 255["Plane
[286, 303, 10]"] - 263["Sweep Revolve
[555, 572, 10]"] + 263["Sweep Revolve
[522, 539, 10]"] 264[Wall] 265[Wall] 266[Wall] diff --git a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap index 5a628737e..211d93d80 100644 --- a/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap +++ b/rust/kcl-lib/tests/kcl_samples/walkie-talkie/ops.snap @@ -1571,7 +1571,7 @@ description: Operations executed walkie-talkie.kcl "name": "oLogo", "functionSourceRange": [ 1035, - 1538, + 1456, 12 ], "unlabeledArg": null, @@ -1629,8 +1629,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "oLogo2", "functionSourceRange": [ - 1556, - 2059, + 1474, + 1895, 12 ], "unlabeledArg": null, @@ -1689,7 +1689,7 @@ description: Operations executed walkie-talkie.kcl "name": "oLogo", "functionSourceRange": [ 1035, - 1538, + 1456, 12 ], "unlabeledArg": null, @@ -1747,8 +1747,8 @@ description: Operations executed walkie-talkie.kcl "type": "FunctionCall", "name": "oLogo2", "functionSourceRange": [ - 1556, - 2059, + 1474, + 1895, 12 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/outputs/serial_test_example_arc_to0.png b/rust/kcl-lib/tests/outputs/serial_test_example_arc1.png similarity index 100% rename from rust/kcl-lib/tests/outputs/serial_test_example_arc_to0.png rename to rust/kcl-lib/tests/outputs/serial_test_example_arc1.png diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/pentagon_fillet_sugar/artifact_graph_flowchart.snap.md index 7f6041800..cd90dc13f 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/artifact_graph_flowchart.snap.md @@ -1,25 +1,25 @@ ```mermaid flowchart LR subgraph path2 [Path] - 2["Path
[161, 186, 0]"] - 3["Segment
[192, 246, 0]"] - 4["Segment
[252, 307, 0]"] - 5["Segment
[313, 368, 0]"] + 2["Path
[96, 121, 0]"] + 3["Segment
[127, 181, 0]"] + 4["Segment
[187, 242, 0]"] + 5["Segment
[248, 303, 0]"] end subgraph path18 [Path] - 18["Path
[474, 525, 0]"] - 19["Segment
[533, 555, 0]"] - 20["Segment
[563, 571, 0]"] + 18["Path
[409, 460, 0]"] + 19["Segment
[468, 582, 0]"] + 20["Segment
[590, 598, 0]"] 21[Solid2d] end subgraph path29 [Path] - 29["Path
[474, 525, 0]"] - 30["Segment
[533, 555, 0]"] - 31["Segment
[563, 571, 0]"] + 29["Path
[409, 460, 0]"] + 30["Segment
[468, 582, 0]"] + 31["Segment
[590, 598, 0]"] 32[Solid2d] end - 1["Plane
[138, 155, 0]"] - 6["Sweep Extrusion
[374, 406, 0]"] + 1["Plane
[73, 90, 0]"] + 6["Sweep Extrusion
[309, 341, 0]"] 7[Wall] 8[Wall] 9[Wall] @@ -31,22 +31,22 @@ flowchart LR 15["SweepEdge Adjacent"] 16["SweepEdge Opposite"] 17["SweepEdge Adjacent"] - 22["Sweep Extrusion
[614, 642, 0]"] + 22["Sweep Extrusion
[641, 669, 0]"] 23[Wall] 24["Cap End"] 25["SweepEdge Opposite"] 26["SweepEdge Adjacent"] - 27["EdgeCut Fillet
[648, 775, 0]"] - 28["EdgeCut Fillet
[648, 775, 0]"] - 33["Sweep Extrusion
[814, 842, 0]"] + 27["EdgeCut Fillet
[675, 802, 0]"] + 28["EdgeCut Fillet
[675, 802, 0]"] + 33["Sweep Extrusion
[841, 869, 0]"] 34[Wall] 35["Cap End"] 36["SweepEdge Opposite"] 37["SweepEdge Adjacent"] - 38["EdgeCut Fillet
[848, 975, 0]"] - 39["EdgeCut Fillet
[848, 975, 0]"] - 40["StartSketchOnFace
[437, 466, 0]"] - 41["StartSketchOnFace
[437, 466, 0]"] + 38["EdgeCut Fillet
[875, 1002, 0]"] + 39["EdgeCut Fillet
[875, 1002, 0]"] + 40["StartSketchOnFace
[372, 401, 0]"] + 41["StartSketchOnFace
[372, 401, 0]"] 1 --- 2 2 --- 3 2 --- 4 diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap index 52b9b2a81..311ffb8e5 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/ast.snap @@ -104,115 +104,6 @@ description: Result of parsing pentagon_fillet_sugar.kcl "type": "VariableDeclaration", "type": "VariableDeclaration" }, - { - "commentStart": 0, - "declaration": { - "commentStart": 0, - "end": 0, - "id": { - "commentStart": 0, - "end": 0, - "name": "circ", - "start": 0, - "type": "Identifier" - }, - "init": { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleStart", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 0.0, - "suffix": "None" - } - } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "angleEnd", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "end": 0, - "raw": "360", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 360.0, - "suffix": "None" - } - } - }, - { - "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": "radius", - "start": 0, - "type": "Identifier" - }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" - }, - "start": 0, - "type": "VariableDeclarator" - }, - "end": 0, - "kind": "const", - "start": 0, - "type": "VariableDeclaration", - "type": "VariableDeclaration" - }, { "commentStart": 0, "declaration": { @@ -907,35 +798,92 @@ description: Result of parsing pentagon_fillet_sugar.kcl { "arguments": [ { - "abs_path": false, - "commentStart": 0, - "end": 0, - "name": { + "type": "LabeledArg", + "label": { "commentStart": 0, "end": 0, - "name": "circ", + "name": "angleStart", "start": 0, "type": "Identifier" }, - "path": [], - "start": 0, - "type": "Name", - "type": "Name" + "arg": { + "commentStart": 0, + "end": 0, + "raw": "0", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 0.0, + "suffix": "None" + } + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "angleEnd", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "raw": "360", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 360.0, + "suffix": "None" + } + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "TagDeclarator", - "type": "TagDeclarator", - "value": "arc_tag" + "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": "radius", + "start": 0, + "type": "Identifier" + }, + "path": [], + "start": 0, + "type": "Name", + "type": "Name" + } + }, + { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "arc_tag" + } } ], "callee": { @@ -956,8 +904,9 @@ description: Result of parsing pentagon_fillet_sugar.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ @@ -1738,7 +1687,18 @@ description: Result of parsing pentagon_fillet_sugar.kcl "end": 0, "nonCodeMeta": { "nonCodeNodes": { - "3": [ + "2": [ + { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "NonCodeNode", + "value": { + "type": "newLine" + } + } + ], + "4": [ { "commentStart": 0, "end": 0, @@ -1759,17 +1719,6 @@ description: Result of parsing pentagon_fillet_sugar.kcl "type": "newLine" } } - ], - "6": [ - { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "NonCodeNode", - "value": { - "type": "newLine" - } - } ] }, "startNodes": [] diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl b/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl index 9f3e304f6..4d2f262d5 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/input.kcl @@ -1,11 +1,6 @@ triangleHeight = 200 plumbusLen = 100 radius = 80 -circ = { - angleStart = 0, - angleEnd = 360, - radius = radius -} triangleLen = 500 p = startSketchOn(XY) @@ -18,7 +13,12 @@ p = startSketchOn(XY) fn circl(x, face) { return startSketchOn(p, face = face) |> startProfileAt([x + radius, triangleHeight / 2], %) - |> arc(circ, %, $arc_tag) + |> arc( + angleStart = 0, + angleEnd = 360, + radius = radius, + tag = $arc_tag, + ) |> close(%) } diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap index 3be272b64..255fb7e44 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/ops.snap @@ -56,8 +56,8 @@ description: Operations executed pentagon_fillet_sugar.kcl "type": "FunctionCall", "name": "circl", "functionSourceRange": [ - 416, - 573, + 351, + 600, 0 ], "unlabeledArg": null, @@ -179,8 +179,8 @@ description: Operations executed pentagon_fillet_sugar.kcl "type": "FunctionCall", "name": "circl", "functionSourceRange": [ - 416, - 573, + 351, + 600, 0 ], "unlabeledArg": null, diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/program_memory.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/program_memory.snap index 658bffbf6..96ff928b8 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/program_memory.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/program_memory.snap @@ -45,9 +45,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl ], "radius": 80.0, "tag": { - "commentStart": 546, - "end": 554, - "start": 546, + "commentStart": 564, + "end": 572, + "start": 564, "type": "TagDeclarator", "value": "arc_tag" }, @@ -119,9 +119,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -132,9 +132,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -145,9 +145,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -168,9 +168,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 0.0 ], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -193,9 +193,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -218,9 +218,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -377,9 +377,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl ], "radius": 80.0, "tag": { - "commentStart": 546, - "end": 554, - "start": 546, + "commentStart": 564, + "end": 572, + "start": 564, "type": "TagDeclarator", "value": "arc_tag" }, @@ -451,9 +451,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -464,9 +464,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -477,9 +477,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -500,9 +500,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 0.0 ], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -525,9 +525,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -550,9 +550,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -687,50 +687,6 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl } } }, - "circ": { - "type": "Object", - "value": { - "angleEnd": { - "type": "Number", - "value": 360.0, - "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } - } - }, - "angleStart": { - "type": "Number", - "value": 0.0, - "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } - } - }, - "radius": { - "type": "Number", - "value": 80.0, - "ty": { - "type": "Default", - "len": { - "type": "Mm" - }, - "angle": { - "type": "Degrees" - } - } - } - } - }, "circl": { "type": "Function" }, @@ -746,9 +702,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -759,9 +715,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -772,9 +728,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -795,9 +751,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 0.0 ], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -820,9 +776,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -845,9 +801,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -960,9 +916,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 546, - "end": 554, - "start": 546, + "commentStart": 564, + "end": 572, + "start": 564, "type": "TagDeclarator", "value": "arc_tag" }, @@ -989,9 +945,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl ], "radius": 80.0, "tag": { - "commentStart": 546, - "end": 554, - "start": 546, + "commentStart": 564, + "end": 572, + "start": 564, "type": "TagDeclarator", "value": "arc_tag" }, @@ -1063,9 +1019,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -1076,9 +1032,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -1089,9 +1045,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -1112,9 +1068,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 0.0 ], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -1137,9 +1093,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -1162,9 +1118,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -1356,9 +1312,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 546, - "end": 554, - "start": 546, + "commentStart": 564, + "end": 572, + "start": 564, "type": "TagDeclarator", "value": "arc_tag" }, @@ -1385,9 +1341,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl ], "radius": 80.0, "tag": { - "commentStart": 546, - "end": 554, - "start": 546, + "commentStart": 564, + "end": 572, + "start": 564, "type": "TagDeclarator", "value": "arc_tag" }, @@ -1459,9 +1415,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -1472,9 +1428,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -1485,9 +1441,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl "id": "[uuid]", "sourceRange": [], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, @@ -1508,9 +1464,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 0.0 ], "tag": { - "commentStart": 243, - "end": 245, - "start": 243, + "commentStart": 178, + "end": 180, + "start": 178, "type": "TagDeclarator", "value": "a" }, @@ -1533,9 +1489,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 304, - "end": 306, - "start": 304, + "commentStart": 239, + "end": 241, + "start": 239, "type": "TagDeclarator", "value": "b" }, @@ -1558,9 +1514,9 @@ description: Variables in memory after executing pentagon_fillet_sugar.kcl 433.0127 ], "tag": { - "commentStart": 365, - "end": 367, - "start": 365, + "commentStart": 300, + "end": 302, + "start": 300, "type": "TagDeclarator", "value": "c" }, diff --git a/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap b/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap index d20d9a206..32ef16098 100644 --- a/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap +++ b/rust/kcl-lib/tests/pentagon_fillet_sugar/unparsed.snap @@ -5,11 +5,6 @@ description: Result of unparsing pentagon_fillet_sugar.kcl triangleHeight = 200 plumbusLen = 100 radius = 80 -circ = { - angleStart = 0, - angleEnd = 360, - radius = radius -} triangleLen = 500 p = startSketchOn(XY) @@ -22,7 +17,12 @@ p = startSketchOn(XY) fn circl(x, face) { return startSketchOn(p, face = face) |> startProfileAt([x + radius, triangleHeight / 2], %) - |> arc(circ, %, $arc_tag) + |> arc( + angleStart = 0, + angleEnd = 360, + radius = radius, + tag = $arc_tag, + ) |> close(%) } diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md b/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md index d07d8e0a8..517b2ce54 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/artifact_graph_flowchart.snap.md @@ -3,8 +3,8 @@ flowchart LR subgraph path2 [Path] 2["Path
[43, 82, 0]"] 3["Segment
[88, 112, 0]"] - 4["Segment
[118, 209, 0]"] - 5["Segment
[215, 292, 0]"] + 4["Segment
[118, 232, 0]"] + 5["Segment
[238, 315, 0]"] end 1["Plane
[12, 29, 0]"] 1 --- 2 diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap b/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap index 3a555c6fc..1a8327f42 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/ast.snap @@ -224,128 +224,116 @@ description: Result of parsing tangent_to_3_point_arc.kcl { "arguments": [ { - "commentStart": 0, - "end": 0, - "properties": [ - { - "commentStart": 0, - "end": 0, - "key": { + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "interiorAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { "commentStart": 0, "end": 0, - "name": "interior", + "raw": "300.0", "start": 0, - "type": "Identifier" + "type": "Literal", + "type": "Literal", + "value": { + "value": 300.0, + "suffix": "None" + } }, - "start": 0, - "type": "ObjectProperty", - "value": { + { "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "300.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 300.0, - "suffix": "None" - } - }, - { - "commentStart": 0, - "end": 0, - "raw": "100.0", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 100.0, - "suffix": "None" - } - } - ], "end": 0, + "raw": "100.0", "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" + "type": "Literal", + "type": "Literal", + "value": { + "value": 100.0, + "suffix": "None" + } } - }, - { - "commentStart": 0, - "end": 0, - "key": { - "commentStart": 0, - "end": 0, - "name": "end", - "start": 0, - "type": "Identifier" - }, - "start": 0, - "type": "ObjectProperty", - "value": { - "commentStart": 0, - "elements": [ - { - "commentStart": 0, - "end": 0, - "raw": "200.00", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 200.0, - "suffix": "None" - } - }, - { - "argument": { - "commentStart": 0, - "end": 0, - "raw": "100.00", - "start": 0, - "type": "Literal", - "type": "Literal", - "value": { - "value": 100.0, - "suffix": "None" - } - }, - "commentStart": 0, - "end": 0, - "operator": "-", - "start": 0, - "type": "UnaryExpression", - "type": "UnaryExpression" - } - ], - "end": 0, - "start": 0, - "type": "ArrayExpression", - "type": "ArrayExpression" - } - } - ], - "start": 0, - "type": "ObjectExpression", - "type": "ObjectExpression" + ], + "end": 0, + "start": 0, + "type": "ArrayExpression", + "type": "ArrayExpression" + } }, { - "commentStart": 0, - "end": 0, - "start": 0, - "type": "PipeSubstitution", - "type": "PipeSubstitution" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "endAbsolute", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "elements": [ + { + "commentStart": 0, + "end": 0, + "raw": "200.00", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 200.0, + "suffix": "None" + } + }, + { + "argument": { + "commentStart": 0, + "end": 0, + "raw": "100.00", + "start": 0, + "type": "Literal", + "type": "Literal", + "value": { + "value": 100.0, + "suffix": "None" + } + }, + "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": "TagDeclarator", - "type": "TagDeclarator", - "value": "seg01" + "type": "LabeledArg", + "label": { + "commentStart": 0, + "end": 0, + "name": "tag", + "start": 0, + "type": "Identifier" + }, + "arg": { + "commentStart": 0, + "end": 0, + "start": 0, + "type": "TagDeclarator", + "type": "TagDeclarator", + "value": "seg01" + } } ], "callee": { @@ -355,7 +343,7 @@ description: Result of parsing tangent_to_3_point_arc.kcl "name": { "commentStart": 0, "end": 0, - "name": "arcTo", + "name": "arc", "start": 0, "type": "Identifier" }, @@ -366,8 +354,9 @@ description: Result of parsing tangent_to_3_point_arc.kcl "commentStart": 0, "end": 0, "start": 0, - "type": "CallExpression", - "type": "CallExpression" + "type": "CallExpressionKw", + "type": "CallExpressionKw", + "unlabeled": null }, { "arguments": [ diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl b/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl index 3bab7b0a5..a79ccf9b1 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/input.kcl @@ -1,10 +1,11 @@ sketch001 = startSketchOn(XZ) profile001 = startProfileAt([100.0, 0.0], sketch001) |> line(end = [0.0, 120.0]) - |> arcTo({ - interior = [300.0, 100.0], - end = [200.00, -100.00] - }, %, $seg01) + |> arc( + interiorAbsolute = [300.0, 100.0], + endAbsolute = [200.00, -100.00], + tag = $seg01, + ) |> angledLine( angle = tangentToEnd(seg01), length = 100.00 diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap b/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap index 5098f6b6f..f3c3ae7d7 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/program_memory.snap @@ -50,9 +50,9 @@ description: Variables in memory after executing tangent_to_3_point_arc.kcl -100.0 ], "tag": { - "commentStart": 202, - "end": 208, - "start": 202, + "commentStart": 218, + "end": 224, + "start": 218, "type": "TagDeclarator", "value": "seg01" }, diff --git a/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap b/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap index 5c0cff69f..0deba1782 100644 --- a/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap +++ b/rust/kcl-lib/tests/tangent_to_3_point_arc/unparsed.snap @@ -5,8 +5,5 @@ description: Result of unparsing tangent_to_3_point_arc.kcl sketch001 = startSketchOn(XZ) profile001 = startProfileAt([100.0, 0.0], sketch001) |> line(end = [0.0, 120.0]) - |> arcTo({ - interior = [300.0, 100.0], - end = [200.0, -100.0] - }, %, $seg01) + |> arc(interiorAbsolute = [300.0, 100.0], endAbsolute = [200.0, -100.0], tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), length = 100.0) diff --git a/src/clientSideScene/segments.ts b/src/clientSideScene/segments.ts index acb57b49c..d5b1ce334 100644 --- a/src/clientSideScene/segments.ts +++ b/src/clientSideScene/segments.ts @@ -1551,10 +1551,10 @@ class ThreePointArcSegment implements SegmentUtils { overlayDetails.forEach((payload, index) => { if (payload?.type === 'set-one') { overlays[payload.pathToNodeString] = payload.seg - // Add filterValue: 'interior' for p2 and 'end' for p3 + // Add filterValue: 'interiorAbsolute' for p2 and 'end' for p3 segmentOverlays.push({ ...payload.seg[0], - filterValue: index === 0 ? 'interior' : 'end', + filterValue: index === 0 ? 'interiorAbsolute' : 'end', }) } }) diff --git a/src/lang/constants.ts b/src/lang/constants.ts index 86d62e253..be12aed8f 100644 --- a/src/lang/constants.ts +++ b/src/lang/constants.ts @@ -3,12 +3,15 @@ export const ARG_END = 'end' export const ARG_LENGTH = 'length' export const ARG_END_ABSOLUTE = 'endAbsolute' export const ARG_CIRCLE_CENTER = 'center' -export const ARG_CIRCLE_RADIUS = 'radius' +export const ARG_RADIUS = 'radius' export const DETERMINING_ARGS = [ARG_LENGTH, ARG_END, ARG_END_ABSOLUTE] export const ARG_LENGTH_X = 'lengthX' export const ARG_LENGTH_Y = 'lengthY' export const ARG_ANGLE = 'angle' +export const ARG_ANGLE_START = 'angleStart' +export const ARG_ANGLE_END = 'angleEnd' export const ARG_OFFSET = 'offset' export const ARG_END_ABSOLUTE_X = 'endAbsoluteX' export const ARG_END_ABSOLUTE_Y = 'endAbsoluteY' export const ARG_INTERSECT_TAG = 'intersectTag' +export const ARG_INTERIOR_ABSOLUTE = 'interiorAbsolute' diff --git a/src/lang/std/sketch.ts b/src/lang/std/sketch.ts index 6d1e64c7f..6560db5a7 100644 --- a/src/lang/std/sketch.ts +++ b/src/lang/std/sketch.ts @@ -1,12 +1,13 @@ import { perpendicularDistance } from 'sketch-helpers' import type { Node } from '@rust/kcl-lib/bindings/Node' -import type { TagDeclarator } from '@rust/kcl-lib/bindings/TagDeclarator' import { ARG_ANGLE, + ARG_ANGLE_END, + ARG_ANGLE_START, ARG_CIRCLE_CENTER, - ARG_CIRCLE_RADIUS, + ARG_RADIUS, ARG_END, ARG_END_ABSOLUTE, ARG_END_ABSOLUTE_X, @@ -18,6 +19,7 @@ import { ARG_OFFSET, ARG_TAG, DETERMINING_ARGS, + ARG_INTERIOR_ABSOLUTE, } from '@src/lang/constants' import { createArrayExpression, @@ -27,9 +29,7 @@ import { createLabeledArg, createLiteral, createLocalName, - createObjectExpression, createPipeExpression, - createPipeSubstitution, createTagDeclarator, findUniqueName, nonCodeMetaEmpty, @@ -1293,7 +1293,7 @@ export const circle: SketchLineHelperKw = { ]) mutateKwArg(ARG_CIRCLE_CENTER, callExpression, newCenter) const newRadius = createLiteral(roundOff(radius)) - mutateKwArg(ARG_CIRCLE_RADIUS, callExpression, newRadius) + mutateKwArg(ARG_RADIUS, callExpression, newRadius) return { modifiedAst: _node, pathToNode, @@ -1306,7 +1306,7 @@ export const circle: SketchLineHelperKw = { const firstArg = callExp.arguments?.[0] if (firstArg.type !== 'LabeledArg') return [] let centerInfo = findKwArgWithIndex(ARG_CIRCLE_CENTER, callExp) - let radiusInfo = findKwArgWithIndex(ARG_CIRCLE_RADIUS, callExp) + let radiusInfo = findKwArgWithIndex(ARG_RADIUS, callExp) if (!centerInfo || !radiusInfo) return [] if (centerInfo?.expr.type !== 'ArrayExpression') return [] @@ -1383,7 +1383,7 @@ export const circle: SketchLineHelperKw = { }, } -export const arc: SketchLineHelper = { +export const arc: SketchLineHelperKw = { add: ({ node, variables, @@ -1422,16 +1422,13 @@ export const arc: SketchLineHelper = { const startAngleDegrees = (startAngle * 180) / Math.PI const endAngleDegrees = (endAngle * 180) / Math.PI - // Create the arc call expression - const arcObj = createObjectExpression({ - radius: createLiteral(roundOff(radius)), - angleStart: createLiteral(roundOff(startAngleDegrees)), - angleEnd: createLiteral(roundOff(endAngleDegrees)), - }) - - const newArc = createCallExpression('arc', [ - arcObj, - createPipeSubstitution(), + const newArc = createCallExpressionStdLibKw('arc', null, [ + createLabeledArg('radius', createLiteral(roundOff(radius))), + createLabeledArg( + 'angleStart', + createLiteral(roundOff(startAngleDegrees)) + ), + createLabeledArg('angleEnd', createLiteral(roundOff(endAngleDegrees))), ]) if ( @@ -1532,15 +1529,10 @@ export const arc: SketchLineHelper = { if (input.type !== 'arc-segment') return ARC_SEGMENT_ERR const { center, radius, from, to } = input const _node = { ...node } - const nodeMeta = getNodeFromPath(_node, pathToNode) + const nodeMeta = getNodeFromPath(_node, pathToNode) if (err(nodeMeta)) return nodeMeta const { node: callExpression, shallowPath } = nodeMeta - const firstArg = callExpression.arguments?.[0] - - if (firstArg.type !== 'ObjectExpression') { - return new Error('Expected object expression as first argument') - } // Calculate start angle (from center to 'from' point) const startAngle = Math.atan2(from[1] - center[1], from[0] - center[0]) @@ -1552,133 +1544,120 @@ export const arc: SketchLineHelper = { const startAngleDegrees = (startAngle * 180) / Math.PI const endAngleDegrees = (endAngle * 180) / Math.PI - // Update radius const newRadius = createLiteral(roundOff(radius)) - mutateObjExpProp(firstArg, newRadius, 'radius') - - // Update angleStart const newAngleStart = createLiteral(roundOff(startAngleDegrees)) - mutateObjExpProp(firstArg, newAngleStart, 'angleStart') - - // Update angleEnd const newAngleEnd = createLiteral(roundOff(endAngleDegrees)) - mutateObjExpProp(firstArg, newAngleEnd, 'angleEnd') + mutateKwArg('radius', callExpression, newRadius) + mutateKwArg('angleStart', callExpression, newAngleStart) + mutateKwArg('angleEnd', callExpression, newAngleEnd) return { modifiedAst: _node, pathToNode: shallowPath, } }, - getTag: getTag(), - addTag: addTag(), + getTag: getTagKwArg(), + addTag: addTagKw(), getConstraintInfo: (callExp, code, pathToNode, filterValue) => { // TODO this isn't quiet right, the filter value needs to be added to group the radius and start angle together // with the end angle by itself, // also both angles are just called angle, which is not correct - if (callExp.type !== 'CallExpression') return [] - const args = callExp.arguments - if (args.length < 1) return [] + if (callExp.type !== 'CallExpressionKw') return [] - const firstArg = args[0] - if (firstArg.type !== 'ObjectExpression') return [] + const returnVal = [] + const pathToBase: PathToNode = [ + ...pathToNode, + ['arguments', 'CallExpressionKw'], + ] // Find radius, angleStart, and angleEnd properties - const radiusProp = firstArg.properties.find( - (prop) => - prop.type === 'ObjectProperty' && - prop.key.type === 'Identifier' && - prop.key.name === 'radius' + const angleStart = findKwArgWithIndex(ARG_ANGLE_START, callExp) + const angleEnd = findKwArgWithIndex(ARG_ANGLE_END, callExp) + const radius = findKwArgWithIndex(ARG_RADIUS, callExp) + if (!radius || !angleStart || !angleEnd) return [] + const pathToAngleStartArg: PathToNode = [ + ...pathToBase, + [angleStart.argIndex, ARG_INDEX_FIELD], + ['arg', LABELED_ARG_FIELD], + ] + returnVal.push( + constrainInfo( + 'angle', + isNotLiteralArrayOrStatic(angleStart.expr), + code.slice(angleStart.expr.start, angleStart.expr.end), + 'arc', + { type: 'labeledArg', key: ARG_ANGLE_START }, + topLevelRange(angleStart.expr.start, angleStart.expr.end), + pathToAngleStartArg + ) ) - - const angleStartProp = firstArg.properties.find( - (prop) => - prop.type === 'ObjectProperty' && - prop.key.type === 'Identifier' && - prop.key.name === 'angleStart' + const pathToAngleEndArg: PathToNode = [ + ...pathToBase, + [angleEnd.argIndex, ARG_INDEX_FIELD], + ['arg', LABELED_ARG_FIELD], + ] + returnVal.push( + constrainInfo( + 'angle', + isNotLiteralArrayOrStatic(angleEnd.expr), + code.slice(angleEnd.expr.start, angleEnd.expr.end), + 'arc', + { type: 'labeledArg', key: ARG_ANGLE_END }, + topLevelRange(angleEnd.expr.start, angleEnd.expr.end), + pathToAngleEndArg + ) ) - - const angleEndProp = firstArg.properties.find( - (prop) => - prop.type === 'ObjectProperty' && - prop.key.type === 'Identifier' && - prop.key.name === 'angleEnd' + const pathToRadiusArg: PathToNode = [ + ...pathToBase, + [radius.argIndex, ARG_INDEX_FIELD], + ['arg', LABELED_ARG_FIELD], + ] + returnVal.push( + constrainInfo( + 'angle', + isNotLiteralArrayOrStatic(radius.expr), + code.slice(radius.expr.start, radius.expr.end), + 'arc', + { type: 'labeledArg', key: ARG_RADIUS }, + topLevelRange(radius.expr.start, radius.expr.end), + pathToRadiusArg + ) ) - if (!radiusProp || !angleStartProp || !angleEndProp) return [] - - const pathToFirstArg: PathToNode = [ - ...pathToNode, - ['arguments', 'CallExpression'], - [0, 'index'], - ] - - const pathToRadiusProp: PathToNode = [ - ...pathToFirstArg, - ['properties', 'ObjectExpression'], - [firstArg.properties.indexOf(radiusProp), 'index'], - ] - - const pathToAngleStartProp: PathToNode = [ - ...pathToFirstArg, - ['properties', 'ObjectExpression'], - [firstArg.properties.indexOf(angleStartProp), 'index'], - ] - - const pathToAngleEndProp: PathToNode = [ - ...pathToFirstArg, - ['properties', 'ObjectExpression'], - [firstArg.properties.indexOf(angleEndProp), 'index'], - ] - - const pathToRadiusValue: PathToNode = [ - ...pathToRadiusProp, - ['value', 'ObjectProperty'], - ] - - const pathToAngleStartValue: PathToNode = [ - ...pathToAngleStartProp, - ['value', 'ObjectProperty'], - ] - - const pathToAngleEndValue: PathToNode = [ - ...pathToAngleEndProp, - ['value', 'ObjectProperty'], - ] - const constraints: ConstrainInfo[] = [ constrainInfo( 'radius', - isNotLiteralArrayOrStatic(radiusProp.value), - code.slice(radiusProp.value.start, radiusProp.value.end), + isNotLiteralArrayOrStatic(radius.expr), + code.slice(radius.expr.start, radius.expr.end), 'arc', 'radius', - topLevelRange(radiusProp.value.start, radiusProp.value.end), - pathToRadiusValue + topLevelRange(radius.expr.start, radius.expr.end), + pathToRadiusArg ), constrainInfo( 'angle', - isNotLiteralArrayOrStatic(angleStartProp.value), - code.slice(angleStartProp.value.start, angleStartProp.value.end), + isNotLiteralArrayOrStatic(angleStart.expr), + code.slice(angleStart.expr.start, angleStart.expr.end), 'arc', 'angleStart', - topLevelRange(angleStartProp.value.start, angleStartProp.value.end), - pathToAngleStartValue + topLevelRange(angleStart.expr.start, angleStart.expr.end), + pathToAngleStartArg ), constrainInfo( 'angle', - isNotLiteralArrayOrStatic(angleEndProp.value), - code.slice(angleEndProp.value.start, angleEndProp.value.end), + isNotLiteralArrayOrStatic(angleEnd.expr), + code.slice(angleEnd.expr.start, angleEnd.expr.end), 'arc', 'angleEnd', - topLevelRange(angleEndProp.value.start, angleEndProp.value.end), - pathToAngleEndValue + topLevelRange(angleEnd.expr.start, angleEnd.expr.end), + pathToAngleEndArg ), ] return constraints }, } -export const arcTo: SketchLineHelper = { +export const arcTo: SketchLineHelperKw = { add: ({ node, variables, @@ -1702,9 +1681,9 @@ export const arcTo: SketchLineHelper = { const { node: pipe } = nodeMeta // p1 is the start point (from the previous segment) - // p2 is the interior point + // p2 is the interiorAbsolute point // p3 is the end point - const interior = createArrayExpression([ + const interiorAbsolute = createArrayExpression([ createLiteral(roundOff(p2[0], 2)), createLiteral(roundOff(p2[1], 2)), ]) @@ -1718,47 +1697,20 @@ export const arcTo: SketchLineHelper = { const result = replaceExistingCallback([ { type: 'objectProperty', - key: 'interior' as InputArgKeys, + key: 'interiorAbsolute', argType: 'xAbsolute', - expr: createLiteral(0) as any, // This is a workaround, the actual value will be set later + expr: createLiteral(0), // This is a workaround, the actual value will be set later }, { type: 'objectProperty', - key: 'end' as InputArgKeys, + key: 'endAbsolute', argType: 'yAbsolute', - expr: createLiteral(0) as any, // This is a workaround, the actual value will be set later + expr: createLiteral(0), // This is a workaround, the actual value will be set later }, ]) if (err(result)) return result const { callExp, valueUsedInTransform } = result - // Now manually update the object properties - if ( - callExp.type === 'CallExpression' && - callExp.arguments[0]?.type === 'ObjectExpression' - ) { - const objExp = callExp.arguments[0] - const interiorProp = objExp.properties.find( - (p) => - p.type === 'ObjectProperty' && - p.key.type === 'Identifier' && - p.key.name === 'interior' - ) - const endProp = objExp.properties.find( - (p) => - p.type === 'ObjectProperty' && - p.key.type === 'Identifier' && - p.key.name === 'end' - ) - - if (interiorProp && interiorProp.type === 'ObjectProperty') { - interiorProp.value = interior - } - if (endProp && endProp.type === 'ObjectProperty') { - endProp.value = end - } - } - const { index: callIndex } = splitPathAtPipeExpression(pathToNode) pipe.body[callIndex] = callExp @@ -1769,20 +1721,15 @@ export const arcTo: SketchLineHelper = { 0, pathToNode.findIndex(([_, type]) => type === 'PipeExpression') + 1 ), - [pipe.body.length - 1, 'CallExpression'], + [pipe.body.length - 1, 'CallExpressionKw'], ], valueUsedInTransform, } } - const objExp = createObjectExpression({ - interior, - end, - }) - - const newLine = createCallExpression('arcTo', [ - objExp, - createPipeSubstitution(), + const newLine = createCallExpressionStdLibKw('arc', null, [ + createLabeledArg(ARG_INTERIOR_ABSOLUTE, interiorAbsolute), + createLabeledArg(ARG_END_ABSOLUTE, end), ]) if (spliceBetween) { @@ -1807,7 +1754,7 @@ export const arcTo: SketchLineHelper = { pathToNode.findIndex(([key, _]) => key === 'init') + 1 ), ['body', 'PipeExpression'], - [1, 'CallExpression'], + [1, 'CallExpressionKw'], ], } } @@ -1819,7 +1766,7 @@ export const arcTo: SketchLineHelper = { 0, pathToNode.findIndex(([_, type]) => type === 'PipeExpression') + 1 ), - [pipe.body.length - 1, 'CallExpression'], + [pipe.body.length - 1, 'CallExpressionKw'], ], } }, @@ -1828,16 +1775,14 @@ export const arcTo: SketchLineHelper = { const { p2, p3 } = input const _node = { ...node } - const nodeMeta = getNodeFromPath(_node, pathToNode) + const nodeMeta = getNodeFromPath(_node, pathToNode) if (err(nodeMeta)) return nodeMeta const { node: callExpression } = nodeMeta - // Update the first argument which should be an object with interior and end properties - const firstArg = callExpression.arguments?.[0] - if (!firstArg) return new Error('Missing first argument in arcTo') + // Update the first argument which should be an object with interiorAbsolute and end properties - const interiorPoint = createArrayExpression([ + const interiorAbsolutePoint = createArrayExpression([ createLiteral(roundOff(p2[0], 2)), createLiteral(roundOff(p2[1], 2)), ]) @@ -1847,77 +1792,56 @@ export const arcTo: SketchLineHelper = { createLiteral(roundOff(p3[1], 2)), ]) - mutateObjExpProp(firstArg, interiorPoint, 'interior') - mutateObjExpProp(firstArg, endPoint, 'end') + mutateKwArg(ARG_INTERIOR_ABSOLUTE, callExpression, interiorAbsolutePoint) + mutateKwArg(ARG_END_ABSOLUTE, callExpression, endPoint) return { modifiedAst: _node, pathToNode, } }, - getTag: getTag(), - addTag: addTag(), + getTag: getTagKwArg(), + addTag: addTagKw(), getConstraintInfo: (callExp, code, pathToNode, filterValue) => { - if (callExp.type !== 'CallExpression') return [] + if (callExp.type !== 'CallExpressionKw') return [] const args = callExp.arguments if (args.length < 1) return [] - const firstArg = args[0] - if (firstArg.type !== 'ObjectExpression') return [] - - // Find interior and end properties - const interiorProp = firstArg.properties.find( - (prop) => - prop.type === 'ObjectProperty' && - prop.key.type === 'Identifier' && - prop.key.name === 'interior' + // Find interiorAbsolute and end properties + const interiorAbsoluteProp = findKwArgWithIndex( + ARG_INTERIOR_ABSOLUTE, + callExp ) + const endProp = findKwArgWithIndex(ARG_END_ABSOLUTE, callExp) - const endProp = firstArg.properties.find( - (prop) => - prop.type === 'ObjectProperty' && - prop.key.type === 'Identifier' && - prop.key.name === 'end' - ) - - if (!interiorProp || !endProp) return [] + if (!interiorAbsoluteProp || !endProp) return [] if ( - interiorProp.value.type !== 'ArrayExpression' || - endProp.value.type !== 'ArrayExpression' + interiorAbsoluteProp.expr.type !== 'ArrayExpression' || + endProp.expr.type !== 'ArrayExpression' ) return [] - const interiorArr = interiorProp.value - const endArr = endProp.value + const interiorAbsoluteArr = interiorAbsoluteProp.expr + const endArr = endProp.expr - if (interiorArr.elements.length < 2 || endArr.elements.length < 2) return [] + if (interiorAbsoluteArr.elements.length < 2 || endArr.elements.length < 2) + return [] - const pathToFirstArg: PathToNode = [ + const pathToBase: PathToNode = [ ...pathToNode, - ['arguments', 'CallExpression'], - [0, 'index'], - ] - - const pathToInteriorProp: PathToNode = [ - ...pathToFirstArg, - ['properties', 'ObjectExpression'], - [firstArg.properties.indexOf(interiorProp), 'index'], - ] - - const pathToEndProp: PathToNode = [ - ...pathToFirstArg, - ['properties', 'ObjectExpression'], - [firstArg.properties.indexOf(endProp), 'index'], + ['arguments', 'CallExpressionKw'], ] const pathToInteriorValue: PathToNode = [ - ...pathToInteriorProp, - ['value', 'ObjectProperty'], + ...pathToBase, + [interiorAbsoluteProp.argIndex, ARG_INDEX_FIELD], + ['arg', LABELED_ARG_FIELD], ] const pathToEndValue: PathToNode = [ - ...pathToEndProp, - ['value', 'ObjectProperty'], + ...pathToBase, + [endProp.argIndex, ARG_INDEX_FIELD], + ['arg', LABELED_ARG_FIELD], ] const pathToInteriorX: PathToNode = [ @@ -1947,49 +1871,53 @@ export const arcTo: SketchLineHelper = { const constraints: (ConstrainInfo & { filterValue: string })[] = [ { type: 'xAbsolute', - isConstrained: isNotLiteralArrayOrStatic(interiorArr.elements[0]), - value: code.slice( - interiorArr.elements[0].start, - interiorArr.elements[0].end + isConstrained: isNotLiteralArrayOrStatic( + interiorAbsoluteArr.elements[0] ), - stdLibFnName: 'arcTo', + value: code.slice( + interiorAbsoluteArr.elements[0].start, + interiorAbsoluteArr.elements[0].end + ), + stdLibFnName: 'arc', argPosition: { type: 'arrayInObject', - key: 'interior', + key: 'interiorAbsolute', index: 0, }, sourceRange: topLevelRange( - interiorArr.elements[0].start, - interiorArr.elements[0].end + interiorAbsoluteArr.elements[0].start, + interiorAbsoluteArr.elements[0].end ), pathToNode: pathToInteriorX, - filterValue: 'interior', + filterValue: 'interiorAbsolute', }, { type: 'yAbsolute', - isConstrained: isNotLiteralArrayOrStatic(interiorArr.elements[1]), - value: code.slice( - interiorArr.elements[1].start, - interiorArr.elements[1].end + isConstrained: isNotLiteralArrayOrStatic( + interiorAbsoluteArr.elements[1] ), - stdLibFnName: 'arcTo', + value: code.slice( + interiorAbsoluteArr.elements[1].start, + interiorAbsoluteArr.elements[1].end + ), + stdLibFnName: 'arc', argPosition: { type: 'arrayInObject', - key: 'interior', + key: 'interiorAbsolute', index: 1, }, sourceRange: topLevelRange( - interiorArr.elements[1].start, - interiorArr.elements[1].end + interiorAbsoluteArr.elements[1].start, + interiorAbsoluteArr.elements[1].end ), pathToNode: pathToInteriorY, - filterValue: 'interior', + filterValue: 'interiorAbsolute', }, { type: 'xAbsolute', isConstrained: isNotLiteralArrayOrStatic(endArr.elements[0]), value: code.slice(endArr.elements[0].start, endArr.elements[0].end), - stdLibFnName: 'arcTo', + stdLibFnName: 'arc', argPosition: { type: 'arrayInObject', key: 'end', @@ -2006,7 +1934,7 @@ export const arcTo: SketchLineHelper = { type: 'yAbsolute', isConstrained: isNotLiteralArrayOrStatic(endArr.elements[1]), value: code.slice(endArr.elements[1].start, endArr.elements[1].end), - stdLibFnName: 'arcTo', + stdLibFnName: 'arc', argPosition: { type: 'arrayInObject', key: 'end', @@ -3069,12 +2997,13 @@ export const updateStartProfileAtArgs: SketchLineHelper['updateArgs'] = ({ } } -export const sketchLineHelperMap: { [key: string]: SketchLineHelper } = { - arc, - arcTo, -} as const +// TODO: Just remove this. +export const sketchLineHelperMap: { [key: string]: SketchLineHelper } = + {} as const export const sketchLineHelperMapKw: { [key: string]: SketchLineHelperKw } = { + arc, + arcTo, line, lineTo, circleThreePoint, @@ -3112,10 +3041,7 @@ export function changeSketchArguments( sourceRangeOrPath.type === 'sourceRange' ? getNodePathFromSourceRange(_node, sourceRangeOrPath.sourceRange) : sourceRangeOrPath.pathToNode - const nodeMeta = getNodeFromPath( - _node, - thePath - ) + const nodeMeta = getNodeFromPath(_node, thePath) if (err(nodeMeta)) return nodeMeta const { node: callExpression, shallowPath } = nodeMeta @@ -3173,6 +3099,12 @@ export function fnNameToTooltip( const isAbsolute = argLabels.findIndex((label) => label === ARG_END_ABSOLUTE) >= 0 switch (fnName) { + case 'arc': { + const isArc = argLabels.some((label) => + [ARG_RADIUS, ARG_ANGLE_START, ARG_ANGLE_END].includes(label) + ) + return isArc ? 'arc' : 'arcTo' + } case 'line': return isAbsolute ? 'lineTo' : 'line' case 'xLine': @@ -3644,40 +3576,6 @@ type addTagFn = ( a: AddTagInfo ) => { modifiedAst: Node; tag: string } | Error -function addTag(tagIndex = 2): addTagFn { - return ({ node, pathToNode }) => { - const _node = { ...node } - const callExpr = getNodeFromPath>( - _node, - pathToNode, - 'CallExpression' - ) - if (err(callExpr)) return callExpr - - const { node: primaryCallExp } = callExpr - - // Tag is always 3rd expression now, using arg index feels brittle - // but we can come up with a better way to identify tag later. - const thirdArg = primaryCallExp.arguments?.[tagIndex] - const tagDeclarator = - thirdArg || - (createTagDeclarator(findUniqueName(_node, 'seg', 2)) as TagDeclarator) - const isTagExisting = !!thirdArg - if (!isTagExisting) { - primaryCallExp.arguments[tagIndex] = tagDeclarator - } - if ('value' in tagDeclarator) { - // Now TypeScript knows tagDeclarator has a value property - return { - modifiedAst: _node, - tag: String(tagDeclarator.value), - } - } else { - return new Error('Unable to assign tag without value') - } - } -} - function addTagKw(): addTagFn { return ({ node, pathToNode }) => { const _node = { ...node } @@ -3885,7 +3783,7 @@ export const getCircle = ( const firstArg = callExp.arguments[0] if (firstArg.type === 'LabeledArg') { let centerInfo = findKwArgWithIndex(ARG_CIRCLE_CENTER, callExp) - let radiusInfo = findKwArgWithIndex(ARG_CIRCLE_RADIUS, callExp) + let radiusInfo = findKwArgWithIndex(ARG_RADIUS, callExp) let tagInfo = findKwArgWithIndex(ARG_TAG, callExp) if (centerInfo && radiusInfo) { if (centerInfo.expr?.type === 'ArrayExpression' && radiusInfo.expr) { @@ -3923,6 +3821,24 @@ export const getAngledLineThatIntersects = ( return { val: [angle, intersectTag, offset], tag } } +export const getArc = ( + callExp: CallExpressionKw +): + | { + val: [Expr, Expr, Expr] + tag?: Expr + } + | Error => { + const angleStart = findKwArg(ARG_ANGLE_START, callExp) + const angleEnd = findKwArg(ARG_ANGLE_END, callExp) + const radius = findKwArg(ARG_RADIUS, callExp) + if (!angleStart || !angleEnd || !radius) { + return new Error(`arc call needs angleStart, angleEnd, and radius args`) + } + const tag = findKwArg(ARG_TAG, callExp) + return { val: [angleStart, angleEnd, radius], tag } +} + /** Given a line call, return whether it's using absolute or relative end. */ @@ -3952,6 +3868,7 @@ export function isAbsoluteLine(lineCall: CallExpressionKw): boolean | Error { `${name} call has neither ${ARG_END} nor ${ARG_END_ABSOLUTE} params` ) case 'angledLineThatIntersects': + case 'arc': case 'circle': case 'circleThreePoint': return false @@ -3988,6 +3905,8 @@ export function getArgForEnd(lineCall: CallExpressionKw): } case 'angledLineThatIntersects': return getAngledLineThatIntersects(lineCall) + case 'arc': + return getArc(lineCall) case 'yLine': case 'xLine': { const arg = findKwArgAny(DETERMINING_ARGS, lineCall) diff --git a/src/lang/std/sketchcombos.ts b/src/lang/std/sketchcombos.ts index c931590fb..ea5403f0e 100644 --- a/src/lang/std/sketchcombos.ts +++ b/src/lang/std/sketchcombos.ts @@ -39,6 +39,7 @@ import { fnNameToTooltip, getAngledLine, getAngledLineThatIntersects, + getArc, getArgForEnd, getCircle, getConstraintInfo, @@ -1407,11 +1408,8 @@ export function getRemoveConstraintsTransform( } if ( - (sketchFnExp.type === 'CallExpressionKw' && - sketchFnExp.callee.name.name === 'circleThreePoint') || - (sketchFnExp.type === 'CallExpression' && - (sketchFnExp.callee.name.name === 'arcTo' || - sketchFnExp.callee.name.name === 'arc')) + sketchFnExp.type === 'CallExpressionKw' && + sketchFnExp.callee.name.name === 'circleThreePoint' ) { return false } @@ -2344,6 +2342,9 @@ export function getConstraintLevelFromSourceRange( if (name === 'angledLineThatIntersects') { return getAngledLineThatIntersects(nodeMeta.node) } + if (name === 'arc') { + return getArc(nodeMeta.node) + } const arg = findKwArgAny(DETERMINING_ARGS, nodeMeta.node) if (arg === undefined) { const argStr = nodeMeta.node.arguments.map((a) => a.label.name) diff --git a/src/lang/std/stdTypes.ts b/src/lang/std/stdTypes.ts index 4ac1ed959..4f7e3c960 100644 --- a/src/lang/std/stdTypes.ts +++ b/src/lang/std/stdTypes.ts @@ -4,6 +4,7 @@ import type { ARG_END_ABSOLUTE, ARG_END_ABSOLUTE_X, ARG_END_ABSOLUTE_Y, + ARG_INTERIOR_ABSOLUTE, ARG_LENGTH, ARG_LENGTH_X, ARG_LENGTH_Y, @@ -116,7 +117,7 @@ export type InputArgKeys = | 'p2' | 'p3' | 'end' - | 'interior' + | typeof ARG_INTERIOR_ABSOLUTE | typeof ARG_END_ABSOLUTE | typeof ARG_END_ABSOLUTE_X | typeof ARG_END_ABSOLUTE_Y