Compare commits
17 Commits
nrc-std-ax
...
kcl-56
Author | SHA1 | Date | |
---|---|---|---|
0bdc50c78f | |||
57d78b6094 | |||
db5ce7ba85 | |||
51c16d0048 | |||
6532b23f1c | |||
49304b9ecd | |||
358b34de4c | |||
9973e5fde3 | |||
36875e05fd | |||
42123383bb | |||
ef4c606ed1 | |||
1ebb73b935 | |||
b57d31c0e7 | |||
678ebbc310 | |||
cc2efd316c | |||
d1f811f91d | |||
7ca3afff9f |
12
.eslintrc
12
.eslintrc
@ -20,9 +20,20 @@
|
||||
"plugin:react-hooks/recommended"
|
||||
],
|
||||
"rules": {
|
||||
"no-array-constructor": "off", // This is wrong; use the @typescript-eslint one instead.
|
||||
"@typescript-eslint/no-array-constructor": "error",
|
||||
"@typescript-eslint/no-array-delete": "error",
|
||||
"@typescript-eslint/no-duplicate-enum-values": "error",
|
||||
"@typescript-eslint/no-duplicate-type-constituents": "error",
|
||||
"@typescript-eslint/no-empty-object-type": "error",
|
||||
"@typescript-eslint/no-floating-promises": "error",
|
||||
"no-implied-eval": "off", // This is wrong; use the @typescript-eslint one instead.
|
||||
"@typescript-eslint/no-implied-eval": "error",
|
||||
"@typescript-eslint/no-misused-promises": "error",
|
||||
"@typescript-eslint/no-namespace": "error",
|
||||
"@typescript-eslint/no-unnecessary-type-assertion": "error",
|
||||
"@typescript-eslint/no-unnecessary-type-constraint": "error",
|
||||
"no-unused-vars": "off", // This is wrong; use the @typescript-eslint one instead.
|
||||
"@typescript-eslint/no-unused-vars": ["error", {
|
||||
"varsIgnorePattern": "^_",
|
||||
"argsIgnorePattern": "^_",
|
||||
@ -30,6 +41,7 @@
|
||||
"vars": "all",
|
||||
"args": "none"
|
||||
}],
|
||||
"@typescript-eslint/prefer-as-const": "warn",
|
||||
"jsx-a11y/click-events-have-key-events": "off",
|
||||
"jsx-a11y/no-autofocus": "off",
|
||||
"jsx-a11y/no-noninteractive-element-interactions": "off",
|
||||
|
144
.github/workflows/static-analysis.yml
vendored
144
.github/workflows/static-analysis.yml
vendored
@ -28,43 +28,57 @@ jobs:
|
||||
- run: yarn fmt-check
|
||||
|
||||
yarn-build-wasm:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
# Build the wasm blob once on the fastest runner.
|
||||
runs-on: runs-on=${{ github.run_id }}/family=i7ie.2xlarge/image=ubuntu22-full-x64
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
|
||||
- name: Install dependencies
|
||||
run: yarn install
|
||||
|
||||
- name: Use correct Rust toolchain
|
||||
shell: bash
|
||||
run: |
|
||||
[ -e rust-toolchain.toml ] || cp rust/rust-toolchain.toml ./
|
||||
|
||||
- name: Install rust
|
||||
uses: actions-rust-lang/setup-rust-toolchain@v1
|
||||
with:
|
||||
cache: false # Configured below.
|
||||
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
|
||||
yarn-tsc:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
- run: yarn --cwd ./rust/kcl-language-server --modules-folder node_modules install
|
||||
- uses: Swatinem/rust-cache@v2
|
||||
- name: Rust Cache
|
||||
uses: Swatinem/rust-cache@v2
|
||||
with:
|
||||
workspaces: './rust'
|
||||
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
- run: yarn tsc
|
||||
- name: Build Wasm
|
||||
shell: bash
|
||||
run: yarn build:wasm
|
||||
|
||||
yarn-lint:
|
||||
runs-on: ubuntu-22.04
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: prepared-wasm
|
||||
path: |
|
||||
rust/kcl-wasm-lib/pkg/kcl_wasm_lib*
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: prepared-ts-rs-bindings
|
||||
path: |
|
||||
rust/kcl-lib/bindings/*
|
||||
|
||||
yarn-tsc:
|
||||
runs-on: ubuntu-latest
|
||||
needs: yarn-build-wasm
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
@ -73,7 +87,53 @@ jobs:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
- run: yarn --cwd ./rust/kcl-language-server --modules-folder node_modules install
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Copy prepared wasm
|
||||
run: |
|
||||
ls -R prepared-wasm
|
||||
cp prepared-wasm/kcl_wasm_lib_bg.wasm public
|
||||
mkdir rust/kcl-wasm-lib/pkg
|
||||
cp prepared-wasm/kcl_wasm_lib* rust/kcl-wasm-lib/pkg
|
||||
|
||||
- name: Copy prepared ts-rs bindings
|
||||
run: |
|
||||
ls -R prepared-ts-rs-bindings
|
||||
mkdir rust/kcl-lib/bindings
|
||||
cp -r prepared-ts-rs-bindings/* rust/kcl-lib/bindings/
|
||||
|
||||
- run: yarn tsc
|
||||
|
||||
yarn-lint:
|
||||
runs-on: ubuntu-latest
|
||||
needs: yarn-build-wasm
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'yarn'
|
||||
- run: yarn install
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Copy prepared wasm
|
||||
run: |
|
||||
ls -R prepared-wasm
|
||||
cp prepared-wasm/kcl_wasm_lib_bg.wasm public
|
||||
mkdir rust/kcl-wasm-lib/pkg
|
||||
cp prepared-wasm/kcl_wasm_lib* rust/kcl-wasm-lib/pkg
|
||||
|
||||
- name: Copy prepared ts-rs bindings
|
||||
run: |
|
||||
ls -R prepared-ts-rs-bindings
|
||||
mkdir rust/kcl-lib/bindings
|
||||
cp -r prepared-ts-rs-bindings/* rust/kcl-lib/bindings/
|
||||
|
||||
- run: yarn lint
|
||||
|
||||
python-codespell:
|
||||
@ -91,6 +151,7 @@ jobs:
|
||||
|
||||
yarn-unit-test-kcl-samples:
|
||||
runs-on: ubuntu-latest
|
||||
needs: yarn-build-wasm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@ -103,7 +164,22 @@ jobs:
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Copy prepared wasm
|
||||
run: |
|
||||
ls -R prepared-wasm
|
||||
cp prepared-wasm/kcl_wasm_lib_bg.wasm public
|
||||
mkdir rust/kcl-wasm-lib/pkg
|
||||
cp prepared-wasm/kcl_wasm_lib* rust/kcl-wasm-lib/pkg
|
||||
|
||||
- name: Copy prepared ts-rs bindings
|
||||
run: |
|
||||
ls -R prepared-ts-rs-bindings
|
||||
mkdir rust/kcl-lib/bindings
|
||||
cp -r prepared-ts-rs-bindings/* rust/kcl-lib/bindings/
|
||||
|
||||
- run: yarn simpleserver:bg
|
||||
if: ${{ github.event_name != 'release' && github.event_name != 'schedule' }}
|
||||
@ -120,6 +196,7 @@ jobs:
|
||||
|
||||
yarn-unit-test:
|
||||
runs-on: ubuntu-latest
|
||||
needs: yarn-build-wasm
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
@ -132,7 +209,22 @@ jobs:
|
||||
- uses: taiki-e/install-action@37bdc826eaedac215f638a96472df572feab0f9b
|
||||
with:
|
||||
tool: wasm-pack
|
||||
- run: yarn build:wasm
|
||||
|
||||
- name: Download all artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Copy prepared wasm
|
||||
run: |
|
||||
ls -R prepared-wasm
|
||||
cp prepared-wasm/kcl_wasm_lib_bg.wasm public
|
||||
mkdir rust/kcl-wasm-lib/pkg
|
||||
cp prepared-wasm/kcl_wasm_lib* rust/kcl-wasm-lib/pkg
|
||||
|
||||
- name: Copy prepared ts-rs bindings
|
||||
run: |
|
||||
ls -R prepared-ts-rs-bindings
|
||||
mkdir rust/kcl-lib/bindings
|
||||
cp -r prepared-ts-rs-bindings/* rust/kcl-lib/bindings/
|
||||
|
||||
- run: yarn simpleserver:bg
|
||||
if: ${{ github.event_name != 'release' && github.event_name != 'schedule' }}
|
||||
|
4
Makefile
4
Makefile
@ -37,7 +37,7 @@ build-web: public/kcl_wasm_lib_bg.wasm build/index.html
|
||||
build-desktop: public/kcl_wasm_lib_bg.wasm .vite/build/main.js
|
||||
|
||||
public/kcl_wasm_lib_bg.wasm: $(CARGO_SOURCES)$(RUST_SOURCES)
|
||||
yarn build:wasm
|
||||
yarn build:wasm:dev
|
||||
|
||||
build/index.html: $(REACT_SOURCES) $(TYPESCRIPT_SOURCES) $(VITE_SOURCES)
|
||||
yarn build:local
|
||||
@ -99,7 +99,7 @@ test-e2e-web: install build-web ## Run the web e2e tests
|
||||
|
||||
.PHONY: test-e2e-desktop
|
||||
test-e2e-desktop: install build-desktop ## Run the desktop e2e tests
|
||||
yarn test:playwright:electron --workers=$(E2E_WORKERS) --max-failures=$(E2E_FAILURES) --grep=$(E2E_GREP)
|
||||
yarn test:playwright:electron --workers=$(E2E_WORKERS) --max-failures=$(E2E_FAILURES) --grep="$(E2E_GREP)"
|
||||
|
||||
###############################################################################
|
||||
# CLEAN
|
||||
|
@ -9,13 +9,9 @@ layout: manual
|
||||
|
||||
### `std`
|
||||
|
||||
- [`HALF_TURN`](/docs/kcl/consts/std-HALF_TURN)
|
||||
- [`QUARTER_TURN`](/docs/kcl/consts/std-QUARTER_TURN)
|
||||
- [`THREE_QUARTER_TURN`](/docs/kcl/consts/std-THREE_QUARTER_TURN)
|
||||
- [`XY`](/docs/kcl/consts/std-XY)
|
||||
- [`XZ`](/docs/kcl/consts/std-XZ)
|
||||
- [`YZ`](/docs/kcl/consts/std-YZ)
|
||||
- [`ZERO`](/docs/kcl/consts/std-ZERO)
|
||||
|
||||
### `std::math`
|
||||
|
||||
@ -23,3 +19,10 @@ layout: manual
|
||||
- [`PI`](/docs/kcl/consts/std-math-PI)
|
||||
- [`TAU`](/docs/kcl/consts/std-math-TAU)
|
||||
|
||||
### `std::turns`
|
||||
|
||||
- [`HALF_TURN`](/docs/kcl/consts/std-turns-HALF_TURN)
|
||||
- [`QUARTER_TURN`](/docs/kcl/consts/std-turns-QUARTER_TURN)
|
||||
- [`THREE_QUARTER_TURN`](/docs/kcl/consts/std-turns-THREE_QUARTER_TURN)
|
||||
- [`ZERO`](/docs/kcl/consts/std-turns-ZERO)
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "std::HALF_TURN"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::HALF_TURN: number(deg) = 180deg
|
||||
```
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "std::QUARTER_TURN"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::QUARTER_TURN: number(deg) = 90deg
|
||||
```
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "std::THREE_QUARTER_TURN"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::THREE_QUARTER_TURN: number(deg) = 270deg
|
||||
```
|
||||
|
||||
|
@ -1,15 +0,0 @@
|
||||
---
|
||||
title: "std::ZERO"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::ZERO: number = 0
|
||||
```
|
||||
|
||||
|
15
docs/kcl/consts/std-turns-HALF_TURN.md
Normal file
15
docs/kcl/consts/std-turns-HALF_TURN.md
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "std::turns::HALF_TURN"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::turns::HALF_TURN: number(deg) = 180deg
|
||||
```
|
||||
|
||||
|
15
docs/kcl/consts/std-turns-QUARTER_TURN.md
Normal file
15
docs/kcl/consts/std-turns-QUARTER_TURN.md
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "std::turns::QUARTER_TURN"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::turns::QUARTER_TURN: number(deg) = 90deg
|
||||
```
|
||||
|
||||
|
15
docs/kcl/consts/std-turns-THREE_QUARTER_TURN.md
Normal file
15
docs/kcl/consts/std-turns-THREE_QUARTER_TURN.md
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "std::turns::THREE_QUARTER_TURN"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::turns::THREE_QUARTER_TURN: number(deg) = 270deg
|
||||
```
|
||||
|
||||
|
15
docs/kcl/consts/std-turns-ZERO.md
Normal file
15
docs/kcl/consts/std-turns-ZERO.md
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
title: "std::turns::ZERO"
|
||||
excerpt: ""
|
||||
layout: manual
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```js
|
||||
std::turns::ZERO: number = 0
|
||||
```
|
||||
|
||||
|
@ -23,19 +23,15 @@ layout: manual
|
||||
* [`tag`](kcl/types/tag)
|
||||
* **std**
|
||||
* [`Face`](kcl/types/Face)
|
||||
* [`HALF_TURN`](kcl/consts/std-HALF_TURN)
|
||||
* [`Helix`](kcl/types/Helix)
|
||||
* [`Plane`](kcl/types/Plane)
|
||||
* [`Point2d`](kcl/types/Point2d)
|
||||
* [`Point3d`](kcl/types/Point3d)
|
||||
* [`QUARTER_TURN`](kcl/consts/std-QUARTER_TURN)
|
||||
* [`Sketch`](kcl/types/Sketch)
|
||||
* [`Solid`](kcl/types/Solid)
|
||||
* [`THREE_QUARTER_TURN`](kcl/consts/std-THREE_QUARTER_TURN)
|
||||
* [`XY`](kcl/consts/std-XY)
|
||||
* [`XZ`](kcl/consts/std-XZ)
|
||||
* [`YZ`](kcl/consts/std-YZ)
|
||||
* [`ZERO`](kcl/consts/std-ZERO)
|
||||
* [`abs`](kcl/abs)
|
||||
* [`acos`](kcl/acos)
|
||||
* [`angleToMatchLengthX`](kcl/angleToMatchLengthX)
|
||||
@ -146,3 +142,8 @@ layout: manual
|
||||
* [`tan`](kcl/std-math-tan)
|
||||
* **std::sketch**
|
||||
* [`circle`](kcl/std-sketch-circle)
|
||||
* **std::turns**
|
||||
* [`turns::HALF_TURN`](kcl/consts/std-turns-HALF_TURN)
|
||||
* [`turns::QUARTER_TURN`](kcl/consts/std-turns-QUARTER_TURN)
|
||||
* [`turns::THREE_QUARTER_TURN`](kcl/consts/std-turns-THREE_QUARTER_TURN)
|
||||
* [`turns::ZERO`](kcl/consts/std-turns-ZERO)
|
||||
|
@ -6,6 +6,10 @@ layout: manual
|
||||
|
||||
Rotate a solid or a sketch.
|
||||
|
||||
This is really useful for assembling parts together. You can create a part and then rotate it to the correct orientation.
|
||||
|
||||
For sketches, you can use this to rotate a sketch and then loft it with another sketch.
|
||||
|
||||
### Using Roll, Pitch, and Yaw
|
||||
|
||||
When rotating a part in 3D space, "roll," "pitch," and "yaw" refer to the three rotational axes used to describe its orientation: roll is rotation around the longitudinal axis (front-to-back), pitch is rotation around the lateral axis (wing-to-wing), and yaw is rotation around the vertical axis (up-down); essentially, it's like tilting the part on its side (roll), tipping the nose up or down (pitch), and turning it left or right (yaw).
|
||||
@ -166,7 +170,7 @@ fn square() {
|
||||
profile001 = square()
|
||||
|
||||
profile002 = square()
|
||||
|> translate(translate = [0, 0, 20])
|
||||
|> translate(x = 0, y = 0, z = 20)
|
||||
|> rotate(axis = [0, 0, 1.0], angle = 45)
|
||||
|
||||
loft([profile001, profile002])
|
||||
|
File diff suppressed because one or more lines are too long
6446
docs/kcl/std.json
6446
docs/kcl/std.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
117
e2e/playwright/boolean.spec.ts
Normal file
117
e2e/playwright/boolean.spec.ts
Normal file
@ -0,0 +1,117 @@
|
||||
import { test, expect } from './zoo-test'
|
||||
import fs from 'node:fs/promises'
|
||||
import path from 'node:path'
|
||||
|
||||
test.describe('Point and click for boolean workflows', () => {
|
||||
// Boolean operations to test
|
||||
const booleanOperations = [
|
||||
{
|
||||
name: 'union',
|
||||
code: 'union([extrude001, extrude006])',
|
||||
},
|
||||
{
|
||||
name: 'subtract',
|
||||
code: 'subtract([extrude001], tools = [extrude006])',
|
||||
},
|
||||
{
|
||||
name: 'intersect',
|
||||
code: 'intersect([extrude001, extrude006])',
|
||||
},
|
||||
] as const
|
||||
for (let i = 0; i < booleanOperations.length; i++) {
|
||||
const operation = booleanOperations[i]
|
||||
const operationName = operation.name
|
||||
const commandName = `Boolean ${
|
||||
operationName.charAt(0).toUpperCase() + operationName.slice(1)
|
||||
}`
|
||||
test(`Create boolean operation -- ${operationName}`, async ({
|
||||
context,
|
||||
homePage,
|
||||
cmdBar,
|
||||
editor,
|
||||
toolbar,
|
||||
scene,
|
||||
page,
|
||||
}) => {
|
||||
const file = await fs.readFile(
|
||||
path.resolve(
|
||||
__dirname,
|
||||
'../../',
|
||||
'./rust/kcl-lib/e2e/executor/inputs/boolean-setup-with'
|
||||
),
|
||||
'utf-8'
|
||||
)
|
||||
await context.addInitScript((file) => {
|
||||
localStorage.setItem('persistCode', file)
|
||||
}, file)
|
||||
await homePage.goToModelingScene()
|
||||
await scene.waitForExecutionDone()
|
||||
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
// Test coordinates for selection - these might need adjustment based on actual scene layout
|
||||
const cylinderPoint = { x: 592, y: 174 }
|
||||
const secondObjectPoint = { x: 683, y: 273 }
|
||||
|
||||
// Create mouse helpers for selecting objects
|
||||
const [clickFirstObject] = scene.makeMouseHelpers(
|
||||
cylinderPoint.x,
|
||||
cylinderPoint.y,
|
||||
{ steps: 10 }
|
||||
)
|
||||
const [clickSecondObject] = scene.makeMouseHelpers(
|
||||
secondObjectPoint.x,
|
||||
secondObjectPoint.y,
|
||||
{ steps: 10 }
|
||||
)
|
||||
|
||||
await test.step(`Test ${operationName} operation`, async () => {
|
||||
// Click the boolean operation button in the toolbar
|
||||
await toolbar.selectBoolean(operationName)
|
||||
|
||||
// Verify command bar is showing the right command
|
||||
await expect(cmdBar.page.getByTestId('command-name')).toContainText(
|
||||
commandName
|
||||
)
|
||||
|
||||
// Select first object in the scene, expect there to be a pixel diff from the selection color change
|
||||
await clickFirstObject({ pixelDiff: 50 })
|
||||
|
||||
// For subtract, we need to proceed to the next step before selecting the second object
|
||||
if (operationName !== 'subtract') {
|
||||
// should down shift key to select multiple objects
|
||||
await page.keyboard.down('Shift')
|
||||
}
|
||||
|
||||
// Select second object
|
||||
await clickSecondObject({ pixelDiff: 50 })
|
||||
|
||||
// Confirm the operation in the command bar
|
||||
await cmdBar.progressCmdBar()
|
||||
|
||||
if (operationName === 'union' || operationName === 'intersect') {
|
||||
await cmdBar.expectState({
|
||||
stage: 'review',
|
||||
headerArguments: {
|
||||
Solids: '2 paths',
|
||||
},
|
||||
commandName,
|
||||
})
|
||||
} else if (operationName === 'subtract') {
|
||||
await cmdBar.expectState({
|
||||
stage: 'review',
|
||||
headerArguments: {
|
||||
Tool: '1 path',
|
||||
Target: '1 path',
|
||||
},
|
||||
commandName,
|
||||
})
|
||||
}
|
||||
|
||||
await cmdBar.submit()
|
||||
|
||||
await editor.expectEditor.toContain(operation.code)
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
@ -181,6 +181,14 @@ export class ToolbarFixture {
|
||||
).toBeVisible()
|
||||
await this.page.getByTestId('dropdown-center-rectangle').click()
|
||||
}
|
||||
selectBoolean = async (operation: 'union' | 'subtract' | 'intersect') => {
|
||||
await this.page
|
||||
.getByRole('button', { name: 'caret down Union: open menu' })
|
||||
.click()
|
||||
const operationTestId = `dropdown-boolean-${operation}`
|
||||
await expect(this.page.getByTestId(operationTestId)).toBeVisible()
|
||||
await this.page.getByTestId(operationTestId).click()
|
||||
}
|
||||
|
||||
selectCircleThreePoint = async () => {
|
||||
await this.page
|
||||
|
@ -258,14 +258,6 @@ export const isErrorWhitelisted = (exception: Error) => {
|
||||
foundInSpec: 'e2e/playwright/testing-settings.spec.ts',
|
||||
},
|
||||
// TODO: fix this error in the code
|
||||
{
|
||||
name: 'TypeError',
|
||||
message: "Cannot read properties of undefined (reading 'length')",
|
||||
stack: '',
|
||||
project: 'Google Chrome',
|
||||
foundInSpec: '', // many tests are impacted by this error
|
||||
},
|
||||
// TODO: fix this error in the code
|
||||
{
|
||||
name: 'ReferenceError',
|
||||
message: '_testUtils is not defined',
|
||||
@ -273,7 +265,6 @@ export const isErrorWhitelisted = (exception: Error) => {
|
||||
project: 'Google Chrome',
|
||||
foundInSpec: 'e2e/playwright/snapshot-tests.spec.ts',
|
||||
},
|
||||
// TODO: fix this error in the code
|
||||
{
|
||||
name: 'TypeError',
|
||||
message: 'Failed to fetch',
|
||||
@ -282,14 +273,6 @@ export const isErrorWhitelisted = (exception: Error) => {
|
||||
foundInSpec: 'e2e/playwright/snapshot-tests.spec.ts',
|
||||
},
|
||||
// TODO: fix this error in the code
|
||||
{
|
||||
name: 'ReferenceError',
|
||||
message: 'originalCode is not defined',
|
||||
stack: '',
|
||||
project: 'Google Chrome',
|
||||
foundInSpec: 'e2e/playwright/onboarding-tests.spec.ts',
|
||||
},
|
||||
// TODO: fix this error in the code
|
||||
{
|
||||
name: 'ReferenceError',
|
||||
message: 'createNewVariableCheckbox is not defined',
|
||||
@ -297,6 +280,14 @@ export const isErrorWhitelisted = (exception: Error) => {
|
||||
project: 'Google Chrome',
|
||||
foundInSpec: 'e2e/playwright/testing-constraints.spec.ts',
|
||||
},
|
||||
{
|
||||
name: 'Error',
|
||||
message: 'The "path" argument must be of type string. Received undefined',
|
||||
stack:
|
||||
'Error: The "path" argument must be of type string. Received undefined',
|
||||
project: 'Google Chrome',
|
||||
foundInSpec: '', // many tests are impacted by this error
|
||||
},
|
||||
]
|
||||
|
||||
const cleanString = (str: string) => str.replace(/[`"]/g, '')
|
||||
|
@ -230,9 +230,9 @@ test.describe('Onboarding tests', () => {
|
||||
|
||||
// Override beforeEach test setup
|
||||
await context.addInitScript(
|
||||
async ({ settingsKey, settings }) => {
|
||||
async ({ settingsKey, settings, code }) => {
|
||||
// Give some initial code, so we can test that it's cleared
|
||||
localStorage.setItem('persistCode', originalCode)
|
||||
localStorage.setItem('persistCode', code)
|
||||
localStorage.setItem(settingsKey, settings)
|
||||
},
|
||||
{
|
||||
@ -240,6 +240,7 @@ test.describe('Onboarding tests', () => {
|
||||
settings: settingsToToml({
|
||||
settings: TEST_SETTINGS_ONBOARDING_EXPORT,
|
||||
}),
|
||||
code: originalCode,
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -1097,7 +1097,6 @@ openSketch = startSketchOn(XY)
|
||||
Mode: '',
|
||||
AngleStart: '',
|
||||
Revolutions: '',
|
||||
Length: '',
|
||||
Radius: '',
|
||||
CounterClockWise: '',
|
||||
},
|
||||
@ -1194,14 +1193,14 @@ openSketch = startSketchOn(XY)
|
||||
{
|
||||
selectionType: 'segment',
|
||||
testPoint: { x: 513, y: 221 },
|
||||
expectedOutput: `helix001 = helix( axis = seg01, radius = 1, length = 100, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
expectedEditedOutput: `helix001 = helix( axis = seg01, radius = 1, length = 50, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
expectedOutput: `helix001 = helix( axis = seg01, radius = 1, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
expectedEditedOutput: `helix001 = helix( axis = seg01, radius = 5, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
},
|
||||
{
|
||||
selectionType: 'sweepEdge',
|
||||
testPoint: { x: 564, y: 364 },
|
||||
expectedOutput: `helix001 = helix( axis = getOppositeEdge(seg01), radius = 1, length = 100, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
expectedEditedOutput: `helix001 = helix( axis = getOppositeEdge(seg01), radius = 1, length = 50, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
expectedOutput: `helix001 = helix( axis = getOppositeEdge(seg01), radius = 1, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
expectedEditedOutput: `helix001 = helix( axis = getOppositeEdge(seg01), radius = 5, revolutions = 20, angleStart = 0, ccw = false,)`,
|
||||
},
|
||||
]
|
||||
helixCases.map(
|
||||
@ -1244,7 +1243,6 @@ openSketch = startSketchOn(XY)
|
||||
AngleStart: '',
|
||||
Mode: '',
|
||||
CounterClockWise: '',
|
||||
Length: '',
|
||||
Radius: '',
|
||||
Revolutions: '',
|
||||
},
|
||||
@ -1261,8 +1259,6 @@ openSketch = startSketchOn(XY)
|
||||
await cmdBar.progressCmdBar()
|
||||
await page.keyboard.insertText('1')
|
||||
await cmdBar.progressCmdBar()
|
||||
await page.keyboard.insertText('100')
|
||||
await cmdBar.progressCmdBar()
|
||||
await cmdBar.expectState({
|
||||
stage: 'review',
|
||||
headerArguments: {
|
||||
@ -1271,7 +1267,6 @@ openSketch = startSketchOn(XY)
|
||||
AngleStart: '0',
|
||||
Revolutions: '20',
|
||||
Radius: '1',
|
||||
Length: '100',
|
||||
CounterClockWise: '',
|
||||
},
|
||||
commandName: 'Helix',
|
||||
@ -1292,8 +1287,8 @@ openSketch = startSketchOn(XY)
|
||||
0
|
||||
)
|
||||
await operationButton.dblclick()
|
||||
const initialInput = '100'
|
||||
const newInput = '50'
|
||||
const initialInput = '1'
|
||||
const newInput = '5'
|
||||
await cmdBar.expectState({
|
||||
commandName: 'Helix',
|
||||
stage: 'arguments',
|
||||
@ -1302,13 +1297,14 @@ openSketch = startSketchOn(XY)
|
||||
headerArguments: {
|
||||
AngleStart: '0',
|
||||
Revolutions: '20',
|
||||
Radius: '1',
|
||||
Length: initialInput,
|
||||
Radius: initialInput,
|
||||
CounterClockWise: '',
|
||||
},
|
||||
highlightedHeaderArg: 'CounterClockWise',
|
||||
})
|
||||
await page.keyboard.press('Shift+Backspace')
|
||||
await page
|
||||
.getByRole('button', { name: 'radius', exact: false })
|
||||
.click()
|
||||
await expect(cmdBar.currentArgumentInput).toBeVisible()
|
||||
await cmdBar.currentArgumentInput
|
||||
.locator('.cm-content')
|
||||
@ -1319,8 +1315,7 @@ openSketch = startSketchOn(XY)
|
||||
headerArguments: {
|
||||
AngleStart: '0',
|
||||
Revolutions: '20',
|
||||
Radius: '1',
|
||||
Length: newInput,
|
||||
Radius: newInput,
|
||||
CounterClockWise: '',
|
||||
},
|
||||
commandName: 'Helix',
|
||||
@ -1391,7 +1386,6 @@ extrude001 = extrude(profile001, length = 100)
|
||||
Mode: '',
|
||||
AngleStart: '',
|
||||
Revolutions: '',
|
||||
Length: '',
|
||||
Radius: '',
|
||||
CounterClockWise: '',
|
||||
},
|
||||
|
@ -76,11 +76,11 @@ part001 = startSketchOn(-XZ)
|
||||
|> xLine(endAbsolute = totalLen, tag = $seg03)
|
||||
|> yLine(length = -armThick, tag = $seg01)
|
||||
|> angledLineThatIntersects({
|
||||
angle = HALF_TURN,
|
||||
angle = turns::HALF_TURN,
|
||||
offset = -armThick,
|
||||
intersectTag = seg04
|
||||
}, %)
|
||||
|> angledLineToY([segAng(seg04, %) + 180, ZERO], %)
|
||||
|> angledLineToY([segAng(seg04, %) + 180, turns::ZERO], %)
|
||||
|> angledLineToY({
|
||||
angle = -bottomAng,
|
||||
to = -totalHeightHalf - armThick,
|
||||
@ -88,12 +88,12 @@ part001 = startSketchOn(-XZ)
|
||||
|> xLine(length = endAbsolute = segEndX(seg03) + 0)
|
||||
|> yLine(length = -segLen(seg01, %))
|
||||
|> angledLineThatIntersects({
|
||||
angle = HALF_TURN,
|
||||
angle = turns::HALF_TURN,
|
||||
offset = -armThick,
|
||||
intersectTag = seg02
|
||||
}, %)
|
||||
|> angledLineToY([segAng(seg02, %) + 180, -baseHeight], %)
|
||||
|> xLine(endAbsolute = ZERO)
|
||||
|> xLine(endAbsolute = turns::ZERO)
|
||||
|> close()
|
||||
|> extrude(length = 4)`
|
||||
)
|
||||
|
@ -486,13 +486,13 @@ test.describe('Testing constraints', { tag: ['@skipWin'] }, () => {
|
||||
testName: 'Add variable, selecting axis',
|
||||
addVariable: true,
|
||||
axisSelect: true,
|
||||
value: 'QUARTER_TURN - angle001',
|
||||
value: 'turns::QUARTER_TURN - angle001',
|
||||
},
|
||||
{
|
||||
testName: 'No variable, selecting axis',
|
||||
addVariable: false,
|
||||
axisSelect: true,
|
||||
value: 'QUARTER_TURN - 7',
|
||||
value: 'turns::QUARTER_TURN - 7',
|
||||
},
|
||||
] as const
|
||||
for (const { testName, addVariable, value, axisSelect } of cases) {
|
||||
@ -935,12 +935,12 @@ part002 = startSketchOn(XZ)
|
||||
test.describe('Axis & segment - no modal constraints', () => {
|
||||
const cases = [
|
||||
{
|
||||
codeAfter: `|> line(endAbsolute = [154.9, ZERO])`,
|
||||
codeAfter: `|> line(endAbsolute = [154.9, turns::ZERO])`,
|
||||
axisClick: { x: 950, y: 250 },
|
||||
constraintName: 'Snap To X',
|
||||
},
|
||||
{
|
||||
codeAfter: `|> line(endAbsolute = [ZERO, 61.34])`,
|
||||
codeAfter: `|> line(endAbsolute = [turns::ZERO, 61.34])`,
|
||||
axisClick: { x: 600, y: 150 },
|
||||
constraintName: 'Snap To Y',
|
||||
},
|
||||
|
@ -67,11 +67,11 @@ part001 = startSketchOn(-XZ)
|
||||
|> xLine(endAbsolute = totalLen, tag = $seg03)
|
||||
|> yLine(length = -armThick, tag = $seg01)
|
||||
|> angledLineThatIntersects({
|
||||
angle = HALF_TURN,
|
||||
angle = turns::HALF_TURN,
|
||||
offset = -armThick,
|
||||
intersectTag = seg04
|
||||
}, %)
|
||||
|> angledLineToY([segAng(seg04) + 180, ZERO], %)
|
||||
|> angledLineToY([segAng(seg04) + 180, turns::ZERO], %)
|
||||
|> angledLineToY({
|
||||
angle = -bottomAng,
|
||||
to = -totalHeightHalf - armThick,
|
||||
@ -79,12 +79,12 @@ part001 = startSketchOn(-XZ)
|
||||
|> xLine(endAbsolute = segEndX(seg03) + 0)
|
||||
|> yLine(length = -segLen(seg01))
|
||||
|> angledLineThatIntersects({
|
||||
angle = HALF_TURN,
|
||||
angle = turns::HALF_TURN,
|
||||
offset = -armThick,
|
||||
intersectTag = seg02
|
||||
}, %)
|
||||
|> angledLineToY([segAng(seg02) + 180, -baseHeight], %)
|
||||
|> xLine(endAbsolute = ZERO)
|
||||
|> xLine(endAbsolute = turns::ZERO)
|
||||
|> close()
|
||||
|> extrude(length = 4)`
|
||||
)
|
||||
|
@ -94,9 +94,11 @@
|
||||
"fetch:wasm": "./scripts/get-latest-wasm-bundle.sh",
|
||||
"fetch:wasm:windows": "./scripts/get-latest-wasm-bundle.ps1",
|
||||
"fetch:samples": "rm -rf public/kcl-samples* && curl -L -o public/kcl-samples.zip https://github.com/KittyCAD/kcl-samples/archive/refs/heads/achalmers/kw-args-xylineto.zip && unzip -o public/kcl-samples.zip -d public && mv public/kcl-samples-* public/kcl-samples",
|
||||
"build:wasm-dev": "yarn wasm-prep && (cd rust && wasm-pack build kcl-wasm-lib --dev --target web --out-dir pkg && cargo test -p kcl-lib export_bindings) && yarn isomorphic-copy-wasm && yarn fmt:generated",
|
||||
"build:wasm": "./scripts/build-wasm.sh",
|
||||
"build:wasm:windows": "./scripts/build-wasm.ps1",
|
||||
"build:wasm-dev": "yarn build:wasm:dev",
|
||||
"build:wasm:dev": "./scripts/build-wasm-dev.sh",
|
||||
"build:wasm:dev:windows": "./scripts/build-wasm-dev.ps1",
|
||||
"remove-importmeta": "sed -i 's/import.meta.url/window.location.origin/g' \"./rust/kcl-wasm-lib/pkg/kcl_wasm_lib.js\"; sed -i '' 's/import.meta.url/window.location.origin/g' \"./rust/kcl-wasm-lib/pkg/kcl_wasm_lib.js\" || echo \"sed for both mac and linux\"",
|
||||
"lint-fix": "eslint --fix --ext .ts --ext .tsx src e2e packages/codemirror-lsp-client/src rust/kcl-language-server/client/src",
|
||||
"lint": "eslint --max-warnings 0 --ext .ts --ext .tsx src e2e packages/codemirror-lsp-client/src rust/kcl-language-server/client/src",
|
||||
|
@ -90,7 +90,7 @@ export default class StreamDemuxer extends Queue<Uint8Array> {
|
||||
}
|
||||
|
||||
add(bytes: Uint8Array): void {
|
||||
const message = Codec.decode(bytes) as vsrpc.Message
|
||||
const message = Codec.decode<vsrpc.Message>(bytes)
|
||||
if (this.trace) {
|
||||
Tracer.server(message)
|
||||
}
|
||||
|
@ -12,7 +12,7 @@ import "car-tire.kcl" as carTire
|
||||
import lugCount from "globals.kcl"
|
||||
|
||||
carRotor
|
||||
|> translate(translate = [0, 0.5, 0])
|
||||
|> translate(x = 0, y = 0.5, z = 0)
|
||||
carWheel
|
||||
lugNut
|
||||
|> patternCircular3d(
|
||||
@ -23,5 +23,5 @@ lugNut
|
||||
rotateDuplicates = false,
|
||||
)
|
||||
brakeCaliper
|
||||
|> translate(translate = [0, 0.5, 0])
|
||||
|> translate(x = 0, y = 0.5, z = 0)
|
||||
carTire
|
||||
|
@ -19,27 +19,27 @@ import pipe from "1120t74-pipe.kcl"
|
||||
flange()
|
||||
flange()
|
||||
|> rotate(axis = [0, 1, 0], angle = 180)
|
||||
|> translate(translate = [
|
||||
0,
|
||||
0,
|
||||
flangeBackHeight * 2 + gasketThickness
|
||||
])
|
||||
|> translate(
|
||||
x = 0,
|
||||
y = 0,
|
||||
z = flangeBackHeight * 2 + gasketThickness,
|
||||
)
|
||||
|
||||
// place gasket between the flanges
|
||||
gasket()
|
||||
|> translate(translate = [
|
||||
0,
|
||||
0,
|
||||
-flangeBackHeight - gasketThickness
|
||||
])
|
||||
|> translate(
|
||||
x = 0,
|
||||
y = 0,
|
||||
z = -flangeBackHeight - gasketThickness
|
||||
)
|
||||
|
||||
// place eight washers (four front, four back)
|
||||
washer()
|
||||
|> translate(translate = [
|
||||
mountingHolePlacementDiameter / 2,
|
||||
0,
|
||||
flangeBaseThickness
|
||||
])
|
||||
|> translate(
|
||||
x = mountingHolePlacementDiameter / 2,
|
||||
y = 0,
|
||||
z = flangeBaseThickness
|
||||
)
|
||||
|> patternCircular3d(
|
||||
%,
|
||||
instances = 4,
|
||||
@ -57,11 +57,11 @@ washer()
|
||||
|
||||
// place four bolts
|
||||
bolt()
|
||||
|> translate(translate = [
|
||||
mountingHolePlacementDiameter / 2,
|
||||
0,
|
||||
flangeBaseThickness + washerThickness
|
||||
])
|
||||
|> translate(
|
||||
x = mountingHolePlacementDiameter / 2,
|
||||
y = 0,
|
||||
z = flangeBaseThickness + washerThickness,
|
||||
)
|
||||
|> rotate(roll = 90, pitch = 0, yaw = 0)
|
||||
|> patternCircular3d(
|
||||
%,
|
||||
@ -74,11 +74,11 @@ bolt()
|
||||
|
||||
// place four hex nuts
|
||||
hexNut()
|
||||
|> translate(translate = [
|
||||
mountingHolePlacementDiameter / 2,
|
||||
0,
|
||||
-(flangeBackHeight * 2 + gasketThickness + flangeBaseThickness + washerThickness + hexNutThickness)
|
||||
])
|
||||
|> translate(
|
||||
x = mountingHolePlacementDiameter / 2,
|
||||
y = 0,
|
||||
z = -(flangeBackHeight * 2 + gasketThickness + flangeBaseThickness + washerThickness + hexNutThickness),
|
||||
)
|
||||
|> patternCircular3d(
|
||||
%,
|
||||
instances = 4,
|
||||
@ -97,13 +97,11 @@ pipe()
|
||||
yaw = 0,
|
||||
)
|
||||
|> translate(
|
||||
%,
|
||||
translate = [
|
||||
0,
|
||||
0,
|
||||
flangeBaseThickness + flangeFrontHeight - 0.5
|
||||
],
|
||||
global = true,
|
||||
%,
|
||||
x = 0,
|
||||
y = 0,
|
||||
z = flangeBaseThickness + flangeFrontHeight - 0.5,
|
||||
global = true,
|
||||
)
|
||||
|
||||
pipe()
|
||||
@ -114,11 +112,9 @@ pipe()
|
||||
yaw = 0,
|
||||
)
|
||||
|> translate(
|
||||
%,
|
||||
translate = [
|
||||
0,
|
||||
0,
|
||||
-(flangeBackHeight * 2 + gasketThickness + flangeBaseThickness + flangeFrontHeight - 0.5)
|
||||
],
|
||||
global = true,
|
||||
%,
|
||||
x = 0,
|
||||
y = 0,
|
||||
z = -(flangeBackHeight * 2 + gasketThickness + flangeBaseThickness + flangeFrontHeight - 0.5),
|
||||
global = true,
|
||||
)
|
||||
|
@ -14,7 +14,7 @@ radius = 10
|
||||
depth = 30
|
||||
distanceToInsideEdge = slateWidthHalf + templateThickness + templateGap
|
||||
sketch001 = startSketchOn(XZ)
|
||||
|> startProfileAt([ZERO, depth + templateGap], %)
|
||||
|> startProfileAt([0, depth + templateGap], %)
|
||||
|> xLine(length = slateWidthHalf - radius, tag = $seg01)
|
||||
|> arc({
|
||||
angleEnd = 0,
|
||||
@ -28,7 +28,7 @@ sketch001 = startSketchOn(XZ)
|
||||
|> yLine(length = templateThickness * 2, tag = $seg08)
|
||||
|> xLine(endAbsolute = segEndX(seg02) + 0, tag = $seg05)
|
||||
|> yLine(endAbsolute = segEndY(seg01) + templateThickness, tag = $seg10)
|
||||
|> xLine(endAbsolute = ZERO, tag = $seg04)
|
||||
|> xLine(endAbsolute = 0, tag = $seg04)
|
||||
|> xLine(length = -segLen(seg04))
|
||||
|> yLine(length = -segLen(seg10))
|
||||
|> xLine(length = -segLen(seg05))
|
||||
|
@ -28,7 +28,7 @@ sketch001 = startSketchOn(XZ)
|
||||
|> yLine(endAbsolute = -templateGap * 2 - (templateDiameter / 2), tag = $seg05)
|
||||
|> xLine(endAbsolute = slateWidthHalf + templateThickness, tag = $seg04)
|
||||
|> yLine(length = -length002, tag = $seg03)
|
||||
|> xLine(endAbsolute = ZERO, tag = $seg02)
|
||||
|> xLine(endAbsolute = 0, tag = $seg02)
|
||||
// |> line(end = [7.78, 11.16])
|
||||
|> xLine(length = -segLen(seg02))
|
||||
|> yLine(length = segLen(seg03))
|
||||
|
@ -20,51 +20,36 @@ body()
|
||||
|
||||
// import the antenna
|
||||
antenna()
|
||||
|> translate(translate = [-width / 2 + .45, -0.10, height / 2])
|
||||
|> translate(x = -width / 2 + .45, y = -0.10, z = height / 2)
|
||||
|
||||
// import the case
|
||||
case()
|
||||
|> translate(translate = [0, -1, 0])
|
||||
|> translate(x = 0, y = -1, z = 0)
|
||||
|
||||
// import the talk button
|
||||
talkButton()
|
||||
|> translate(translate = [width / 2, -thickness / 2, .5])
|
||||
|> translate(x = width / 2, y = -thickness / 2, z = .5)
|
||||
|
||||
// import the frequency knob
|
||||
knob()
|
||||
|> translate(translate = [
|
||||
width / 2 - 0.70,
|
||||
-thickness / 2,
|
||||
height / 2
|
||||
])
|
||||
|> translate(
|
||||
x = width / 2 - 0.70,
|
||||
y = -thickness / 2,
|
||||
z = height / 2
|
||||
)
|
||||
|
||||
// import the buttons
|
||||
button()
|
||||
|> translate(translate = [
|
||||
-(screenWidth / 2 + tolerance),
|
||||
-1,
|
||||
screenYPosition
|
||||
])
|
||||
button()
|
||||
|> translate(translate = [
|
||||
-(screenWidth / 2 + tolerance),
|
||||
-1,
|
||||
screenYPosition - buttonHeight - (tolerance * 2)
|
||||
])
|
||||
button()
|
||||
|> rotate(
|
||||
%,
|
||||
roll = 0,
|
||||
pitch = 180,
|
||||
yaw = 0,
|
||||
)
|
||||
|> translate(
|
||||
translate = [
|
||||
screenWidth / 2 + tolerance,
|
||||
-1,
|
||||
screenYPosition - buttonHeight
|
||||
],
|
||||
global = true,
|
||||
x = -(screenWidth / 2 + tolerance),
|
||||
y = -1,
|
||||
z = screenYPosition
|
||||
)
|
||||
button()
|
||||
|> translate(
|
||||
x = -(screenWidth / 2 + tolerance),
|
||||
y = -1,
|
||||
z = screenYPosition - buttonHeight - (tolerance * 2)
|
||||
)
|
||||
button()
|
||||
|> rotate(
|
||||
@ -74,10 +59,21 @@ button()
|
||||
yaw = 0,
|
||||
)
|
||||
|> translate(
|
||||
translate = [
|
||||
screenWidth / 2 + tolerance,
|
||||
-1,
|
||||
screenYPosition - (buttonHeight * 2) - (tolerance * 2)
|
||||
],
|
||||
x = screenWidth / 2 + tolerance,
|
||||
y = -1,
|
||||
z = screenYPosition - buttonHeight,
|
||||
global = true,
|
||||
)
|
||||
button()
|
||||
|> rotate(
|
||||
%,
|
||||
roll = 0,
|
||||
pitch = 180,
|
||||
yaw = 0,
|
||||
)
|
||||
|> translate(
|
||||
x = screenWidth / 2 + tolerance,
|
||||
y = -1,
|
||||
z = screenYPosition - (buttonHeight * 2) - (tolerance * 2),
|
||||
global = true,
|
||||
)
|
||||
|
24
rust/Cargo.lock
generated
24
rust/Cargo.lock
generated
@ -1780,7 +1780,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-bumper"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1791,7 +1791,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-derive-docs"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"Inflector",
|
||||
"anyhow",
|
||||
@ -1810,7 +1810,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-directory-test-macro"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@ -1819,7 +1819,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-language-server"
|
||||
version = "0.2.55"
|
||||
version = "0.2.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1840,7 +1840,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-language-server-release"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
@ -1860,7 +1860,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-lib"
|
||||
version = "0.2.55"
|
||||
version = "0.2.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"approx 0.5.1",
|
||||
@ -1928,7 +1928,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-python-bindings"
|
||||
version = "0.3.55"
|
||||
version = "0.3.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"kcl-lib",
|
||||
@ -1943,7 +1943,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-test-server"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"hyper 0.14.32",
|
||||
@ -1956,7 +1956,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-to-core"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
@ -1970,7 +1970,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kcl-wasm-lib"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
dependencies = [
|
||||
"bson",
|
||||
"console_error_panic_hook",
|
||||
@ -1996,9 +1996,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "kittycad"
|
||||
version = "0.3.33"
|
||||
version = "0.3.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4f6f65645cc07a8f43c34584e4979bf4da16c047cce50c4715fa9381227574d5"
|
||||
checksum = "0a345fd2a4cb16205f32bd1aa41715045830c59d78c59927fca6580e2a651ac9"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-trait",
|
||||
|
@ -35,7 +35,7 @@ clap = { version = "4.5.31", features = ["derive"] }
|
||||
dashmap = { version = "6.1.0" }
|
||||
http = "1"
|
||||
indexmap = "2.7.0"
|
||||
kittycad = { version = "0.3.33", default-features = false, features = ["js", "requests"] }
|
||||
kittycad = { version = "0.3.36", default-features = false, features = ["js", "requests"] }
|
||||
kittycad-modeling-cmds = { version = "0.2.107", features = ["ts-rs", "websocket"] }
|
||||
lazy_static = "1.5.0"
|
||||
miette = "7.5.0"
|
||||
|
@ -43,6 +43,10 @@ overwrite-sim-test test_name:
|
||||
EXPECTORATE=overwrite TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib --no-quiet -- tests::{{test_name}}::kcl_test_execute
|
||||
EXPECTORATE=overwrite {{cita}} -p kcl-lib --no-quiet -- simulation_tests::{{test_name}}::test_after_engine
|
||||
|
||||
# Regenerate all the simulation test output.
|
||||
redo-sim-tests:
|
||||
EXPECTORATE=overwrite TWENTY_TWENTY=overwrite {{cita}} -p kcl-lib --no-quiet -- simulation_tests
|
||||
|
||||
test:
|
||||
export RUST_BRACKTRACE="full" && cargo nextest run --workspace --no-fail-fast
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
[package]
|
||||
name = "kcl-bumper"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
edition = "2021"
|
||||
repository = "https://github.com/KittyCAD/modeling-api"
|
||||
rust-version = "1.76"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-derive-docs"
|
||||
description = "A tool for generating documentation from Rust derive macros"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-directory-test-macro"
|
||||
description = "A tool for generating tests from a directory of kcl files"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
|
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "kcl-language-server-release"
|
||||
version = "0.1.55"
|
||||
version = "0.1.56"
|
||||
edition = "2021"
|
||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
|
||||
publish = false
|
||||
|
@ -2,7 +2,7 @@
|
||||
name = "kcl-language-server"
|
||||
description = "A language server for KCL."
|
||||
authors = ["KittyCAD Inc <kcl@kittycad.io>"]
|
||||
version = "0.2.55"
|
||||
version = "0.2.56"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
@ -2194,9 +2194,9 @@ supports-color@^8.1.1:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
tar-fs@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
|
||||
integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5"
|
||||
integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==
|
||||
dependencies:
|
||||
chownr "^1.1.1"
|
||||
mkdirp-classic "^0.5.2"
|
||||
|
@ -1,7 +1,7 @@
|
||||
[package]
|
||||
name = "kcl-lib"
|
||||
description = "KittyCAD Language implementation and tools"
|
||||
version = "0.2.55"
|
||||
version = "0.2.56"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/KittyCAD/modeling-app"
|
||||
@ -104,7 +104,7 @@ tower-lsp = { workspace = true, features = ["proposed", "default"] }
|
||||
|
||||
[features]
|
||||
default = ["engine"]
|
||||
cli = ["dep:clap"]
|
||||
cli = ["dep:clap", "kittycad/clap"]
|
||||
dhat-heap = ["dep:dhat"]
|
||||
# For the lsp server, when run with stdout for rpc we want to disable println.
|
||||
# This is used for editor extensions that use the lsp server.
|
||||
|
@ -1,6 +1,8 @@
|
||||
//! Cache testing framework.
|
||||
|
||||
use kcl_lib::{bust_cache, ExecError, ExecOutcome};
|
||||
use kcmc::{each_cmd as mcmd, ModelingCmd};
|
||||
use kittycad_modeling_cmds as kcmc;
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Variation<'a> {
|
||||
@ -253,3 +255,71 @@ extrude(sketch001, length = 4)
|
||||
second.artifact_graph.len()
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn kcl_test_cache_empty_file_pop_cache_empty_file_planes_work() {
|
||||
// Get the current working directory.
|
||||
let code = "";
|
||||
|
||||
let ctx = kcl_lib::ExecutorContext::new_with_default_client(Default::default())
|
||||
.await
|
||||
.unwrap();
|
||||
let program = kcl_lib::Program::parse_no_errs(code).unwrap();
|
||||
let outcome = ctx.run_with_caching(program).await.unwrap();
|
||||
|
||||
// Ensure nothing is left in the batch
|
||||
assert!(ctx.engine.batch().read().await.is_empty());
|
||||
assert!(ctx.engine.batch_end().read().await.is_empty());
|
||||
|
||||
// Ensure the planes work, and we can show or hide them.
|
||||
// Hide/show the grid.
|
||||
let default_planes = ctx.engine.get_default_planes().read().await.clone().unwrap();
|
||||
|
||||
// Assure the outcome is the same.
|
||||
assert_eq!(outcome.default_planes, Some(default_planes.clone()));
|
||||
|
||||
ctx.engine
|
||||
.send_modeling_cmd(
|
||||
uuid::Uuid::new_v4(),
|
||||
Default::default(),
|
||||
&ModelingCmd::from(mcmd::ObjectVisible {
|
||||
hidden: false,
|
||||
object_id: default_planes.xy,
|
||||
}),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// Now simulate an engine pause/network disconnect.
|
||||
// Raw dog clear the scene entirely.
|
||||
ctx.engine
|
||||
.send_modeling_cmd(
|
||||
uuid::Uuid::new_v4(),
|
||||
Default::default(),
|
||||
&ModelingCmd::from(mcmd::SceneClearAll {}),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
// Bust the cache and reset the scene.
|
||||
let outcome = ctx.bust_cache_and_reset_scene().await.unwrap();
|
||||
// Get the default planes.
|
||||
let default_planes = ctx.engine.get_default_planes().read().await.clone().unwrap();
|
||||
|
||||
assert_eq!(outcome.default_planes, Some(default_planes.clone()));
|
||||
|
||||
// Ensure we can show a plane.
|
||||
ctx.engine
|
||||
.send_modeling_cmd(
|
||||
uuid::Uuid::new_v4(),
|
||||
Default::default(),
|
||||
&ModelingCmd::from(mcmd::ObjectVisible {
|
||||
hidden: false,
|
||||
object_id: default_planes.xz,
|
||||
}),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
ctx.close().await;
|
||||
}
|
||||
|
77
rust/kcl-lib/e2e/executor/inputs/boolean-setup-with
Normal file
77
rust/kcl-lib/e2e/executor/inputs/boolean-setup-with
Normal file
@ -0,0 +1,77 @@
|
||||
@settings(defaultLengthUnit = mm)
|
||||
|
||||
sketch001 = startSketchOn(XZ)
|
||||
profile001 = circle(sketch001, center = [154.36, 113.92], radius = 41.09)
|
||||
extrude001 = extrude(profile001, length = 200)
|
||||
sketch002 = startSketchOn(XY)
|
||||
profile002 = startProfileAt([72.24, -52.05], sketch002)
|
||||
|> angledLine([0, 181.26], %, $rectangleSegmentA001)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA001) - 90,
|
||||
21.54
|
||||
], %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA001),
|
||||
-segLen(rectangleSegmentA001)
|
||||
], %, $mySeg)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude002 = extrude(profile002, length = 150)
|
||||
|> chamfer(
|
||||
%,
|
||||
length = 15,
|
||||
tags = [mySeg],
|
||||
tag = $seg02,
|
||||
)
|
||||
|
||||
sketch003 = startSketchOn(extrude002, mySeg)
|
||||
profile003 = startProfileAt([207.36, 126.19], sketch003)
|
||||
|> angledLine([0, 33.57], %, $rectangleSegmentA002)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA002) - 90,
|
||||
99.11
|
||||
], %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA002),
|
||||
-segLen(rectangleSegmentA002)
|
||||
], %, $seg01)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude003 = extrude(profile003, length = -20)
|
||||
sketch004 = startSketchOn(extrude003, seg01)
|
||||
profile004 = startProfileAt([-235.38, 66.16], sketch004)
|
||||
|> angledLine([0, 24.21], %, $rectangleSegmentA003)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA003) - 90,
|
||||
3.72
|
||||
], %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA003),
|
||||
-segLen(rectangleSegmentA003)
|
||||
], %)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude004 = extrude(profile004, length = 30)
|
||||
|
||||
sketch005 = startSketchOn(extrude002, seg02)
|
||||
profile005 = startProfileAt([-129.93, -59.19], sketch005)
|
||||
|> xLine(length = 48.79)
|
||||
|> line(end = [1.33, 11.03])
|
||||
|> xLine(length = -60.56, tag = $seg03)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude005 = extrude(profile005, length = -10)
|
||||
sketch006 = startSketchOn(extrude005, seg03)
|
||||
profile006 = startProfileAt([-95.86, 38.73], sketch006)
|
||||
|> angledLine([0, 3.48], %, $rectangleSegmentA004)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA004) - 90,
|
||||
3.36
|
||||
], %)
|
||||
|> angledLine([
|
||||
segAng(rectangleSegmentA004),
|
||||
-segLen(rectangleSegmentA004)
|
||||
], %)
|
||||
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
||||
|> close()
|
||||
extrude006 = extrude(profile006, length = 13)
|
@ -53,7 +53,7 @@ pub trait CoreDump: Clone {
|
||||
.meta()
|
||||
.create_debug_uploads(vec![kittycad::types::multipart::Attachment {
|
||||
name: "".to_string(),
|
||||
filename: Some(format!(r#"modeling-app/coredump-{coredump_id}-screenshot.png"#)),
|
||||
filepath: Some(format!(r#"modeling-app/coredump-{coredump_id}-screenshot.png"#).into()),
|
||||
content_type: Some("image/png".to_string()),
|
||||
data,
|
||||
}])
|
||||
@ -101,7 +101,7 @@ pub trait CoreDump: Clone {
|
||||
.meta()
|
||||
.create_debug_uploads(vec![kittycad::types::multipart::Attachment {
|
||||
name: "".to_string(),
|
||||
filename: Some(format!(r#"modeling-app/coredump-{}.json"#, coredump_id)),
|
||||
filepath: Some(format!(r#"modeling-app/coredump-{}.json"#, coredump_id).into()),
|
||||
content_type: Some("application/json".to_string()),
|
||||
data,
|
||||
}])
|
||||
|
@ -339,9 +339,9 @@ fn generate_index(combined: &IndexMap<String, Box<dyn StdLibFn>>, kcl_lib: &[Doc
|
||||
}
|
||||
|
||||
functions.entry(d.mod_name()).or_default().push(match d {
|
||||
DocData::Fn(f) => (f.name.clone(), d.file_name()),
|
||||
DocData::Const(c) => (c.name.clone(), d.file_name()),
|
||||
DocData::Ty(t) => (t.name.clone(), d.file_name()),
|
||||
DocData::Fn(f) => (f.preferred_name.clone(), d.file_name()),
|
||||
DocData::Const(c) => (c.preferred_name.clone(), d.file_name()),
|
||||
DocData::Ty(t) => (t.preferred_name.clone(), d.file_name()),
|
||||
});
|
||||
|
||||
if let DocData::Const(c) = d {
|
||||
|
@ -9,7 +9,7 @@ use tower_lsp::lsp_types::{
|
||||
use crate::{
|
||||
execution::annotations,
|
||||
parsing::{
|
||||
ast::types::{Annotation, Node, PrimitiveType, Type, VariableKind},
|
||||
ast::types::{Annotation, ImportSelector, Node, PrimitiveType, Type, VariableKind},
|
||||
token::NumericSuffix,
|
||||
},
|
||||
ModuleId,
|
||||
@ -17,7 +17,7 @@ use crate::{
|
||||
|
||||
pub fn walk_prelude() -> Vec<DocData> {
|
||||
let mut visitor = CollectionVisitor::default();
|
||||
visitor.visit_module("prelude").unwrap();
|
||||
visitor.visit_module("prelude", "").unwrap();
|
||||
visitor.result
|
||||
}
|
||||
|
||||
@ -29,7 +29,7 @@ struct CollectionVisitor {
|
||||
}
|
||||
|
||||
impl CollectionVisitor {
|
||||
fn visit_module(&mut self, name: &str) -> Result<(), String> {
|
||||
fn visit_module(&mut self, name: &str, preferred_prefix: &str) -> Result<(), String> {
|
||||
let old_name = std::mem::replace(&mut self.name, name.to_owned());
|
||||
let source = crate::modules::read_std(name).unwrap();
|
||||
let parsed = crate::parsing::parse_str(source, ModuleId::from_usize(self.id))
|
||||
@ -40,14 +40,16 @@ impl CollectionVisitor {
|
||||
for n in &parsed.body {
|
||||
match n {
|
||||
crate::parsing::ast::types::BodyItem::ImportStatement(import) if !import.visibility.is_default() => {
|
||||
// Only supports glob imports for now.
|
||||
assert!(matches!(
|
||||
import.selector,
|
||||
crate::parsing::ast::types::ImportSelector::Glob(..)
|
||||
));
|
||||
match &import.path {
|
||||
crate::parsing::ast::types::ImportPath::Std { path } => {
|
||||
self.visit_module(&path[1])?;
|
||||
match import.selector {
|
||||
ImportSelector::Glob(..) => self.visit_module(&path[1], "")?,
|
||||
ImportSelector::None { .. } => {
|
||||
self.visit_module(&path[1], &format!("{}::", import.module_name().unwrap()))?
|
||||
}
|
||||
// Only supports glob or whole-module imports for now.
|
||||
_ => unimplemented!(),
|
||||
}
|
||||
}
|
||||
p => return Err(format!("Unexpected import: `{p}`")),
|
||||
}
|
||||
@ -59,8 +61,8 @@ impl CollectionVisitor {
|
||||
format!("std::{}::", self.name)
|
||||
};
|
||||
let mut dd = match var.kind {
|
||||
VariableKind::Fn => DocData::Fn(FnData::from_ast(var, qual_name)),
|
||||
VariableKind::Const => DocData::Const(ConstData::from_ast(var, qual_name)),
|
||||
VariableKind::Fn => DocData::Fn(FnData::from_ast(var, qual_name, preferred_prefix)),
|
||||
VariableKind::Const => DocData::Const(ConstData::from_ast(var, qual_name, preferred_prefix)),
|
||||
};
|
||||
|
||||
dd.with_meta(&var.outer_attrs);
|
||||
@ -77,7 +79,7 @@ impl CollectionVisitor {
|
||||
} else {
|
||||
format!("std::{}::", self.name)
|
||||
};
|
||||
let mut dd = DocData::Ty(TyData::from_ast(ty, qual_name));
|
||||
let mut dd = DocData::Ty(TyData::from_ast(ty, qual_name, preferred_prefix));
|
||||
|
||||
dd.with_meta(&ty.outer_attrs);
|
||||
for a in &ty.outer_attrs {
|
||||
@ -200,6 +202,8 @@ impl DocData {
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ConstData {
|
||||
pub name: String,
|
||||
/// How the const is indexed, etc.
|
||||
pub preferred_name: String,
|
||||
/// The fully qualified name.
|
||||
pub qual_name: String,
|
||||
pub value: Option<String>,
|
||||
@ -216,7 +220,11 @@ pub struct ConstData {
|
||||
}
|
||||
|
||||
impl ConstData {
|
||||
fn from_ast(var: &crate::parsing::ast::types::VariableDeclaration, mut qual_name: String) -> Self {
|
||||
fn from_ast(
|
||||
var: &crate::parsing::ast::types::VariableDeclaration,
|
||||
mut qual_name: String,
|
||||
preferred_prefix: &str,
|
||||
) -> Self {
|
||||
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Const);
|
||||
|
||||
let (value, ty) = match &var.declaration.init {
|
||||
@ -240,6 +248,7 @@ impl ConstData {
|
||||
let name = var.declaration.id.name.clone();
|
||||
qual_name.push_str(&name);
|
||||
ConstData {
|
||||
preferred_name: format!("{preferred_prefix}{name}"),
|
||||
name,
|
||||
qual_name,
|
||||
value,
|
||||
@ -272,7 +281,7 @@ impl ConstData {
|
||||
detail.push_str(ty);
|
||||
}
|
||||
CompletionItem {
|
||||
label: self.name.clone(),
|
||||
label: self.preferred_name.clone(),
|
||||
label_details: Some(CompletionItemLabelDetails {
|
||||
detail: self.value.clone(),
|
||||
description: None,
|
||||
@ -306,6 +315,8 @@ impl ConstData {
|
||||
pub struct FnData {
|
||||
/// The name of the function.
|
||||
pub name: String,
|
||||
/// How the function is indexed, etc.
|
||||
pub preferred_name: String,
|
||||
/// The fully qualified name.
|
||||
pub qual_name: String,
|
||||
/// The args of the function.
|
||||
@ -326,7 +337,11 @@ pub struct FnData {
|
||||
}
|
||||
|
||||
impl FnData {
|
||||
fn from_ast(var: &crate::parsing::ast::types::VariableDeclaration, mut qual_name: String) -> Self {
|
||||
fn from_ast(
|
||||
var: &crate::parsing::ast::types::VariableDeclaration,
|
||||
mut qual_name: String,
|
||||
preferred_prefix: &str,
|
||||
) -> Self {
|
||||
assert_eq!(var.kind, crate::parsing::ast::types::VariableKind::Fn);
|
||||
let crate::parsing::ast::types::Expr::FunctionExpression(expr) = &var.declaration.init else {
|
||||
unreachable!();
|
||||
@ -345,6 +360,7 @@ impl FnData {
|
||||
}
|
||||
|
||||
FnData {
|
||||
preferred_name: format!("{preferred_prefix}{name}"),
|
||||
name,
|
||||
qual_name,
|
||||
args: expr.params.iter().map(ArgData::from_ast).collect(),
|
||||
@ -443,7 +459,7 @@ impl FnData {
|
||||
}
|
||||
// We end with ${} so you can jump to the end of the snippet.
|
||||
// After the last argument.
|
||||
format!("{}({})${{}}", self.name, args.join(", "))
|
||||
format!("{}({})${{}}", self.preferred_name, args.join(", "))
|
||||
}
|
||||
|
||||
fn to_signature_help(&self) -> SignatureHelp {
|
||||
@ -452,7 +468,7 @@ impl FnData {
|
||||
|
||||
SignatureHelp {
|
||||
signatures: vec![SignatureInformation {
|
||||
label: self.name.clone(),
|
||||
label: self.preferred_name.clone(),
|
||||
documentation: self.short_docs().map(|s| {
|
||||
Documentation::MarkupContent(MarkupContent {
|
||||
kind: MarkupKind::Markdown,
|
||||
@ -580,6 +596,8 @@ impl ArgKind {
|
||||
pub struct TyData {
|
||||
/// The name of the function.
|
||||
pub name: String,
|
||||
/// How the type is indexed, etc.
|
||||
pub preferred_name: String,
|
||||
/// The fully qualified name.
|
||||
pub qual_name: String,
|
||||
pub properties: Properties,
|
||||
@ -597,7 +615,11 @@ pub struct TyData {
|
||||
}
|
||||
|
||||
impl TyData {
|
||||
fn from_ast(ty: &crate::parsing::ast::types::TypeDeclaration, mut qual_name: String) -> Self {
|
||||
fn from_ast(
|
||||
ty: &crate::parsing::ast::types::TypeDeclaration,
|
||||
mut qual_name: String,
|
||||
preferred_prefix: &str,
|
||||
) -> Self {
|
||||
let name = ty.name.name.clone();
|
||||
qual_name.push_str(&name);
|
||||
let mut referenced_types = HashSet::new();
|
||||
@ -606,6 +628,7 @@ impl TyData {
|
||||
}
|
||||
|
||||
TyData {
|
||||
preferred_name: format!("{preferred_prefix}{name}"),
|
||||
name,
|
||||
qual_name,
|
||||
properties: Properties {
|
||||
@ -641,7 +664,7 @@ impl TyData {
|
||||
|
||||
fn to_completion_item(&self) -> CompletionItem {
|
||||
CompletionItem {
|
||||
label: self.name.clone(),
|
||||
label: self.preferred_name.clone(),
|
||||
label_details: self.alias.as_ref().map(|t| CompletionItemLabelDetails {
|
||||
detail: Some(format!("type {} = {t}", self.name)),
|
||||
description: None,
|
||||
@ -658,7 +681,7 @@ impl TyData {
|
||||
preselect: None,
|
||||
sort_text: None,
|
||||
filter_text: None,
|
||||
insert_text: Some(self.name.clone()),
|
||||
insert_text: Some(self.preferred_name.clone()),
|
||||
insert_text_format: Some(InsertTextFormat::SNIPPET),
|
||||
insert_text_mode: None,
|
||||
text_edit: None,
|
||||
|
@ -1141,7 +1141,7 @@ mod tests {
|
||||
let snippet = scale_fn.to_autocomplete_snippet().unwrap();
|
||||
assert_eq!(
|
||||
snippet,
|
||||
r#"scale(${0:%}, scale = [${1:3.14}, ${2:3.14}, ${3:3.14}])${}"#
|
||||
r#"scale(${0:%}, x = ${1:3.14}, y = ${2:3.14}, z = ${3:3.14})${}"#
|
||||
);
|
||||
}
|
||||
|
||||
@ -1152,7 +1152,7 @@ mod tests {
|
||||
let snippet = translate_fn.to_autocomplete_snippet().unwrap();
|
||||
assert_eq!(
|
||||
snippet,
|
||||
r#"translate(${0:%}, translate = [${1:3.14}, ${2:3.14}, ${3:3.14}])${}"#
|
||||
r#"translate(${0:%}, x = ${1:3.14}, y = ${2:3.14}, z = ${3:3.14})${}"#
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -121,6 +121,13 @@ impl EngineConnection {
|
||||
}
|
||||
})?;
|
||||
|
||||
if value.is_null() || value.is_undefined() {
|
||||
return Err(KclError::Engine(KclErrorDetails {
|
||||
message: "Received null or undefined response from engine".into(),
|
||||
source_ranges: vec![source_range],
|
||||
}));
|
||||
}
|
||||
|
||||
// Convert JsValue to a Uint8Array
|
||||
let data = js_sys::Uint8Array::from(value);
|
||||
|
||||
|
@ -6,7 +6,7 @@ use itertools::{EitherOrBoth, Itertools};
|
||||
use tokio::sync::RwLock;
|
||||
|
||||
use crate::{
|
||||
execution::{annotations, memory::Stack, EnvironmentRef, ExecState, ExecutorSettings},
|
||||
execution::{annotations, memory::Stack, state::ModuleInfoMap, EnvironmentRef, ExecState, ExecutorSettings},
|
||||
parsing::ast::types::{Annotation, Node, Program},
|
||||
walk::Node as WalkNode,
|
||||
};
|
||||
@ -15,7 +15,7 @@ lazy_static::lazy_static! {
|
||||
/// A static mutable lock for updating the last successful execution state for the cache.
|
||||
static ref OLD_AST: Arc<RwLock<Option<OldAstState>>> = Default::default();
|
||||
// The last successful run's memory. Not cleared after an unssuccessful run.
|
||||
static ref PREV_MEMORY: Arc<RwLock<Option<Stack>>> = Default::default();
|
||||
static ref PREV_MEMORY: Arc<RwLock<Option<(Stack, ModuleInfoMap)>>> = Default::default();
|
||||
}
|
||||
|
||||
/// Read the old ast memory from the lock.
|
||||
@ -29,12 +29,12 @@ pub(super) async fn write_old_ast(old_state: OldAstState) {
|
||||
*old_ast = Some(old_state);
|
||||
}
|
||||
|
||||
pub(crate) async fn read_old_memory() -> Option<Stack> {
|
||||
pub(crate) async fn read_old_memory() -> Option<(Stack, ModuleInfoMap)> {
|
||||
let old_mem = PREV_MEMORY.read().await;
|
||||
old_mem.clone()
|
||||
}
|
||||
|
||||
pub(super) async fn write_old_memory(mem: Stack) {
|
||||
pub(super) async fn write_old_memory(mem: (Stack, ModuleInfoMap)) {
|
||||
let mut old_mem = PREV_MEMORY.write().await;
|
||||
*old_mem = Some(mem);
|
||||
}
|
||||
|
@ -529,6 +529,18 @@ impl ExecutorContext {
|
||||
.await
|
||||
}
|
||||
|
||||
pub async fn bust_cache_and_reset_scene(&self) -> Result<ExecOutcome, KclErrorWithOutputs> {
|
||||
cache::bust_cache().await;
|
||||
|
||||
// Execute an empty program to clear and reset the scene.
|
||||
// We specifically want to be returned the objects after the scene is reset.
|
||||
// Like the default planes so it is easier to just execute an empty program
|
||||
// after the cache is busted.
|
||||
let outcome = self.run_with_caching(crate::Program::empty()).await?;
|
||||
|
||||
Ok(outcome)
|
||||
}
|
||||
|
||||
async fn prepare_mem(&self, exec_state: &mut ExecState) -> Result<(), KclErrorWithOutputs> {
|
||||
self.eval_prelude(exec_state, SourceRange::synthetic())
|
||||
.await
|
||||
@ -547,7 +559,10 @@ impl ExecutorContext {
|
||||
let mut exec_state = ExecState::new(self);
|
||||
if use_prev_memory {
|
||||
match cache::read_old_memory().await {
|
||||
Some(mem) => *exec_state.mut_stack() = mem,
|
||||
Some(mem) => {
|
||||
*exec_state.mut_stack() = mem.0;
|
||||
exec_state.global.module_infos = mem.1;
|
||||
}
|
||||
None => self.prepare_mem(&mut exec_state).await?,
|
||||
}
|
||||
} else {
|
||||
@ -565,10 +580,11 @@ impl ExecutorContext {
|
||||
// memory, not to the exec_state which is not cached for mock execution.
|
||||
|
||||
let mut mem = exec_state.stack().clone();
|
||||
let module_infos = exec_state.global.module_infos.clone();
|
||||
let outcome = exec_state.to_mock_wasm_outcome(result.0).await;
|
||||
|
||||
mem.squash_env(result.0);
|
||||
cache::write_old_memory(mem).await;
|
||||
cache::write_old_memory((mem, module_infos)).await;
|
||||
|
||||
Ok(outcome)
|
||||
}
|
||||
@ -758,7 +774,7 @@ impl ExecutorContext {
|
||||
if !self.is_mock() {
|
||||
let mut mem = exec_state.stack().deep_clone();
|
||||
mem.restore_env(env_ref);
|
||||
cache::write_old_memory(mem).await;
|
||||
cache::write_old_memory((mem, exec_state.global.module_infos.clone())).await;
|
||||
}
|
||||
let session_data = self.engine.get_session_data().await;
|
||||
Ok((env_ref, session_data))
|
||||
@ -2044,6 +2060,8 @@ let w = f() + f()
|
||||
|
||||
// Ensure the settings are as expected.
|
||||
assert_eq!(settings_state, ctx.settings);
|
||||
|
||||
ctx.close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2057,6 +2075,9 @@ let w = f() + f()
|
||||
let program2 = crate::Program::parse_no_errs("z = x + 1").unwrap();
|
||||
let result = ctx2.run_mock(program2, true).await.unwrap();
|
||||
assert_eq!(result.variables.get("z").unwrap().as_f64().unwrap(), 3.0);
|
||||
|
||||
ctx.close().await;
|
||||
ctx2.close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
|
@ -30,6 +30,8 @@ pub struct ExecState {
|
||||
pub(super) exec_context: Option<super::ExecutorContext>,
|
||||
}
|
||||
|
||||
pub type ModuleInfoMap = IndexMap<ModuleId, ModuleInfo>;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub(super) struct GlobalState {
|
||||
/// Map from source file absolute path to module ID.
|
||||
@ -37,7 +39,7 @@ pub(super) struct GlobalState {
|
||||
/// Map from module ID to source file.
|
||||
pub id_to_source: IndexMap<ModuleId, ModuleSource>,
|
||||
/// Map from module ID to module info.
|
||||
pub module_infos: IndexMap<ModuleId, ModuleInfo>,
|
||||
pub module_infos: ModuleInfoMap,
|
||||
/// Output map of UUIDs to artifacts.
|
||||
pub artifacts: IndexMap<ArtifactId, Artifact>,
|
||||
/// Output commands to allow building the artifact graph by the caller.
|
||||
|
@ -97,7 +97,7 @@ pub use parsing::ast::{modify::modify_ast_for_sketch, types::FormatOptions};
|
||||
pub use settings::types::{project::ProjectConfiguration, Configuration, UnitLength};
|
||||
pub use source_range::SourceRange;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use unparser::recast_dir;
|
||||
pub use unparser::{recast_dir, walk_dir};
|
||||
|
||||
// Rather than make executor public and make lots of it pub(crate), just re-export into a new module.
|
||||
// Ideally we wouldn't export these things at all, they should only be used for testing.
|
||||
@ -211,6 +211,14 @@ impl Program {
|
||||
pub fn recast_with_options(&self, options: &FormatOptions) -> String {
|
||||
self.ast.recast(options, 0)
|
||||
}
|
||||
|
||||
/// Create an empty program.
|
||||
pub fn empty() -> Self {
|
||||
Self {
|
||||
ast: parsing::ast::types::Node::no_src(parsing::ast::types::Program::default()),
|
||||
original_file_contents: String::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -786,7 +786,7 @@ impl Backend {
|
||||
vec![kittycad::types::multipart::Attachment {
|
||||
// Clean the URI part.
|
||||
name: "attachment".to_string(),
|
||||
filename: Some("attachment.zip".to_string()),
|
||||
filepath: Some("attachment.zip".into()),
|
||||
content_type: Some("application/x-zip".to_string()),
|
||||
data: self.create_zip().await?,
|
||||
}],
|
||||
@ -1635,7 +1635,7 @@ fn position_to_char_index(position: Position, code: &str) -> usize {
|
||||
|
||||
async fn with_cached_var<T>(name: &str, f: impl Fn(&KclValue) -> T) -> Option<T> {
|
||||
let mem = cache::read_old_memory().await?;
|
||||
let value = mem.get(name, SourceRange::default()).ok()?;
|
||||
let value = mem.0.get(name, SourceRange::default()).ok()?;
|
||||
|
||||
Some(f(value))
|
||||
}
|
||||
|
@ -1016,6 +1016,8 @@ startSketchOn(XY)
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2318,6 +2320,8 @@ async fn kcl_test_kcl_lsp_on_change_update_memory() {
|
||||
}],
|
||||
})
|
||||
.await;
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread", worker_threads = 10)]
|
||||
@ -2390,6 +2394,8 @@ part001 = cube([0,0], 20)
|
||||
|
||||
let units = server.executor_ctx().await.clone().unwrap().settings.units;
|
||||
assert_eq!(units, crate::settings::types::UnitLength::M);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2506,6 +2512,8 @@ async fn kcl_test_kcl_lsp_diagnostics_on_execution_error() {
|
||||
|
||||
// Get the diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 0);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2556,6 +2564,8 @@ async fn kcl_test_kcl_lsp_full_to_empty_file_updates_ast_and_memory() {
|
||||
// Get the ast.
|
||||
let ast = server.ast_map.get("file:///test.kcl").unwrap().clone();
|
||||
assert_eq!(ast.ast, default_hashed);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2642,6 +2652,8 @@ async fn kcl_test_kcl_lsp_code_unchanged_but_has_diagnostics_reexecute() {
|
||||
|
||||
// Assure we have no diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 0);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2717,6 +2729,8 @@ async fn kcl_test_kcl_lsp_code_and_ast_unchanged_but_has_diagnostics_reexecute()
|
||||
|
||||
// Assure we have no diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 0);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2795,6 +2809,8 @@ async fn kcl_test_kcl_lsp_code_and_ast_units_unchanged_but_has_diagnostics_reexe
|
||||
|
||||
// Assure we have no diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 0);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2852,6 +2868,8 @@ async fn kcl_test_kcl_lsp_code_and_ast_units_unchanged_but_has_memory_reexecute_
|
||||
|
||||
// Assure we have no diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 0);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -2975,6 +2993,8 @@ async fn kcl_test_kcl_lsp_cant_execute_set() {
|
||||
|
||||
// Assure we have no diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 0);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -3243,6 +3263,8 @@ part001 = startSketchOn(XY)
|
||||
|
||||
// Check the diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 2);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -3310,6 +3332,8 @@ NEW_LINT = 1"#
|
||||
|
||||
// Check the diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 2);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -3377,6 +3401,8 @@ NEW_LINT = 1"#
|
||||
|
||||
// Check the diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 1);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -3460,6 +3486,8 @@ NEW_LINT = 1"#
|
||||
|
||||
// Check the diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 1);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -3551,6 +3579,8 @@ part001 = startSketchOn(XY)
|
||||
|
||||
// Check the diagnostics.
|
||||
assert_diagnostic_count(server.diagnostics_map.get("file:///test.kcl").as_deref(), 2);
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
@ -3649,4 +3679,6 @@ async fn kcl_test_kcl_lsp_multi_file_error() {
|
||||
} else {
|
||||
panic!("Expected diagnostics");
|
||||
}
|
||||
|
||||
server.executor_ctx().await.clone().unwrap().close().await;
|
||||
}
|
||||
|
@ -88,6 +88,7 @@ pub(crate) fn read_std(mod_name: &str) -> Option<&'static str> {
|
||||
"prelude" => Some(include_str!("../std/prelude.kcl")),
|
||||
"math" => Some(include_str!("../std/math.kcl")),
|
||||
"sketch" => Some(include_str!("../std/sketch.kcl")),
|
||||
"turns" => Some(include_str!("../std/turns.kcl")),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
@ -133,6 +133,13 @@ impl<T> Node<T> {
|
||||
})
|
||||
}
|
||||
|
||||
fn reset_source(&mut self) {
|
||||
self.start = 0;
|
||||
self.end = 0;
|
||||
self.module_id = ModuleId::default();
|
||||
self.comment_start = 0;
|
||||
}
|
||||
|
||||
pub fn as_source_range(&self) -> SourceRange {
|
||||
SourceRange::new(self.start, self.end, self.module_id)
|
||||
}
|
||||
@ -345,7 +352,10 @@ impl Node<Program> {
|
||||
let mut found = false;
|
||||
for node in &mut new_program.inner_attrs {
|
||||
if node.name() == Some(annotations::SETTINGS) {
|
||||
*node = Node::no_src(Annotation::new_from_meta_settings(&settings));
|
||||
node.inner = Annotation::new_from_meta_settings(&settings);
|
||||
// Previous source range no longer makes sense, but we want to
|
||||
// preserve other things like comments.
|
||||
node.reset_source();
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
@ -1609,19 +1619,21 @@ impl ImportStatement {
|
||||
return Some(alias.name.clone());
|
||||
}
|
||||
|
||||
let mut parts = match &self.path {
|
||||
ImportPath::Kcl { filename: s } | ImportPath::Foreign { path: s } => s.split('.'),
|
||||
_ => return None,
|
||||
};
|
||||
let path = parts.next()?;
|
||||
let _ext = parts.next()?;
|
||||
let rest = parts.next();
|
||||
match &self.path {
|
||||
ImportPath::Kcl { filename: s } | ImportPath::Foreign { path: s } => {
|
||||
let mut parts = s.split('.');
|
||||
let path = parts.next()?;
|
||||
let _ext = parts.next()?;
|
||||
let rest = parts.next();
|
||||
|
||||
if rest.is_some() {
|
||||
return None;
|
||||
if rest.is_some() {
|
||||
return None;
|
||||
}
|
||||
|
||||
path.rsplit(&['/', '\\']).next().map(str::to_owned)
|
||||
}
|
||||
ImportPath::Std { path } => path.last().cloned(),
|
||||
}
|
||||
|
||||
path.rsplit(&['/', '\\']).next().map(str::to_owned)
|
||||
}
|
||||
}
|
||||
|
||||
@ -4140,6 +4152,50 @@ startSketchOn(XY)
|
||||
r#"@settings(defaultLengthUnit = mm)
|
||||
|
||||
startSketchOn(XY)
|
||||
"#
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn test_change_meta_settings_preserves_comments() {
|
||||
let code = r#"// Title
|
||||
|
||||
// Set Units
|
||||
@settings(defaultLengthUnit = in)
|
||||
|
||||
// Between
|
||||
|
||||
// Above Code
|
||||
5
|
||||
"#;
|
||||
let program = crate::parsing::top_level_parse(code).unwrap();
|
||||
|
||||
let new_program = program
|
||||
.change_meta_settings(crate::execution::MetaSettings {
|
||||
default_length_units: crate::execution::types::UnitLen::Cm,
|
||||
..Default::default()
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
let result = new_program.meta_settings().unwrap();
|
||||
assert!(result.is_some());
|
||||
let meta_settings = result.unwrap();
|
||||
|
||||
assert_eq!(meta_settings.default_length_units, crate::execution::types::UnitLen::Cm);
|
||||
|
||||
let formatted = new_program.recast(&Default::default(), 0);
|
||||
|
||||
assert_eq!(
|
||||
formatted,
|
||||
r#"// Title
|
||||
|
||||
// Set Units
|
||||
@settings(defaultLengthUnit = cm)
|
||||
|
||||
// Between
|
||||
|
||||
// Above Code
|
||||
5
|
||||
"#
|
||||
);
|
||||
}
|
||||
|
@ -152,7 +152,12 @@ const STR_DEPRECATIONS: [(&str, &str); 6] = [
|
||||
("-YZ", "-YZ"),
|
||||
];
|
||||
const FN_DEPRECATIONS: [(&str, &str); 3] = [("pi", "PI"), ("e", "E"), ("tau", "TAU")];
|
||||
const CONST_DEPRECATIONS: [(&str, &str); 0] = [];
|
||||
const CONST_DEPRECATIONS: [(&str, &str); 4] = [
|
||||
("ZERO", "turns::ZERO"),
|
||||
("QUARTER_TURN", "turns::QUARTER_TURN"),
|
||||
("HALF_TURN", "turns::HALF_TURN"),
|
||||
("THREE_QUARTER_TURN", "turns::THREE_QUARTER_TURN"),
|
||||
];
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
pub enum DeprecationKind {
|
||||
|
@ -1823,14 +1823,6 @@ fn import_stmt(i: &mut TokenSlice) -> PResult<BoxNode<ImportStatement>> {
|
||||
)
|
||||
.into(),
|
||||
));
|
||||
} else if matches!(path, ImportPath::Std { .. }) && matches!(selector, ImportSelector::None { .. }) {
|
||||
return Err(ErrMode::Cut(
|
||||
CompilationError::fatal(
|
||||
SourceRange::new(start, end, module_id),
|
||||
"the standard library cannot be imported as a part",
|
||||
)
|
||||
.into(),
|
||||
));
|
||||
}
|
||||
|
||||
Ok(Node::boxed(
|
||||
@ -2341,21 +2333,6 @@ fn nameable_identifier(i: &mut TokenSlice) -> PResult<Node<Identifier>> {
|
||||
));
|
||||
}
|
||||
|
||||
if let Some(suggestion) = super::deprecation(&result.name, DeprecationKind::Const) {
|
||||
ParseContext::warn(
|
||||
CompilationError::err(
|
||||
result.as_source_range(),
|
||||
format!("Using `{}` is deprecated, prefer using `{}`.", result.name, suggestion),
|
||||
)
|
||||
.with_suggestion(
|
||||
format!("Replace `{}` with `{}`", result.name, suggestion),
|
||||
suggestion,
|
||||
None,
|
||||
Tag::Deprecated,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
@ -2374,8 +2351,7 @@ fn name(i: &mut TokenSlice) -> PResult<Node<Name>> {
|
||||
let name = idents.pop().unwrap();
|
||||
let end = name.end;
|
||||
let module_id = name.module_id;
|
||||
|
||||
Ok(Node::new(
|
||||
let result = Node::new(
|
||||
Name {
|
||||
name,
|
||||
path: idents,
|
||||
@ -2385,7 +2361,24 @@ fn name(i: &mut TokenSlice) -> PResult<Node<Name>> {
|
||||
start,
|
||||
end,
|
||||
module_id,
|
||||
))
|
||||
);
|
||||
|
||||
if let Some(suggestion) = super::deprecation(&result.to_string(), DeprecationKind::Const) {
|
||||
ParseContext::warn(
|
||||
CompilationError::err(
|
||||
result.as_source_range(),
|
||||
format!("Using `{result}` is deprecated, prefer using `{suggestion}`."),
|
||||
)
|
||||
.with_suggestion(
|
||||
format!("Replace `{result}` with `{suggestion}`"),
|
||||
suggestion,
|
||||
None,
|
||||
Tag::Deprecated,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
impl TryFrom<Token> for Node<TagDeclarator> {
|
||||
|
@ -114,6 +114,8 @@ async fn unparse_test(test: &Test) {
|
||||
let kcl_files = kcl_files.into_iter().filter(|f| f != &entry_point);
|
||||
let futures = kcl_files
|
||||
.into_iter()
|
||||
.filter(|file| file.extension().is_some_and(|ext| ext == "kcl")) // We only care about kcl
|
||||
// files here.
|
||||
.map(|file| {
|
||||
let snap_path = Path::new("..").join(&test.output_dir);
|
||||
tokio::spawn(async move {
|
||||
@ -2379,3 +2381,66 @@ mod rotate_after_fillet {
|
||||
super::execute(TEST_NAME, true).await
|
||||
}
|
||||
}
|
||||
mod union_cubes {
|
||||
const TEST_NAME: &str = "union_cubes";
|
||||
|
||||
/// Test parsing KCL.
|
||||
#[test]
|
||||
fn parse() {
|
||||
super::parse(TEST_NAME)
|
||||
}
|
||||
|
||||
/// Test that parsing and unparsing KCL produces the original KCL input.
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn unparse() {
|
||||
super::unparse(TEST_NAME).await
|
||||
}
|
||||
|
||||
/// Test that KCL is executed correctly.
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn kcl_test_execute() {
|
||||
super::execute(TEST_NAME, true).await
|
||||
}
|
||||
}
|
||||
mod subtract_cylinder_from_cube {
|
||||
const TEST_NAME: &str = "subtract_cylinder_from_cube";
|
||||
|
||||
/// Test parsing KCL.
|
||||
#[test]
|
||||
fn parse() {
|
||||
super::parse(TEST_NAME)
|
||||
}
|
||||
|
||||
/// Test that parsing and unparsing KCL produces the original KCL input.
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn unparse() {
|
||||
super::unparse(TEST_NAME).await
|
||||
}
|
||||
|
||||
/// Test that KCL is executed correctly.
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn kcl_test_execute() {
|
||||
super::execute(TEST_NAME, true).await
|
||||
}
|
||||
}
|
||||
mod intersect_cubes {
|
||||
const TEST_NAME: &str = "intersect_cubes";
|
||||
|
||||
/// Test parsing KCL.
|
||||
#[test]
|
||||
fn parse() {
|
||||
super::parse(TEST_NAME)
|
||||
}
|
||||
|
||||
/// Test that parsing and unparsing KCL produces the original KCL input.
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn unparse() {
|
||||
super::unparse(TEST_NAME).await
|
||||
}
|
||||
|
||||
/// Test that KCL is executed correctly.
|
||||
#[tokio::test(flavor = "multi_thread")]
|
||||
async fn kcl_test_execute() {
|
||||
super::execute(TEST_NAME, true).await
|
||||
}
|
||||
}
|
||||
|
@ -45,7 +45,7 @@ pub async fn union(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "union",
|
||||
feature_tree_operation = false,
|
||||
feature_tree_operation = true,
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
deprecated = true,
|
||||
@ -107,7 +107,7 @@ pub async fn intersect(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "intersect",
|
||||
feature_tree_operation = false,
|
||||
feature_tree_operation = true,
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
deprecated = true,
|
||||
@ -164,7 +164,7 @@ pub async fn subtract(exec_state: &mut ExecState, args: Args) -> Result<KclValue
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "subtract",
|
||||
feature_tree_operation = false,
|
||||
feature_tree_operation = true,
|
||||
keywords = true,
|
||||
unlabeled_first = true,
|
||||
deprecated = true,
|
||||
|
@ -28,15 +28,22 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
]),
|
||||
exec_state,
|
||||
)?;
|
||||
let scale = args.get_kw_arg("scale")?;
|
||||
let scale_x = args.get_kw_arg("x")?;
|
||||
let scale_y = args.get_kw_arg("y")?;
|
||||
let scale_z = args.get_kw_arg("z")?;
|
||||
let global = args.get_kw_arg_opt("global")?;
|
||||
|
||||
let objects = inner_scale(objects, scale, global, exec_state, args).await?;
|
||||
let objects = inner_scale(objects, scale_x, scale_y, scale_z, global, exec_state, args).await?;
|
||||
Ok(objects.into())
|
||||
}
|
||||
|
||||
/// Scale a solid or a sketch.
|
||||
///
|
||||
/// This is really useful for resizing parts. You can create a part and then scale it to the
|
||||
/// correct size.
|
||||
///
|
||||
/// For sketches, you can use this to scale a sketch and then loft it with another sketch.
|
||||
///
|
||||
/// By default the transform is applied in local sketch axis, therefore the origin will not move.
|
||||
///
|
||||
/// If you want to apply the transform in global space, set `global` to `true`. The origin of the
|
||||
@ -78,7 +85,9 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
/// |> hole(pipeHole, %)
|
||||
/// |> sweep(path = sweepPath)
|
||||
/// |> scale(
|
||||
/// scale = [1.0, 1.0, 2.5],
|
||||
/// x = 1.0,
|
||||
/// y = 1.0,
|
||||
/// z = 2.5,
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
@ -89,7 +98,9 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
///
|
||||
/// cube
|
||||
/// |> scale(
|
||||
/// scale = [1.0, 1.0, 2.5],
|
||||
/// x = 1.0,
|
||||
/// y = 1.0,
|
||||
/// z = 2.5,
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
@ -124,7 +135,7 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
/// parts = sweep([rectangleSketch, circleSketch], path = sweepPath)
|
||||
///
|
||||
/// // Scale the sweep.
|
||||
/// scale(parts, scale = [1.0, 1.0, 0.5])
|
||||
/// scale(parts, x = 1.0, y = 1.0, z = 0.5)
|
||||
/// ```
|
||||
#[stdlib {
|
||||
name = "scale",
|
||||
@ -133,13 +144,17 @@ pub async fn scale(exec_state: &mut ExecState, args: Args) -> Result<KclValue, K
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
objects = {docs = "The solid, sketch, or set of solids or sketches to scale."},
|
||||
scale = {docs = "The scale factor for the x, y, and z axes."},
|
||||
x = {docs = "The scale factor for the x axis."},
|
||||
y = {docs = "The scale factor for the y axis."},
|
||||
z = {docs = "The scale factor for the z axis."},
|
||||
global = {docs = "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move."}
|
||||
}
|
||||
}]
|
||||
async fn inner_scale(
|
||||
objects: SolidOrSketchOrImportedGeometry,
|
||||
scale: [f64; 3],
|
||||
x: f64,
|
||||
y: f64,
|
||||
z: f64,
|
||||
global: Option<bool>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
@ -159,11 +174,7 @@ async fn inner_scale(
|
||||
object_id,
|
||||
transforms: vec![shared::ComponentTransform {
|
||||
scale: Some(shared::TransformBy::<Point3d<f64>> {
|
||||
property: Point3d {
|
||||
x: scale[0],
|
||||
y: scale[1],
|
||||
z: scale[2],
|
||||
},
|
||||
property: Point3d { x, y, z },
|
||||
set: false,
|
||||
is_local: !global.unwrap_or(false),
|
||||
}),
|
||||
@ -190,15 +201,23 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
]),
|
||||
exec_state,
|
||||
)?;
|
||||
let translate = args.get_kw_arg("translate")?;
|
||||
let translate_x = args.get_kw_arg("x")?;
|
||||
let translate_y = args.get_kw_arg("y")?;
|
||||
let translate_z = args.get_kw_arg("z")?;
|
||||
let global = args.get_kw_arg_opt("global")?;
|
||||
|
||||
let objects = inner_translate(objects, translate, global, exec_state, args).await?;
|
||||
let objects = inner_translate(objects, translate_x, translate_y, translate_z, global, exec_state, args).await?;
|
||||
Ok(objects.into())
|
||||
}
|
||||
|
||||
/// Move a solid or a sketch.
|
||||
///
|
||||
/// This is really useful for assembling parts together. You can create a part
|
||||
/// and then move it to the correct location.
|
||||
///
|
||||
/// Translate is really useful for sketches if you want to move a sketch
|
||||
/// and then rotate it using the `rotate` function to create a loft.
|
||||
///
|
||||
/// ```no_run
|
||||
/// // Move a pipe.
|
||||
///
|
||||
@ -232,7 +251,9 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
/// |> hole(pipeHole, %)
|
||||
/// |> sweep(path = sweepPath)
|
||||
/// |> translate(
|
||||
/// translate = [1.0, 1.0, 2.5],
|
||||
/// x = 1.0,
|
||||
/// y = 1.0,
|
||||
/// z = 2.5,
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
@ -243,7 +264,9 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
///
|
||||
/// cube
|
||||
/// |> translate(
|
||||
/// translate = [1.0, 1.0, 2.5],
|
||||
/// x = 1.0,
|
||||
/// y = 1.0,
|
||||
/// z = 2.5,
|
||||
/// )
|
||||
/// ```
|
||||
///
|
||||
@ -278,7 +301,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
/// parts = sweep([rectangleSketch, circleSketch], path = sweepPath)
|
||||
///
|
||||
/// // Move the sweeps.
|
||||
/// translate(parts, translate = [1.0, 1.0, 2.5])
|
||||
/// translate(parts, x = 1.0, y = 1.0, z = 2.5)
|
||||
/// ```
|
||||
///
|
||||
/// ```no_run
|
||||
@ -301,7 +324,9 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
///
|
||||
/// square(10)
|
||||
/// |> translate(
|
||||
/// translate = [5, 5, 0],
|
||||
/// x = 5,
|
||||
/// y = 5,
|
||||
/// z = 0,
|
||||
/// )
|
||||
/// |> extrude(
|
||||
/// length = 10,
|
||||
@ -324,7 +349,7 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
/// profile001 = square()
|
||||
///
|
||||
/// profile002 = square()
|
||||
/// |> translate(translate = [0, 0, 20])
|
||||
/// |> translate(x = 0, y = 0, z = 20)
|
||||
/// |> rotate(axis = [0, 0, 1.0], angle = 45)
|
||||
///
|
||||
/// loft([profile001, profile002])
|
||||
@ -336,13 +361,17 @@ pub async fn translate(exec_state: &mut ExecState, args: Args) -> Result<KclValu
|
||||
unlabeled_first = true,
|
||||
args = {
|
||||
objects = {docs = "The solid, sketch, or set of solids or sketches to move."},
|
||||
translate = {docs = "The amount to move the solid or sketch in all three axes."},
|
||||
x = {docs = "The amount to move the solid or sketch along the x axis."},
|
||||
y = {docs = "The amount to move the solid or sketch along the y axis."},
|
||||
z = {docs = "The amount to move the solid or sketch along the z axis."},
|
||||
global = {docs = "If true, the transform is applied in global space. The origin of the model will move. By default, the transform is applied in local sketch axis, therefore the origin will not move."}
|
||||
}
|
||||
}]
|
||||
async fn inner_translate(
|
||||
objects: SolidOrSketchOrImportedGeometry,
|
||||
translate: [f64; 3],
|
||||
x: f64,
|
||||
y: f64,
|
||||
z: f64,
|
||||
global: Option<bool>,
|
||||
exec_state: &mut ExecState,
|
||||
args: Args,
|
||||
@ -363,9 +392,9 @@ async fn inner_translate(
|
||||
transforms: vec![shared::ComponentTransform {
|
||||
translate: Some(shared::TransformBy::<Point3d<LengthUnit>> {
|
||||
property: shared::Point3d {
|
||||
x: LengthUnit(translate[0]),
|
||||
y: LengthUnit(translate[1]),
|
||||
z: LengthUnit(translate[2]),
|
||||
x: LengthUnit(x),
|
||||
y: LengthUnit(y),
|
||||
z: LengthUnit(z),
|
||||
},
|
||||
set: false,
|
||||
is_local: !global.unwrap_or(false),
|
||||
@ -506,6 +535,11 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
|
||||
/// Rotate a solid or a sketch.
|
||||
///
|
||||
/// This is really useful for assembling parts together. You can create a part
|
||||
/// and then rotate it to the correct orientation.
|
||||
///
|
||||
/// For sketches, you can use this to rotate a sketch and then loft it with another sketch.
|
||||
///
|
||||
/// ### Using Roll, Pitch, and Yaw
|
||||
///
|
||||
/// When rotating a part in 3D space, "roll," "pitch," and "yaw" refer to the
|
||||
@ -667,7 +701,7 @@ pub async fn rotate(exec_state: &mut ExecState, args: Args) -> Result<KclValue,
|
||||
/// profile001 = square()
|
||||
///
|
||||
/// profile002 = square()
|
||||
/// |> translate(translate = [0, 0, 20])
|
||||
/// |> translate(x = 0, y = 0, z = 20)
|
||||
/// |> rotate(axis = [0, 0, 1.0], angle = 45)
|
||||
///
|
||||
/// loft([profile001, profile002])
|
||||
|
@ -1,5 +1,8 @@
|
||||
use std::fmt::Write;
|
||||
|
||||
#[cfg(feature = "cli")]
|
||||
use clap::ValueEnum;
|
||||
|
||||
use crate::parsing::{
|
||||
ast::types::{
|
||||
Annotation, ArrayExpression, ArrayRangeExpression, BinaryExpression, BinaryOperator, BinaryPart, BodyItem,
|
||||
@ -864,10 +867,33 @@ impl Parameter {
|
||||
}
|
||||
}
|
||||
|
||||
/// Collect all the kcl files in a directory, recursively.
|
||||
lazy_static::lazy_static! {
|
||||
|
||||
pub static ref IMPORT_FILE_EXTENSIONS: Vec<String> = {
|
||||
let mut import_file_extensions = vec!["stp".to_string(), "glb".to_string(), "fbxb".to_string()];
|
||||
#[cfg(feature = "cli")]
|
||||
let named_extensions = kittycad::types::FileImportFormat::value_variants()
|
||||
.iter()
|
||||
.map(|x| format!("{}", x))
|
||||
.collect::<Vec<String>>();
|
||||
#[cfg(not(feature = "cli"))]
|
||||
let named_extensions = vec![]; // We don't really need this outside of the CLI.
|
||||
// Add all the default import formats.
|
||||
import_file_extensions.extend_from_slice(&named_extensions);
|
||||
import_file_extensions
|
||||
};
|
||||
|
||||
pub static ref RELEVANT_EXTENSIONS: Vec<String> = {
|
||||
let mut relevant_extensions = IMPORT_FILE_EXTENSIONS.clone();
|
||||
relevant_extensions.push("kcl".to_string());
|
||||
relevant_extensions
|
||||
};
|
||||
}
|
||||
|
||||
/// Collect all the kcl (and other relevant) files in a directory, recursively.
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[async_recursion::async_recursion]
|
||||
pub(crate) async fn walk_dir(dir: &std::path::PathBuf) -> Result<Vec<std::path::PathBuf>, anyhow::Error> {
|
||||
pub async fn walk_dir(dir: &std::path::PathBuf) -> Result<Vec<std::path::PathBuf>, anyhow::Error> {
|
||||
// Make sure we actually have a directory.
|
||||
if !dir.is_dir() {
|
||||
anyhow::bail!("`{}` is not a directory", dir.display());
|
||||
@ -881,7 +907,10 @@ pub(crate) async fn walk_dir(dir: &std::path::PathBuf) -> Result<Vec<std::path::
|
||||
|
||||
if path.is_dir() {
|
||||
files.extend(walk_dir(&path).await?);
|
||||
} else if path.extension().is_some_and(|ext| ext == "kcl") {
|
||||
} else if path
|
||||
.extension()
|
||||
.is_some_and(|ext| RELEVANT_EXTENSIONS.contains(&ext.to_string_lossy().to_string()))
|
||||
{
|
||||
files.push(path);
|
||||
}
|
||||
}
|
||||
@ -901,6 +930,8 @@ pub async fn recast_dir(dir: &std::path::Path, options: &crate::FormatOptions) -
|
||||
|
||||
let futures = files
|
||||
.into_iter()
|
||||
.filter(|file| file.extension().is_some_and(|ext| ext == "kcl")) // We only care about kcl
|
||||
// files here.
|
||||
.map(|file| {
|
||||
let options = options.clone();
|
||||
tokio::spawn(async move {
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
export import * from "std::math"
|
||||
export import * from "std::sketch"
|
||||
export import "std::turns"
|
||||
|
||||
/// A number
|
||||
///
|
||||
@ -245,11 +246,6 @@ export type Point2d = [number; 2]
|
||||
/// with type `Point3d`, use an array, e.g., `[0, 0, 0]` or `[5.0, 3.14, 6.8]`.
|
||||
export type Point3d = [number; 3]
|
||||
|
||||
export ZERO = 0
|
||||
export QUARTER_TURN = 90deg
|
||||
export HALF_TURN = 180deg
|
||||
export THREE_QUARTER_TURN = 270deg
|
||||
|
||||
export XY = {
|
||||
origin = { x = 0, y = 0, z = 0 },
|
||||
xAxis = { x = 1, y = 0, z = 0 },
|
||||
|
6
rust/kcl-lib/std/turns.kcl
Normal file
6
rust/kcl-lib/std/turns.kcl
Normal file
@ -0,0 +1,6 @@
|
||||
@no_std
|
||||
|
||||
export ZERO = 0
|
||||
export QUARTER_TURN = 90deg
|
||||
export HALF_TURN = 180deg
|
||||
export THREE_QUARTER_TURN = 270deg
|
@ -1,25 +1,25 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[76, 113, 4]"]
|
||||
3["Segment<br>[119, 136, 4]"]
|
||||
4["Segment<br>[142, 160, 4]"]
|
||||
5["Segment<br>[166, 184, 4]"]
|
||||
6["Segment<br>[190, 246, 4]"]
|
||||
7["Segment<br>[252, 259, 4]"]
|
||||
2["Path<br>[76, 113, 5]"]
|
||||
3["Segment<br>[119, 136, 5]"]
|
||||
4["Segment<br>[142, 160, 5]"]
|
||||
5["Segment<br>[166, 184, 5]"]
|
||||
6["Segment<br>[190, 246, 5]"]
|
||||
7["Segment<br>[252, 259, 5]"]
|
||||
8[Solid2d]
|
||||
end
|
||||
subgraph path25 [Path]
|
||||
25["Path<br>[76, 111, 5]"]
|
||||
26["Segment<br>[117, 134, 5]"]
|
||||
27["Segment<br>[140, 158, 5]"]
|
||||
28["Segment<br>[164, 182, 5]"]
|
||||
29["Segment<br>[188, 244, 5]"]
|
||||
30["Segment<br>[250, 257, 5]"]
|
||||
25["Path<br>[76, 111, 6]"]
|
||||
26["Segment<br>[117, 134, 6]"]
|
||||
27["Segment<br>[140, 158, 6]"]
|
||||
28["Segment<br>[164, 182, 6]"]
|
||||
29["Segment<br>[188, 244, 6]"]
|
||||
30["Segment<br>[250, 257, 6]"]
|
||||
31[Solid2d]
|
||||
end
|
||||
1["Plane<br>[47, 66, 4]"]
|
||||
9["Sweep Extrusion<br>[265, 287, 4]"]
|
||||
1["Plane<br>[47, 66, 5]"]
|
||||
9["Sweep Extrusion<br>[265, 287, 5]"]
|
||||
10[Wall]
|
||||
11[Wall]
|
||||
12[Wall]
|
||||
@ -34,8 +34,8 @@ flowchart LR
|
||||
21["SweepEdge Adjacent"]
|
||||
22["SweepEdge Opposite"]
|
||||
23["SweepEdge Adjacent"]
|
||||
24["Plane<br>[47, 66, 5]"]
|
||||
32["Sweep Extrusion<br>[263, 285, 5]"]
|
||||
24["Plane<br>[47, 66, 6]"]
|
||||
32["Sweep Extrusion<br>[263, 285, 6]"]
|
||||
33[Wall]
|
||||
34[Wall]
|
||||
35[Wall]
|
||||
|
@ -5,10 +5,10 @@ description: Variables in memory after executing assembly_mixed_units_cubes.kcl
|
||||
{
|
||||
"cubeIn": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
},
|
||||
"cubeMm": {
|
||||
"type": "Module",
|
||||
"value": 5
|
||||
"value": 6
|
||||
}
|
||||
}
|
||||
|
@ -1,17 +1,17 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[197, 232, 4]"]
|
||||
3["Segment<br>[197, 232, 4]"]
|
||||
2["Path<br>[197, 232, 5]"]
|
||||
3["Segment<br>[197, 232, 5]"]
|
||||
4[Solid2d]
|
||||
end
|
||||
subgraph path6 [Path]
|
||||
6["Path<br>[113, 148, 5]"]
|
||||
7["Segment<br>[113, 148, 5]"]
|
||||
6["Path<br>[113, 148, 6]"]
|
||||
7["Segment<br>[113, 148, 6]"]
|
||||
8[Solid2d]
|
||||
end
|
||||
1["Plane<br>[172, 191, 4]"]
|
||||
5["Plane<br>[88, 107, 5]"]
|
||||
1["Plane<br>[172, 191, 5]"]
|
||||
5["Plane<br>[88, 107, 6]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
|
@ -5,10 +5,10 @@ description: Variables in memory after executing assembly_non_default_units.kcl
|
||||
{
|
||||
"other1": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
},
|
||||
"other2": {
|
||||
"type": "Module",
|
||||
"value": 5
|
||||
"value": 6
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ description: Variables in memory after executing import_foreign.kcl
|
||||
{
|
||||
"cube": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
},
|
||||
"model": {
|
||||
"type": "ImportedGeometry",
|
||||
|
@ -151,54 +151,65 @@ description: Result of parsing import_transform.kcl
|
||||
"label": {
|
||||
"commentStart": 159,
|
||||
"end": 0,
|
||||
"name": "translate",
|
||||
"name": "x",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 171,
|
||||
"elements": [
|
||||
{
|
||||
"commentStart": 172,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 178,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 184,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
],
|
||||
"commentStart": 163,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "ArrayExpression",
|
||||
"type": "ArrayExpression"
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 169,
|
||||
"end": 0,
|
||||
"name": "y",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 173,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 179,
|
||||
"end": 0,
|
||||
"name": "z",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 183,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
@ -235,65 +246,76 @@ description: Result of parsing import_transform.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 205,
|
||||
"commentStart": 203,
|
||||
"end": 0,
|
||||
"name": "scale",
|
||||
"name": "x",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 213,
|
||||
"elements": [
|
||||
{
|
||||
"commentStart": 214,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 220,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 226,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
],
|
||||
"commentStart": 207,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "ArrayExpression",
|
||||
"type": "ArrayExpression"
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 213,
|
||||
"end": 0,
|
||||
"name": "y",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 217,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 223,
|
||||
"end": 0,
|
||||
"name": "z",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 227,
|
||||
"end": 0,
|
||||
"raw": "3.14",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 3.14,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"callee": {
|
||||
"abs_path": false,
|
||||
"commentStart": 196,
|
||||
"commentStart": 194,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 196,
|
||||
"commentStart": 194,
|
||||
"end": 0,
|
||||
"name": "scale",
|
||||
"start": 0,
|
||||
@ -303,13 +325,13 @@ description: Result of parsing import_transform.kcl
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
"commentStart": 196,
|
||||
"commentStart": 194,
|
||||
"end": 0,
|
||||
"start": 0,
|
||||
"type": "CallExpressionKw",
|
||||
"type": "CallExpressionKw",
|
||||
"unlabeled": {
|
||||
"commentStart": 202,
|
||||
"commentStart": 200,
|
||||
"end": 0,
|
||||
"start": 0,
|
||||
"type": "PipeSubstitution",
|
||||
|
@ -7,5 +7,5 @@ screw
|
||||
pitch = 3.14,
|
||||
yaw = 3.14,
|
||||
)
|
||||
|> translate(%, translate = [3.14, 3.14, 3.14])
|
||||
|> scale(%, scale = [3.14, 3.14, 3.14])
|
||||
|> translate(%, x = 3.14, y = 3.14, z = 3.14)
|
||||
|> scale(%, x = 3.14, y = 3.14, z = 3.14)
|
||||
|
@ -5,6 +5,6 @@ description: Variables in memory after executing import_transform.kcl
|
||||
{
|
||||
"screw": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
}
|
||||
}
|
||||
|
@ -11,5 +11,15 @@ screw
|
||||
pitch = 3.14,
|
||||
yaw = 3.14,
|
||||
)
|
||||
|> translate(%, translate = [3.14, 3.14, 3.14])
|
||||
|> scale(%, scale = [3.14, 3.14, 3.14])
|
||||
|> translate(
|
||||
%,
|
||||
x = 3.14,
|
||||
y = 3.14,
|
||||
z = 3.14,
|
||||
)
|
||||
|> scale(
|
||||
%,
|
||||
x = 3.14,
|
||||
y = 3.14,
|
||||
z = 3.14,
|
||||
)
|
||||
|
@ -1,12 +1,12 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[83, 119, 4]"]
|
||||
3["Segment<br>[83, 119, 4]"]
|
||||
2["Path<br>[83, 119, 5]"]
|
||||
3["Segment<br>[83, 119, 5]"]
|
||||
4[Solid2d]
|
||||
end
|
||||
1["Plane<br>[60, 77, 4]"]
|
||||
5["Sweep Extrusion<br>[125, 145, 4]"]
|
||||
1["Plane<br>[60, 77, 5]"]
|
||||
5["Sweep Extrusion<br>[125, 145, 5]"]
|
||||
6[Wall]
|
||||
7["Cap Start"]
|
||||
8["Cap End"]
|
||||
|
@ -111,6 +111,6 @@ description: Variables in memory after executing import_whole.kcl
|
||||
},
|
||||
"foo": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
}
|
||||
}
|
||||
|
554
rust/kcl-lib/tests/intersect_cubes/artifact_commands.snap
Normal file
554
rust/kcl-lib/tests/intersect_cubes/artifact_commands.snap
Normal file
@ -0,0 +1,554 @@
|
||||
---
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Artifact commands intersect_cubes.kcl
|
||||
---
|
||||
[
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "edge_lines_visible",
|
||||
"hidden": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "set_scene_units",
|
||||
"unit": "mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "object_visible",
|
||||
"object_id": "[uuid]",
|
||||
"hidden": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "object_visible",
|
||||
"object_id": "[uuid]",
|
||||
"hidden": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "make_plane",
|
||||
"origin": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"x_axis": {
|
||||
"x": 1.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"y_axis": {
|
||||
"x": 0.0,
|
||||
"y": 1.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"size": 60.0,
|
||||
"clobber": false,
|
||||
"hide": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "enable_sketch_mode",
|
||||
"entity_id": "[uuid]",
|
||||
"ortho": false,
|
||||
"animated": false,
|
||||
"adjust_camera": false,
|
||||
"planar_normal": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "start_path"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "move_path_pen",
|
||||
"path": "[uuid]",
|
||||
"to": {
|
||||
"x": -10.0,
|
||||
"y": -10.0,
|
||||
"z": 0.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "sketch_mode_disable"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extend_path",
|
||||
"path": "[uuid]",
|
||||
"segment": {
|
||||
"type": "line",
|
||||
"end": {
|
||||
"x": 10.0,
|
||||
"y": -10.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"relative": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extend_path",
|
||||
"path": "[uuid]",
|
||||
"segment": {
|
||||
"type": "line",
|
||||
"end": {
|
||||
"x": 10.0,
|
||||
"y": 10.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"relative": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extend_path",
|
||||
"path": "[uuid]",
|
||||
"segment": {
|
||||
"type": "line",
|
||||
"end": {
|
||||
"x": -10.0,
|
||||
"y": 10.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"relative": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "close_path",
|
||||
"path_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "enable_sketch_mode",
|
||||
"entity_id": "[uuid]",
|
||||
"ortho": false,
|
||||
"animated": false,
|
||||
"adjust_camera": false,
|
||||
"planar_normal": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extrude",
|
||||
"target": "[uuid]",
|
||||
"distance": 10.0,
|
||||
"faces": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "sketch_mode_disable"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "object_bring_to_front",
|
||||
"object_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_extrusion_face_info",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "make_plane",
|
||||
"origin": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"x_axis": {
|
||||
"x": 1.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"y_axis": {
|
||||
"x": 0.0,
|
||||
"y": 1.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"size": 60.0,
|
||||
"clobber": false,
|
||||
"hide": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "enable_sketch_mode",
|
||||
"entity_id": "[uuid]",
|
||||
"ortho": false,
|
||||
"animated": false,
|
||||
"adjust_camera": false,
|
||||
"planar_normal": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "start_path"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "move_path_pen",
|
||||
"path": "[uuid]",
|
||||
"to": {
|
||||
"x": -2.0,
|
||||
"y": -2.0,
|
||||
"z": 0.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "sketch_mode_disable"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extend_path",
|
||||
"path": "[uuid]",
|
||||
"segment": {
|
||||
"type": "line",
|
||||
"end": {
|
||||
"x": 18.0,
|
||||
"y": -2.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"relative": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extend_path",
|
||||
"path": "[uuid]",
|
||||
"segment": {
|
||||
"type": "line",
|
||||
"end": {
|
||||
"x": 18.0,
|
||||
"y": 18.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"relative": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extend_path",
|
||||
"path": "[uuid]",
|
||||
"segment": {
|
||||
"type": "line",
|
||||
"end": {
|
||||
"x": -2.0,
|
||||
"y": 18.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"relative": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "close_path",
|
||||
"path_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "enable_sketch_mode",
|
||||
"entity_id": "[uuid]",
|
||||
"ortho": false,
|
||||
"animated": false,
|
||||
"adjust_camera": false,
|
||||
"planar_normal": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "extrude",
|
||||
"target": "[uuid]",
|
||||
"distance": 10.0,
|
||||
"faces": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "sketch_mode_disable"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "object_bring_to_front",
|
||||
"object_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_extrusion_face_info",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_opposite_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cmdId": "[uuid]",
|
||||
"range": [],
|
||||
"command": {
|
||||
"type": "solid3d_get_next_adjacent_edge",
|
||||
"object_id": "[uuid]",
|
||||
"edge_id": "[uuid]",
|
||||
"face_id": "[uuid]"
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Artifact graph flowchart intersect_cubes.kcl
|
||||
extension: md
|
||||
snapshot_kind: binary
|
||||
---
|
@ -0,0 +1,117 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[52, 103, 0]"]
|
||||
3["Segment<br>[111, 163, 0]"]
|
||||
4["Segment<br>[171, 223, 0]"]
|
||||
5["Segment<br>[231, 283, 0]"]
|
||||
6["Segment<br>[291, 298, 0]"]
|
||||
7[Solid2d]
|
||||
end
|
||||
subgraph path24 [Path]
|
||||
24["Path<br>[52, 103, 0]"]
|
||||
25["Segment<br>[111, 163, 0]"]
|
||||
26["Segment<br>[171, 223, 0]"]
|
||||
27["Segment<br>[231, 283, 0]"]
|
||||
28["Segment<br>[291, 298, 0]"]
|
||||
29[Solid2d]
|
||||
end
|
||||
1["Plane<br>[27, 44, 0]"]
|
||||
8["Sweep Extrusion<br>[306, 326, 0]"]
|
||||
9[Wall]
|
||||
10[Wall]
|
||||
11[Wall]
|
||||
12[Wall]
|
||||
13["Cap Start"]
|
||||
14["Cap End"]
|
||||
15["SweepEdge Opposite"]
|
||||
16["SweepEdge Adjacent"]
|
||||
17["SweepEdge Opposite"]
|
||||
18["SweepEdge Adjacent"]
|
||||
19["SweepEdge Opposite"]
|
||||
20["SweepEdge Adjacent"]
|
||||
21["SweepEdge Opposite"]
|
||||
22["SweepEdge Adjacent"]
|
||||
23["Plane<br>[27, 44, 0]"]
|
||||
30["Sweep Extrusion<br>[306, 326, 0]"]
|
||||
31[Wall]
|
||||
32[Wall]
|
||||
33[Wall]
|
||||
34[Wall]
|
||||
35["Cap Start"]
|
||||
36["Cap End"]
|
||||
37["SweepEdge Opposite"]
|
||||
38["SweepEdge Adjacent"]
|
||||
39["SweepEdge Opposite"]
|
||||
40["SweepEdge Adjacent"]
|
||||
41["SweepEdge Opposite"]
|
||||
42["SweepEdge Adjacent"]
|
||||
43["SweepEdge Opposite"]
|
||||
44["SweepEdge Adjacent"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
2 --- 5
|
||||
2 --- 6
|
||||
2 ---- 8
|
||||
2 --- 7
|
||||
3 --- 9
|
||||
3 --- 15
|
||||
3 --- 16
|
||||
4 --- 10
|
||||
4 --- 17
|
||||
4 --- 18
|
||||
5 --- 11
|
||||
5 --- 19
|
||||
5 --- 20
|
||||
6 --- 12
|
||||
6 --- 21
|
||||
6 --- 22
|
||||
8 --- 9
|
||||
8 --- 10
|
||||
8 --- 11
|
||||
8 --- 12
|
||||
8 --- 13
|
||||
8 --- 14
|
||||
8 --- 15
|
||||
8 --- 16
|
||||
8 --- 17
|
||||
8 --- 18
|
||||
8 --- 19
|
||||
8 --- 20
|
||||
8 --- 21
|
||||
8 --- 22
|
||||
23 --- 24
|
||||
24 --- 25
|
||||
24 --- 26
|
||||
24 --- 27
|
||||
24 --- 28
|
||||
24 ---- 30
|
||||
24 --- 29
|
||||
25 --- 31
|
||||
25 --- 37
|
||||
25 --- 38
|
||||
26 --- 32
|
||||
26 --- 39
|
||||
26 --- 40
|
||||
27 --- 33
|
||||
27 --- 41
|
||||
27 --- 42
|
||||
28 --- 34
|
||||
28 --- 43
|
||||
28 --- 44
|
||||
30 --- 31
|
||||
30 --- 32
|
||||
30 --- 33
|
||||
30 --- 34
|
||||
30 --- 35
|
||||
30 --- 36
|
||||
30 --- 37
|
||||
30 --- 38
|
||||
30 --- 39
|
||||
30 --- 40
|
||||
30 --- 41
|
||||
30 --- 42
|
||||
30 --- 43
|
||||
30 --- 44
|
||||
```
|
1011
rust/kcl-lib/tests/intersect_cubes/ast.snap
Normal file
1011
rust/kcl-lib/tests/intersect_cubes/ast.snap
Normal file
File diff suppressed because it is too large
Load Diff
14
rust/kcl-lib/tests/intersect_cubes/input.kcl
Normal file
14
rust/kcl-lib/tests/intersect_cubes/input.kcl
Normal file
@ -0,0 +1,14 @@
|
||||
fn cube(center) {
|
||||
return startSketchOn(XY)
|
||||
|> startProfileAt([center[0] - 10, center[1] - 10], %)
|
||||
|> line(endAbsolute = [center[0] + 10, center[1] - 10])
|
||||
|> line(endAbsolute = [center[0] + 10, center[1] + 10])
|
||||
|> line(endAbsolute = [center[0] - 10, center[1] + 10])
|
||||
|> close()
|
||||
|> extrude(length = 10)
|
||||
}
|
||||
|
||||
part001 = cube([0, 0])
|
||||
part002 = cube([8, 8])
|
||||
|
||||
fullPart = intersect([part001, part002])
|
158
rust/kcl-lib/tests/intersect_cubes/ops.snap
Normal file
158
rust/kcl-lib/tests/intersect_cubes/ops.snap
Normal file
@ -0,0 +1,158 @@
|
||||
---
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Operations executed intersect_cubes.kcl
|
||||
---
|
||||
[
|
||||
{
|
||||
"type": "UserDefinedFunctionCall",
|
||||
"name": "cube",
|
||||
"functionSourceRange": [
|
||||
7,
|
||||
328,
|
||||
0
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"data": {
|
||||
"value": {
|
||||
"type": "Plane",
|
||||
"artifact_id": "[uuid]"
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"name": "startSketchOn",
|
||||
"sourceRange": [],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": null
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"length": {
|
||||
"value": {
|
||||
"type": "Number",
|
||||
"value": 10.0,
|
||||
"ty": {
|
||||
"type": "Default",
|
||||
"len": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"angle": {
|
||||
"type": "Degrees"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"name": "extrude",
|
||||
"sourceRange": [],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "UserDefinedFunctionReturn"
|
||||
},
|
||||
{
|
||||
"type": "UserDefinedFunctionCall",
|
||||
"name": "cube",
|
||||
"functionSourceRange": [
|
||||
7,
|
||||
328,
|
||||
0
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
"sourceRange": []
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"data": {
|
||||
"value": {
|
||||
"type": "Plane",
|
||||
"artifact_id": "[uuid]"
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"name": "startSketchOn",
|
||||
"sourceRange": [],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": null
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"length": {
|
||||
"value": {
|
||||
"type": "Number",
|
||||
"value": 10.0,
|
||||
"ty": {
|
||||
"type": "Default",
|
||||
"len": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"angle": {
|
||||
"type": "Degrees"
|
||||
}
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"name": "extrude",
|
||||
"sourceRange": [],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": {
|
||||
"value": {
|
||||
"type": "Sketch",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "UserDefinedFunctionReturn"
|
||||
},
|
||||
{
|
||||
"labeledArgs": {
|
||||
"solids": {
|
||||
"value": {
|
||||
"type": "Array",
|
||||
"value": [
|
||||
{
|
||||
"type": "Solid",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Solid",
|
||||
"value": {
|
||||
"artifactId": "[uuid]"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"name": "intersect",
|
||||
"sourceRange": [],
|
||||
"type": "StdLibCall",
|
||||
"unlabeledArg": null
|
||||
}
|
||||
]
|
543
rust/kcl-lib/tests/intersect_cubes/program_memory.snap
Normal file
543
rust/kcl-lib/tests/intersect_cubes/program_memory.snap
Normal file
@ -0,0 +1,543 @@
|
||||
---
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Variables in memory after executing intersect_cubes.kcl
|
||||
---
|
||||
{
|
||||
"cube": {
|
||||
"type": "Function"
|
||||
},
|
||||
"fullPart": {
|
||||
"type": "Solid",
|
||||
"value": {
|
||||
"type": "Solid",
|
||||
"id": "[uuid]",
|
||||
"artifactId": "[uuid]",
|
||||
"value": [
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
}
|
||||
],
|
||||
"sketch": {
|
||||
"type": "Sketch",
|
||||
"id": "[uuid]",
|
||||
"paths": [
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
10.0,
|
||||
-10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
10.0,
|
||||
-10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
10.0,
|
||||
10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
10.0,
|
||||
10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
-10.0,
|
||||
10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
-10.0,
|
||||
10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
}
|
||||
],
|
||||
"on": {
|
||||
"type": "plane",
|
||||
"id": "[uuid]",
|
||||
"artifactId": "[uuid]",
|
||||
"value": "XY",
|
||||
"origin": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"xAxis": {
|
||||
"x": 1.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"yAxis": {
|
||||
"x": 0.0,
|
||||
"y": 1.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"zAxis": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
},
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
"start": {
|
||||
"from": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"to": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"tag": null,
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"artifactId": "[uuid]",
|
||||
"originalId": "[uuid]",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
"height": 10.0,
|
||||
"startCapId": "[uuid]",
|
||||
"endCapId": "[uuid]",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"part001": {
|
||||
"type": "Solid",
|
||||
"value": {
|
||||
"type": "Solid",
|
||||
"id": "[uuid]",
|
||||
"artifactId": "[uuid]",
|
||||
"value": [
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
}
|
||||
],
|
||||
"sketch": {
|
||||
"type": "Sketch",
|
||||
"id": "[uuid]",
|
||||
"paths": [
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
10.0,
|
||||
-10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
10.0,
|
||||
-10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
10.0,
|
||||
10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
10.0,
|
||||
10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
-10.0,
|
||||
10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
-10.0,
|
||||
10.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
}
|
||||
],
|
||||
"on": {
|
||||
"type": "plane",
|
||||
"id": "[uuid]",
|
||||
"artifactId": "[uuid]",
|
||||
"value": "XY",
|
||||
"origin": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"xAxis": {
|
||||
"x": 1.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"yAxis": {
|
||||
"x": 0.0,
|
||||
"y": 1.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"zAxis": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
},
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
"start": {
|
||||
"from": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"to": [
|
||||
-10.0,
|
||||
-10.0
|
||||
],
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"tag": null,
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"artifactId": "[uuid]",
|
||||
"originalId": "[uuid]",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
"height": 10.0,
|
||||
"startCapId": "[uuid]",
|
||||
"endCapId": "[uuid]",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
}
|
||||
},
|
||||
"part002": {
|
||||
"type": "Solid",
|
||||
"value": {
|
||||
"type": "Solid",
|
||||
"id": "[uuid]",
|
||||
"artifactId": "[uuid]",
|
||||
"value": [
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
},
|
||||
{
|
||||
"faceId": "[uuid]",
|
||||
"id": "[uuid]",
|
||||
"sourceRange": [],
|
||||
"tag": null,
|
||||
"type": "extrudePlane"
|
||||
}
|
||||
],
|
||||
"sketch": {
|
||||
"type": "Sketch",
|
||||
"id": "[uuid]",
|
||||
"paths": [
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
-2.0,
|
||||
-2.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
18.0,
|
||||
-2.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
18.0,
|
||||
-2.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
18.0,
|
||||
18.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
18.0,
|
||||
18.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
-2.0,
|
||||
18.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
{
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
},
|
||||
"from": [
|
||||
-2.0,
|
||||
18.0
|
||||
],
|
||||
"tag": null,
|
||||
"to": [
|
||||
-2.0,
|
||||
-2.0
|
||||
],
|
||||
"type": "ToPoint",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
}
|
||||
],
|
||||
"on": {
|
||||
"type": "plane",
|
||||
"id": "[uuid]",
|
||||
"artifactId": "[uuid]",
|
||||
"value": "XY",
|
||||
"origin": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"xAxis": {
|
||||
"x": 1.0,
|
||||
"y": 0.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"yAxis": {
|
||||
"x": 0.0,
|
||||
"y": 1.0,
|
||||
"z": 0.0
|
||||
},
|
||||
"zAxis": {
|
||||
"x": 0.0,
|
||||
"y": 0.0,
|
||||
"z": 1.0
|
||||
},
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
"start": {
|
||||
"from": [
|
||||
-2.0,
|
||||
-2.0
|
||||
],
|
||||
"to": [
|
||||
-2.0,
|
||||
-2.0
|
||||
],
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
},
|
||||
"tag": null,
|
||||
"__geoMeta": {
|
||||
"id": "[uuid]",
|
||||
"sourceRange": []
|
||||
}
|
||||
},
|
||||
"artifactId": "[uuid]",
|
||||
"originalId": "[uuid]",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
},
|
||||
"height": 10.0,
|
||||
"startCapId": "[uuid]",
|
||||
"endCapId": "[uuid]",
|
||||
"units": {
|
||||
"type": "Mm"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
BIN
rust/kcl-lib/tests/intersect_cubes/rendered_model.png
Normal file
BIN
rust/kcl-lib/tests/intersect_cubes/rendered_model.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 67 KiB |
18
rust/kcl-lib/tests/intersect_cubes/unparsed.snap
Normal file
18
rust/kcl-lib/tests/intersect_cubes/unparsed.snap
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
source: kcl-lib/src/simulation_tests.rs
|
||||
description: Result of unparsing intersect_cubes.kcl
|
||||
---
|
||||
fn cube(center) {
|
||||
return startSketchOn(XY)
|
||||
|> startProfileAt([center[0] - 10, center[1] - 10], %)
|
||||
|> line(endAbsolute = [center[0] + 10, center[1] - 10])
|
||||
|> line(endAbsolute = [center[0] + 10, center[1] + 10])
|
||||
|> line(endAbsolute = [center[0] - 10, center[1] + 10])
|
||||
|> close()
|
||||
|> extrude(length = 10)
|
||||
}
|
||||
|
||||
part001 = cube([0, 0])
|
||||
part002 = cube([8, 8])
|
||||
|
||||
fullPart = intersect([part001, part002])
|
@ -1,239 +1,239 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[361, 394, 4]"]
|
||||
3["Segment<br>[402, 428, 4]"]
|
||||
4["Segment<br>[436, 489, 4]"]
|
||||
5["Segment<br>[497, 550, 4]"]
|
||||
6["Segment<br>[558, 612, 4]"]
|
||||
7["Segment<br>[620, 645, 4]"]
|
||||
8["Segment<br>[653, 673, 4]"]
|
||||
9["Segment<br>[681, 705, 4]"]
|
||||
10["Segment<br>[713, 766, 4]"]
|
||||
11["Segment<br>[774, 799, 4]"]
|
||||
12["Segment<br>[807, 827, 4]"]
|
||||
13["Segment<br>[835, 859, 4]"]
|
||||
14["Segment<br>[867, 919, 4]"]
|
||||
15["Segment<br>[927, 979, 4]"]
|
||||
16["Segment<br>[987, 1012, 4]"]
|
||||
17["Segment<br>[1020, 1044, 4]"]
|
||||
18["Segment<br>[1052, 1105, 4]"]
|
||||
19["Segment<br>[1113, 1138, 4]"]
|
||||
20["Segment<br>[1146, 1173, 4]"]
|
||||
21["Segment<br>[1181, 1233, 4]"]
|
||||
22["Segment<br>[1241, 1276, 4]"]
|
||||
23["Segment<br>[1284, 1291, 4]"]
|
||||
2["Path<br>[361, 394, 5]"]
|
||||
3["Segment<br>[402, 428, 5]"]
|
||||
4["Segment<br>[436, 489, 5]"]
|
||||
5["Segment<br>[497, 550, 5]"]
|
||||
6["Segment<br>[558, 612, 5]"]
|
||||
7["Segment<br>[620, 645, 5]"]
|
||||
8["Segment<br>[653, 673, 5]"]
|
||||
9["Segment<br>[681, 705, 5]"]
|
||||
10["Segment<br>[713, 766, 5]"]
|
||||
11["Segment<br>[774, 799, 5]"]
|
||||
12["Segment<br>[807, 827, 5]"]
|
||||
13["Segment<br>[835, 859, 5]"]
|
||||
14["Segment<br>[867, 919, 5]"]
|
||||
15["Segment<br>[927, 979, 5]"]
|
||||
16["Segment<br>[987, 1012, 5]"]
|
||||
17["Segment<br>[1020, 1044, 5]"]
|
||||
18["Segment<br>[1052, 1105, 5]"]
|
||||
19["Segment<br>[1113, 1138, 5]"]
|
||||
20["Segment<br>[1146, 1173, 5]"]
|
||||
21["Segment<br>[1181, 1233, 5]"]
|
||||
22["Segment<br>[1241, 1276, 5]"]
|
||||
23["Segment<br>[1284, 1291, 5]"]
|
||||
24[Solid2d]
|
||||
end
|
||||
subgraph path89 [Path]
|
||||
89["Path<br>[361, 394, 4]"]
|
||||
90["Segment<br>[402, 428, 4]"]
|
||||
91["Segment<br>[436, 489, 4]"]
|
||||
92["Segment<br>[497, 550, 4]"]
|
||||
93["Segment<br>[558, 612, 4]"]
|
||||
94["Segment<br>[620, 645, 4]"]
|
||||
95["Segment<br>[653, 673, 4]"]
|
||||
96["Segment<br>[681, 705, 4]"]
|
||||
97["Segment<br>[713, 766, 4]"]
|
||||
98["Segment<br>[774, 799, 4]"]
|
||||
99["Segment<br>[807, 827, 4]"]
|
||||
100["Segment<br>[835, 859, 4]"]
|
||||
101["Segment<br>[867, 919, 4]"]
|
||||
102["Segment<br>[927, 979, 4]"]
|
||||
103["Segment<br>[987, 1012, 4]"]
|
||||
104["Segment<br>[1020, 1044, 4]"]
|
||||
105["Segment<br>[1052, 1105, 4]"]
|
||||
106["Segment<br>[1113, 1138, 4]"]
|
||||
107["Segment<br>[1146, 1173, 4]"]
|
||||
108["Segment<br>[1181, 1233, 4]"]
|
||||
109["Segment<br>[1241, 1276, 4]"]
|
||||
110["Segment<br>[1284, 1291, 4]"]
|
||||
89["Path<br>[361, 394, 5]"]
|
||||
90["Segment<br>[402, 428, 5]"]
|
||||
91["Segment<br>[436, 489, 5]"]
|
||||
92["Segment<br>[497, 550, 5]"]
|
||||
93["Segment<br>[558, 612, 5]"]
|
||||
94["Segment<br>[620, 645, 5]"]
|
||||
95["Segment<br>[653, 673, 5]"]
|
||||
96["Segment<br>[681, 705, 5]"]
|
||||
97["Segment<br>[713, 766, 5]"]
|
||||
98["Segment<br>[774, 799, 5]"]
|
||||
99["Segment<br>[807, 827, 5]"]
|
||||
100["Segment<br>[835, 859, 5]"]
|
||||
101["Segment<br>[867, 919, 5]"]
|
||||
102["Segment<br>[927, 979, 5]"]
|
||||
103["Segment<br>[987, 1012, 5]"]
|
||||
104["Segment<br>[1020, 1044, 5]"]
|
||||
105["Segment<br>[1052, 1105, 5]"]
|
||||
106["Segment<br>[1113, 1138, 5]"]
|
||||
107["Segment<br>[1146, 1173, 5]"]
|
||||
108["Segment<br>[1181, 1233, 5]"]
|
||||
109["Segment<br>[1241, 1276, 5]"]
|
||||
110["Segment<br>[1284, 1291, 5]"]
|
||||
111[Solid2d]
|
||||
end
|
||||
subgraph path176 [Path]
|
||||
176["Path<br>[361, 394, 4]"]
|
||||
177["Segment<br>[402, 428, 4]"]
|
||||
178["Segment<br>[436, 489, 4]"]
|
||||
179["Segment<br>[497, 550, 4]"]
|
||||
180["Segment<br>[558, 612, 4]"]
|
||||
181["Segment<br>[620, 645, 4]"]
|
||||
182["Segment<br>[653, 673, 4]"]
|
||||
183["Segment<br>[681, 705, 4]"]
|
||||
184["Segment<br>[713, 766, 4]"]
|
||||
185["Segment<br>[774, 799, 4]"]
|
||||
186["Segment<br>[807, 827, 4]"]
|
||||
187["Segment<br>[835, 859, 4]"]
|
||||
188["Segment<br>[867, 919, 4]"]
|
||||
189["Segment<br>[927, 979, 4]"]
|
||||
190["Segment<br>[987, 1012, 4]"]
|
||||
191["Segment<br>[1020, 1044, 4]"]
|
||||
192["Segment<br>[1052, 1105, 4]"]
|
||||
193["Segment<br>[1113, 1138, 4]"]
|
||||
194["Segment<br>[1146, 1173, 4]"]
|
||||
195["Segment<br>[1181, 1233, 4]"]
|
||||
196["Segment<br>[1241, 1276, 4]"]
|
||||
197["Segment<br>[1284, 1291, 4]"]
|
||||
176["Path<br>[361, 394, 5]"]
|
||||
177["Segment<br>[402, 428, 5]"]
|
||||
178["Segment<br>[436, 489, 5]"]
|
||||
179["Segment<br>[497, 550, 5]"]
|
||||
180["Segment<br>[558, 612, 5]"]
|
||||
181["Segment<br>[620, 645, 5]"]
|
||||
182["Segment<br>[653, 673, 5]"]
|
||||
183["Segment<br>[681, 705, 5]"]
|
||||
184["Segment<br>[713, 766, 5]"]
|
||||
185["Segment<br>[774, 799, 5]"]
|
||||
186["Segment<br>[807, 827, 5]"]
|
||||
187["Segment<br>[835, 859, 5]"]
|
||||
188["Segment<br>[867, 919, 5]"]
|
||||
189["Segment<br>[927, 979, 5]"]
|
||||
190["Segment<br>[987, 1012, 5]"]
|
||||
191["Segment<br>[1020, 1044, 5]"]
|
||||
192["Segment<br>[1052, 1105, 5]"]
|
||||
193["Segment<br>[1113, 1138, 5]"]
|
||||
194["Segment<br>[1146, 1173, 5]"]
|
||||
195["Segment<br>[1181, 1233, 5]"]
|
||||
196["Segment<br>[1241, 1276, 5]"]
|
||||
197["Segment<br>[1284, 1291, 5]"]
|
||||
198[Solid2d]
|
||||
end
|
||||
subgraph path262 [Path]
|
||||
262["Path<br>[361, 394, 4]"]
|
||||
263["Segment<br>[402, 428, 4]"]
|
||||
264["Segment<br>[436, 489, 4]"]
|
||||
265["Segment<br>[497, 550, 4]"]
|
||||
266["Segment<br>[558, 612, 4]"]
|
||||
267["Segment<br>[620, 645, 4]"]
|
||||
268["Segment<br>[653, 673, 4]"]
|
||||
269["Segment<br>[681, 705, 4]"]
|
||||
270["Segment<br>[713, 766, 4]"]
|
||||
271["Segment<br>[774, 799, 4]"]
|
||||
272["Segment<br>[807, 827, 4]"]
|
||||
273["Segment<br>[835, 859, 4]"]
|
||||
274["Segment<br>[867, 919, 4]"]
|
||||
275["Segment<br>[927, 979, 4]"]
|
||||
276["Segment<br>[987, 1012, 4]"]
|
||||
277["Segment<br>[1020, 1044, 4]"]
|
||||
278["Segment<br>[1052, 1105, 4]"]
|
||||
279["Segment<br>[1113, 1138, 4]"]
|
||||
280["Segment<br>[1146, 1173, 4]"]
|
||||
281["Segment<br>[1181, 1233, 4]"]
|
||||
282["Segment<br>[1241, 1276, 4]"]
|
||||
283["Segment<br>[1284, 1291, 4]"]
|
||||
262["Path<br>[361, 394, 5]"]
|
||||
263["Segment<br>[402, 428, 5]"]
|
||||
264["Segment<br>[436, 489, 5]"]
|
||||
265["Segment<br>[497, 550, 5]"]
|
||||
266["Segment<br>[558, 612, 5]"]
|
||||
267["Segment<br>[620, 645, 5]"]
|
||||
268["Segment<br>[653, 673, 5]"]
|
||||
269["Segment<br>[681, 705, 5]"]
|
||||
270["Segment<br>[713, 766, 5]"]
|
||||
271["Segment<br>[774, 799, 5]"]
|
||||
272["Segment<br>[807, 827, 5]"]
|
||||
273["Segment<br>[835, 859, 5]"]
|
||||
274["Segment<br>[867, 919, 5]"]
|
||||
275["Segment<br>[927, 979, 5]"]
|
||||
276["Segment<br>[987, 1012, 5]"]
|
||||
277["Segment<br>[1020, 1044, 5]"]
|
||||
278["Segment<br>[1052, 1105, 5]"]
|
||||
279["Segment<br>[1113, 1138, 5]"]
|
||||
280["Segment<br>[1146, 1173, 5]"]
|
||||
281["Segment<br>[1181, 1233, 5]"]
|
||||
282["Segment<br>[1241, 1276, 5]"]
|
||||
283["Segment<br>[1284, 1291, 5]"]
|
||||
284[Solid2d]
|
||||
end
|
||||
subgraph path349 [Path]
|
||||
349["Path<br>[361, 394, 4]"]
|
||||
350["Segment<br>[402, 428, 4]"]
|
||||
351["Segment<br>[436, 489, 4]"]
|
||||
352["Segment<br>[497, 550, 4]"]
|
||||
353["Segment<br>[558, 612, 4]"]
|
||||
354["Segment<br>[620, 645, 4]"]
|
||||
355["Segment<br>[653, 673, 4]"]
|
||||
356["Segment<br>[681, 705, 4]"]
|
||||
357["Segment<br>[713, 766, 4]"]
|
||||
358["Segment<br>[774, 799, 4]"]
|
||||
359["Segment<br>[807, 827, 4]"]
|
||||
360["Segment<br>[835, 859, 4]"]
|
||||
361["Segment<br>[867, 919, 4]"]
|
||||
362["Segment<br>[927, 979, 4]"]
|
||||
363["Segment<br>[987, 1012, 4]"]
|
||||
364["Segment<br>[1020, 1044, 4]"]
|
||||
365["Segment<br>[1052, 1105, 4]"]
|
||||
366["Segment<br>[1113, 1138, 4]"]
|
||||
367["Segment<br>[1146, 1173, 4]"]
|
||||
368["Segment<br>[1181, 1233, 4]"]
|
||||
369["Segment<br>[1241, 1276, 4]"]
|
||||
370["Segment<br>[1284, 1291, 4]"]
|
||||
349["Path<br>[361, 394, 5]"]
|
||||
350["Segment<br>[402, 428, 5]"]
|
||||
351["Segment<br>[436, 489, 5]"]
|
||||
352["Segment<br>[497, 550, 5]"]
|
||||
353["Segment<br>[558, 612, 5]"]
|
||||
354["Segment<br>[620, 645, 5]"]
|
||||
355["Segment<br>[653, 673, 5]"]
|
||||
356["Segment<br>[681, 705, 5]"]
|
||||
357["Segment<br>[713, 766, 5]"]
|
||||
358["Segment<br>[774, 799, 5]"]
|
||||
359["Segment<br>[807, 827, 5]"]
|
||||
360["Segment<br>[835, 859, 5]"]
|
||||
361["Segment<br>[867, 919, 5]"]
|
||||
362["Segment<br>[927, 979, 5]"]
|
||||
363["Segment<br>[987, 1012, 5]"]
|
||||
364["Segment<br>[1020, 1044, 5]"]
|
||||
365["Segment<br>[1052, 1105, 5]"]
|
||||
366["Segment<br>[1113, 1138, 5]"]
|
||||
367["Segment<br>[1146, 1173, 5]"]
|
||||
368["Segment<br>[1181, 1233, 5]"]
|
||||
369["Segment<br>[1241, 1276, 5]"]
|
||||
370["Segment<br>[1284, 1291, 5]"]
|
||||
371[Solid2d]
|
||||
end
|
||||
subgraph path435 [Path]
|
||||
435["Path<br>[361, 394, 4]"]
|
||||
436["Segment<br>[402, 428, 4]"]
|
||||
437["Segment<br>[436, 489, 4]"]
|
||||
438["Segment<br>[497, 550, 4]"]
|
||||
439["Segment<br>[558, 612, 4]"]
|
||||
440["Segment<br>[620, 645, 4]"]
|
||||
441["Segment<br>[653, 673, 4]"]
|
||||
442["Segment<br>[681, 705, 4]"]
|
||||
443["Segment<br>[713, 766, 4]"]
|
||||
444["Segment<br>[774, 799, 4]"]
|
||||
445["Segment<br>[807, 827, 4]"]
|
||||
446["Segment<br>[835, 859, 4]"]
|
||||
447["Segment<br>[867, 919, 4]"]
|
||||
448["Segment<br>[927, 979, 4]"]
|
||||
449["Segment<br>[987, 1012, 4]"]
|
||||
450["Segment<br>[1020, 1044, 4]"]
|
||||
451["Segment<br>[1052, 1105, 4]"]
|
||||
452["Segment<br>[1113, 1138, 4]"]
|
||||
453["Segment<br>[1146, 1173, 4]"]
|
||||
454["Segment<br>[1181, 1233, 4]"]
|
||||
455["Segment<br>[1241, 1276, 4]"]
|
||||
456["Segment<br>[1284, 1291, 4]"]
|
||||
435["Path<br>[361, 394, 5]"]
|
||||
436["Segment<br>[402, 428, 5]"]
|
||||
437["Segment<br>[436, 489, 5]"]
|
||||
438["Segment<br>[497, 550, 5]"]
|
||||
439["Segment<br>[558, 612, 5]"]
|
||||
440["Segment<br>[620, 645, 5]"]
|
||||
441["Segment<br>[653, 673, 5]"]
|
||||
442["Segment<br>[681, 705, 5]"]
|
||||
443["Segment<br>[713, 766, 5]"]
|
||||
444["Segment<br>[774, 799, 5]"]
|
||||
445["Segment<br>[807, 827, 5]"]
|
||||
446["Segment<br>[835, 859, 5]"]
|
||||
447["Segment<br>[867, 919, 5]"]
|
||||
448["Segment<br>[927, 979, 5]"]
|
||||
449["Segment<br>[987, 1012, 5]"]
|
||||
450["Segment<br>[1020, 1044, 5]"]
|
||||
451["Segment<br>[1052, 1105, 5]"]
|
||||
452["Segment<br>[1113, 1138, 5]"]
|
||||
453["Segment<br>[1146, 1173, 5]"]
|
||||
454["Segment<br>[1181, 1233, 5]"]
|
||||
455["Segment<br>[1241, 1276, 5]"]
|
||||
456["Segment<br>[1284, 1291, 5]"]
|
||||
457[Solid2d]
|
||||
end
|
||||
subgraph path522 [Path]
|
||||
522["Path<br>[1685, 1709, 4]"]
|
||||
522["Path<br>[1685, 1709, 5]"]
|
||||
end
|
||||
subgraph path523 [Path]
|
||||
523["Path<br>[1717, 1847, 4]"]
|
||||
524["Segment<br>[1717, 1847, 4]"]
|
||||
525["Segment<br>[1717, 1847, 4]"]
|
||||
526["Segment<br>[1717, 1847, 4]"]
|
||||
527["Segment<br>[1717, 1847, 4]"]
|
||||
528["Segment<br>[1717, 1847, 4]"]
|
||||
529["Segment<br>[1717, 1847, 4]"]
|
||||
530["Segment<br>[1717, 1847, 4]"]
|
||||
523["Path<br>[1717, 1847, 5]"]
|
||||
524["Segment<br>[1717, 1847, 5]"]
|
||||
525["Segment<br>[1717, 1847, 5]"]
|
||||
526["Segment<br>[1717, 1847, 5]"]
|
||||
527["Segment<br>[1717, 1847, 5]"]
|
||||
528["Segment<br>[1717, 1847, 5]"]
|
||||
529["Segment<br>[1717, 1847, 5]"]
|
||||
530["Segment<br>[1717, 1847, 5]"]
|
||||
531[Solid2d]
|
||||
end
|
||||
subgraph path553 [Path]
|
||||
553["Path<br>[1685, 1709, 4]"]
|
||||
553["Path<br>[1685, 1709, 5]"]
|
||||
end
|
||||
subgraph path554 [Path]
|
||||
554["Path<br>[1717, 1847, 4]"]
|
||||
555["Segment<br>[1717, 1847, 4]"]
|
||||
556["Segment<br>[1717, 1847, 4]"]
|
||||
557["Segment<br>[1717, 1847, 4]"]
|
||||
558["Segment<br>[1717, 1847, 4]"]
|
||||
559["Segment<br>[1717, 1847, 4]"]
|
||||
560["Segment<br>[1717, 1847, 4]"]
|
||||
561["Segment<br>[1717, 1847, 4]"]
|
||||
554["Path<br>[1717, 1847, 5]"]
|
||||
555["Segment<br>[1717, 1847, 5]"]
|
||||
556["Segment<br>[1717, 1847, 5]"]
|
||||
557["Segment<br>[1717, 1847, 5]"]
|
||||
558["Segment<br>[1717, 1847, 5]"]
|
||||
559["Segment<br>[1717, 1847, 5]"]
|
||||
560["Segment<br>[1717, 1847, 5]"]
|
||||
561["Segment<br>[1717, 1847, 5]"]
|
||||
562[Solid2d]
|
||||
end
|
||||
subgraph path585 [Path]
|
||||
585["Path<br>[2123, 2150, 4]"]
|
||||
586["Segment<br>[2158, 2180, 4]"]
|
||||
587["Segment<br>[2188, 2210, 4]"]
|
||||
588["Segment<br>[2218, 2240, 4]"]
|
||||
589["Segment<br>[2248, 2271, 4]"]
|
||||
590["Segment<br>[2279, 2302, 4]"]
|
||||
591["Segment<br>[2310, 2345, 4]"]
|
||||
592["Segment<br>[2353, 2360, 4]"]
|
||||
585["Path<br>[2123, 2150, 5]"]
|
||||
586["Segment<br>[2158, 2180, 5]"]
|
||||
587["Segment<br>[2188, 2210, 5]"]
|
||||
588["Segment<br>[2218, 2240, 5]"]
|
||||
589["Segment<br>[2248, 2271, 5]"]
|
||||
590["Segment<br>[2279, 2302, 5]"]
|
||||
591["Segment<br>[2310, 2345, 5]"]
|
||||
592["Segment<br>[2353, 2360, 5]"]
|
||||
593[Solid2d]
|
||||
end
|
||||
subgraph path618 [Path]
|
||||
618["Path<br>[2632, 2661, 4]"]
|
||||
619["Segment<br>[2669, 2692, 4]"]
|
||||
620["Segment<br>[2700, 2725, 4]"]
|
||||
621["Segment<br>[2733, 2757, 4]"]
|
||||
622["Segment<br>[2765, 2789, 4]"]
|
||||
623["Segment<br>[2797, 2819, 4]"]
|
||||
624["Segment<br>[2827, 2862, 4]"]
|
||||
625["Segment<br>[2870, 2877, 4]"]
|
||||
618["Path<br>[2632, 2661, 5]"]
|
||||
619["Segment<br>[2669, 2692, 5]"]
|
||||
620["Segment<br>[2700, 2725, 5]"]
|
||||
621["Segment<br>[2733, 2757, 5]"]
|
||||
622["Segment<br>[2765, 2789, 5]"]
|
||||
623["Segment<br>[2797, 2819, 5]"]
|
||||
624["Segment<br>[2827, 2862, 5]"]
|
||||
625["Segment<br>[2870, 2877, 5]"]
|
||||
626[Solid2d]
|
||||
end
|
||||
subgraph path650 [Path]
|
||||
650["Path<br>[3152, 3179, 4]"]
|
||||
651["Segment<br>[3187, 3206, 4]"]
|
||||
652["Segment<br>[3214, 3304, 4]"]
|
||||
650["Path<br>[3152, 3179, 5]"]
|
||||
651["Segment<br>[3187, 3206, 5]"]
|
||||
652["Segment<br>[3214, 3304, 5]"]
|
||||
end
|
||||
subgraph path654 [Path]
|
||||
654["Path<br>[3404, 3437, 4]"]
|
||||
655["Segment<br>[3445, 3464, 4]"]
|
||||
656["Segment<br>[3472, 3494, 4]"]
|
||||
657["Segment<br>[3502, 3525, 4]"]
|
||||
658["Segment<br>[3533, 3553, 4]"]
|
||||
659["Segment<br>[3561, 3585, 4]"]
|
||||
660["Segment<br>[3593, 3616, 4]"]
|
||||
661["Segment<br>[3624, 3631, 4]"]
|
||||
654["Path<br>[3404, 3437, 5]"]
|
||||
655["Segment<br>[3445, 3464, 5]"]
|
||||
656["Segment<br>[3472, 3494, 5]"]
|
||||
657["Segment<br>[3502, 3525, 5]"]
|
||||
658["Segment<br>[3533, 3553, 5]"]
|
||||
659["Segment<br>[3561, 3585, 5]"]
|
||||
660["Segment<br>[3593, 3616, 5]"]
|
||||
661["Segment<br>[3624, 3631, 5]"]
|
||||
662[Solid2d]
|
||||
end
|
||||
subgraph path688 [Path]
|
||||
688["Path<br>[3152, 3179, 4]"]
|
||||
689["Segment<br>[3187, 3206, 4]"]
|
||||
690["Segment<br>[3214, 3304, 4]"]
|
||||
688["Path<br>[3152, 3179, 5]"]
|
||||
689["Segment<br>[3187, 3206, 5]"]
|
||||
690["Segment<br>[3214, 3304, 5]"]
|
||||
end
|
||||
subgraph path692 [Path]
|
||||
692["Path<br>[3404, 3437, 4]"]
|
||||
693["Segment<br>[3445, 3464, 4]"]
|
||||
694["Segment<br>[3472, 3494, 4]"]
|
||||
695["Segment<br>[3502, 3525, 4]"]
|
||||
696["Segment<br>[3533, 3553, 4]"]
|
||||
697["Segment<br>[3561, 3585, 4]"]
|
||||
698["Segment<br>[3593, 3616, 4]"]
|
||||
699["Segment<br>[3624, 3631, 4]"]
|
||||
692["Path<br>[3404, 3437, 5]"]
|
||||
693["Segment<br>[3445, 3464, 5]"]
|
||||
694["Segment<br>[3472, 3494, 5]"]
|
||||
695["Segment<br>[3502, 3525, 5]"]
|
||||
696["Segment<br>[3533, 3553, 5]"]
|
||||
697["Segment<br>[3561, 3585, 5]"]
|
||||
698["Segment<br>[3593, 3616, 5]"]
|
||||
699["Segment<br>[3624, 3631, 5]"]
|
||||
700[Solid2d]
|
||||
end
|
||||
1["Plane<br>[333, 353, 4]"]
|
||||
25["Sweep Extrusion<br>[1379, 1417, 4]"]
|
||||
1["Plane<br>[333, 353, 5]"]
|
||||
25["Sweep Extrusion<br>[1379, 1417, 5]"]
|
||||
26[Wall]
|
||||
27[Wall]
|
||||
28[Wall]
|
||||
@ -296,8 +296,8 @@ flowchart LR
|
||||
85["SweepEdge Adjacent"]
|
||||
86["SweepEdge Opposite"]
|
||||
87["SweepEdge Adjacent"]
|
||||
88["Plane<br>[333, 353, 4]"]
|
||||
112["Sweep Extrusion<br>[1455, 1494, 4]"]
|
||||
88["Plane<br>[333, 353, 5]"]
|
||||
112["Sweep Extrusion<br>[1455, 1494, 5]"]
|
||||
113[Wall]
|
||||
114[Wall]
|
||||
115[Wall]
|
||||
@ -361,7 +361,7 @@ flowchart LR
|
||||
173["SweepEdge Opposite"]
|
||||
174["SweepEdge Adjacent"]
|
||||
175["Plane<br>[823, 865, 0]"]
|
||||
199["Sweep Extrusion<br>[1379, 1417, 4]"]
|
||||
199["Sweep Extrusion<br>[1379, 1417, 5]"]
|
||||
200[Wall]
|
||||
201[Wall]
|
||||
202[Wall]
|
||||
@ -424,7 +424,7 @@ flowchart LR
|
||||
259["SweepEdge Adjacent"]
|
||||
260["SweepEdge Opposite"]
|
||||
261["SweepEdge Adjacent"]
|
||||
285["Sweep Extrusion<br>[1455, 1494, 4]"]
|
||||
285["Sweep Extrusion<br>[1455, 1494, 5]"]
|
||||
286[Wall]
|
||||
287[Wall]
|
||||
288[Wall]
|
||||
@ -488,7 +488,7 @@ flowchart LR
|
||||
346["SweepEdge Opposite"]
|
||||
347["SweepEdge Adjacent"]
|
||||
348["Plane<br>[875, 916, 0]"]
|
||||
372["Sweep Extrusion<br>[1379, 1417, 4]"]
|
||||
372["Sweep Extrusion<br>[1379, 1417, 5]"]
|
||||
373[Wall]
|
||||
374[Wall]
|
||||
375[Wall]
|
||||
@ -551,7 +551,7 @@ flowchart LR
|
||||
432["SweepEdge Adjacent"]
|
||||
433["SweepEdge Opposite"]
|
||||
434["SweepEdge Adjacent"]
|
||||
458["Sweep Extrusion<br>[1455, 1494, 4]"]
|
||||
458["Sweep Extrusion<br>[1455, 1494, 5]"]
|
||||
459[Wall]
|
||||
460[Wall]
|
||||
461[Wall]
|
||||
@ -615,7 +615,7 @@ flowchart LR
|
||||
519["SweepEdge Opposite"]
|
||||
520["SweepEdge Adjacent"]
|
||||
521["Plane<br>[975, 1017, 0]"]
|
||||
532["Sweep Extrusion<br>[1949, 1973, 4]"]
|
||||
532["Sweep Extrusion<br>[1949, 1973, 5]"]
|
||||
533[Wall]
|
||||
534[Wall]
|
||||
535[Wall]
|
||||
@ -636,7 +636,7 @@ flowchart LR
|
||||
550["SweepEdge Adjacent"]
|
||||
551["SweepEdge Opposite"]
|
||||
552["SweepEdge Adjacent"]
|
||||
563["Sweep Extrusion<br>[2015, 2039, 4]"]
|
||||
563["Sweep Extrusion<br>[2015, 2039, 5]"]
|
||||
564[Wall]
|
||||
565[Wall]
|
||||
566[Wall]
|
||||
@ -658,7 +658,7 @@ flowchart LR
|
||||
582["SweepEdge Opposite"]
|
||||
583["SweepEdge Adjacent"]
|
||||
584["Plane<br>[1068, 1135, 0]"]
|
||||
594["Sweep Extrusion<br>[2523, 2547, 4]"]
|
||||
594["Sweep Extrusion<br>[2523, 2547, 5]"]
|
||||
595[Wall]
|
||||
596[Wall]
|
||||
597[Wall]
|
||||
@ -679,10 +679,10 @@ flowchart LR
|
||||
612["SweepEdge Adjacent"]
|
||||
613["SweepEdge Opposite"]
|
||||
614["SweepEdge Adjacent"]
|
||||
615["Sweep Extrusion<br>[2523, 2547, 4]"]
|
||||
616["Sweep Extrusion<br>[2523, 2547, 4]"]
|
||||
615["Sweep Extrusion<br>[2523, 2547, 5]"]
|
||||
616["Sweep Extrusion<br>[2523, 2547, 5]"]
|
||||
617["Plane<br>[1205, 1272, 0]"]
|
||||
627["Sweep Extrusion<br>[3047, 3071, 4]"]
|
||||
627["Sweep Extrusion<br>[3047, 3071, 5]"]
|
||||
628[Wall]
|
||||
629[Wall]
|
||||
630[Wall]
|
||||
@ -703,10 +703,10 @@ flowchart LR
|
||||
645["SweepEdge Adjacent"]
|
||||
646["SweepEdge Opposite"]
|
||||
647["SweepEdge Adjacent"]
|
||||
648["Sweep Extrusion<br>[3047, 3071, 4]"]
|
||||
649["Plane<br>[3712, 3747, 4]"]
|
||||
653["Plane<br>[3778, 3807, 4]"]
|
||||
663["Sweep Sweep<br>[3819, 3846, 4]"]
|
||||
648["Sweep Extrusion<br>[3047, 3071, 5]"]
|
||||
649["Plane<br>[3712, 3747, 5]"]
|
||||
653["Plane<br>[3778, 3807, 5]"]
|
||||
663["Sweep Sweep<br>[3819, 3846, 5]"]
|
||||
664[Wall]
|
||||
665[Wall]
|
||||
666[Wall]
|
||||
@ -730,9 +730,9 @@ flowchart LR
|
||||
684["SweepEdge Adjacent"]
|
||||
685["SweepEdge Opposite"]
|
||||
686["SweepEdge Adjacent"]
|
||||
687["Plane<br>[3712, 3747, 4]"]
|
||||
691["Plane<br>[3778, 3807, 4]"]
|
||||
701["Sweep Sweep<br>[3819, 3846, 4]"]
|
||||
687["Plane<br>[3712, 3747, 5]"]
|
||||
691["Plane<br>[3778, 3807, 5]"]
|
||||
701["Sweep Sweep<br>[3819, 3846, 5]"]
|
||||
702[Wall]
|
||||
703[Wall]
|
||||
704[Wall]
|
||||
@ -756,18 +756,18 @@ flowchart LR
|
||||
722["SweepEdge Adjacent"]
|
||||
723["SweepEdge Opposite"]
|
||||
724["SweepEdge Adjacent"]
|
||||
725["StartSketchOnPlane<br>[333, 353, 4]"]
|
||||
726["StartSketchOnPlane<br>[333, 353, 4]"]
|
||||
727["StartSketchOnPlane<br>[333, 353, 4]"]
|
||||
728["StartSketchOnPlane<br>[333, 353, 4]"]
|
||||
729["StartSketchOnPlane<br>[1657, 1677, 4]"]
|
||||
730["StartSketchOnPlane<br>[1657, 1677, 4]"]
|
||||
731["StartSketchOnPlane<br>[2095, 2115, 4]"]
|
||||
732["StartSketchOnPlane<br>[2604, 2624, 4]"]
|
||||
733["StartSketchOnPlane<br>[3124, 3144, 4]"]
|
||||
734["StartSketchOnPlane<br>[3376, 3396, 4]"]
|
||||
735["StartSketchOnPlane<br>[3124, 3144, 4]"]
|
||||
736["StartSketchOnPlane<br>[3376, 3396, 4]"]
|
||||
725["StartSketchOnPlane<br>[333, 353, 5]"]
|
||||
726["StartSketchOnPlane<br>[333, 353, 5]"]
|
||||
727["StartSketchOnPlane<br>[333, 353, 5]"]
|
||||
728["StartSketchOnPlane<br>[333, 353, 5]"]
|
||||
729["StartSketchOnPlane<br>[1657, 1677, 5]"]
|
||||
730["StartSketchOnPlane<br>[1657, 1677, 5]"]
|
||||
731["StartSketchOnPlane<br>[2095, 2115, 5]"]
|
||||
732["StartSketchOnPlane<br>[2604, 2624, 5]"]
|
||||
733["StartSketchOnPlane<br>[3124, 3144, 5]"]
|
||||
734["StartSketchOnPlane<br>[3376, 3396, 5]"]
|
||||
735["StartSketchOnPlane<br>[3124, 3144, 5]"]
|
||||
736["StartSketchOnPlane<br>[3376, 3396, 5]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
|
@ -9,7 +9,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
1331,
|
||||
1606,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -21,7 +21,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
309,
|
||||
1312,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -77,7 +77,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
309,
|
||||
1312,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -248,7 +248,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
1331,
|
||||
1606,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -260,7 +260,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
309,
|
||||
1312,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -316,7 +316,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
309,
|
||||
1312,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -487,7 +487,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
1331,
|
||||
1606,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -499,7 +499,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
309,
|
||||
1312,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -555,7 +555,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
309,
|
||||
1312,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -726,7 +726,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
1889,
|
||||
2052,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -738,7 +738,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
1626,
|
||||
1868,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -800,7 +800,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
1626,
|
||||
1868,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -889,7 +889,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
2474,
|
||||
2560,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -901,7 +901,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
2071,
|
||||
2453,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1007,7 +1007,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
2993,
|
||||
3084,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1019,7 +1019,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
2580,
|
||||
2972,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1095,7 +1095,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
3671,
|
||||
3859,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1131,7 +1131,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
3100,
|
||||
3325,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1191,7 +1191,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
3344,
|
||||
3652,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1249,7 +1249,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
3671,
|
||||
3859,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1285,7 +1285,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
3100,
|
||||
3325,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1345,7 +1345,7 @@ description: Operations executed bench.kcl
|
||||
"functionSourceRange": [
|
||||
3344,
|
||||
3652,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
|
@ -1,264 +1,264 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[567, 618, 5]"]
|
||||
3["Segment<br>[567, 618, 5]"]
|
||||
2["Path<br>[567, 618, 6]"]
|
||||
3["Segment<br>[567, 618, 6]"]
|
||||
4[Solid2d]
|
||||
end
|
||||
subgraph path11 [Path]
|
||||
11["Path<br>[803, 859, 5]"]
|
||||
12["Segment<br>[803, 859, 5]"]
|
||||
11["Path<br>[803, 859, 6]"]
|
||||
12["Segment<br>[803, 859, 6]"]
|
||||
13[Solid2d]
|
||||
end
|
||||
subgraph path19 [Path]
|
||||
19["Path<br>[984, 1037, 5]"]
|
||||
20["Segment<br>[984, 1037, 5]"]
|
||||
19["Path<br>[984, 1037, 6]"]
|
||||
20["Segment<br>[984, 1037, 6]"]
|
||||
21[Solid2d]
|
||||
end
|
||||
subgraph path30 [Path]
|
||||
30["Path<br>[1420, 1460, 5]"]
|
||||
31["Segment<br>[1420, 1460, 5]"]
|
||||
30["Path<br>[1420, 1460, 6]"]
|
||||
31["Segment<br>[1420, 1460, 6]"]
|
||||
32[Solid2d]
|
||||
end
|
||||
subgraph path38 [Path]
|
||||
38["Path<br>[1564, 1615, 5]"]
|
||||
39["Segment<br>[1564, 1615, 5]"]
|
||||
38["Path<br>[1564, 1615, 6]"]
|
||||
39["Segment<br>[1564, 1615, 6]"]
|
||||
40[Solid2d]
|
||||
end
|
||||
subgraph path47 [Path]
|
||||
47["Path<br>[1748, 1801, 5]"]
|
||||
48["Segment<br>[1748, 1801, 5]"]
|
||||
47["Path<br>[1748, 1801, 6]"]
|
||||
48["Segment<br>[1748, 1801, 6]"]
|
||||
49[Solid2d]
|
||||
end
|
||||
subgraph path58 [Path]
|
||||
58["Path<br>[2044, 2116, 5]"]
|
||||
59["Segment<br>[2044, 2116, 5]"]
|
||||
58["Path<br>[2044, 2116, 6]"]
|
||||
59["Segment<br>[2044, 2116, 6]"]
|
||||
60[Solid2d]
|
||||
end
|
||||
subgraph path81 [Path]
|
||||
81["Path<br>[2373, 2404, 5]"]
|
||||
82["Segment<br>[2410, 2430, 5]"]
|
||||
83["Segment<br>[2436, 2456, 5]"]
|
||||
84["Segment<br>[2462, 2483, 5]"]
|
||||
85["Segment<br>[2489, 2545, 5]"]
|
||||
86["Segment<br>[2551, 2558, 5]"]
|
||||
81["Path<br>[2373, 2404, 6]"]
|
||||
82["Segment<br>[2410, 2430, 6]"]
|
||||
83["Segment<br>[2436, 2456, 6]"]
|
||||
84["Segment<br>[2462, 2483, 6]"]
|
||||
85["Segment<br>[2489, 2545, 6]"]
|
||||
86["Segment<br>[2551, 2558, 6]"]
|
||||
87[Solid2d]
|
||||
end
|
||||
subgraph path106 [Path]
|
||||
106["Path<br>[2860, 2892, 5]"]
|
||||
107["Segment<br>[2898, 2919, 5]"]
|
||||
108["Segment<br>[2925, 2945, 5]"]
|
||||
109["Segment<br>[2951, 2971, 5]"]
|
||||
110["Segment<br>[2977, 3033, 5]"]
|
||||
111["Segment<br>[3039, 3046, 5]"]
|
||||
106["Path<br>[2860, 2892, 6]"]
|
||||
107["Segment<br>[2898, 2919, 6]"]
|
||||
108["Segment<br>[2925, 2945, 6]"]
|
||||
109["Segment<br>[2951, 2971, 6]"]
|
||||
110["Segment<br>[2977, 3033, 6]"]
|
||||
111["Segment<br>[3039, 3046, 6]"]
|
||||
112[Solid2d]
|
||||
end
|
||||
subgraph path132 [Path]
|
||||
132["Path<br>[350, 406, 4]"]
|
||||
133["Segment<br>[350, 406, 4]"]
|
||||
132["Path<br>[350, 406, 5]"]
|
||||
133["Segment<br>[350, 406, 5]"]
|
||||
134[Solid2d]
|
||||
end
|
||||
subgraph path135 [Path]
|
||||
135["Path<br>[417, 473, 4]"]
|
||||
136["Segment<br>[417, 473, 4]"]
|
||||
135["Path<br>[417, 473, 5]"]
|
||||
136["Segment<br>[417, 473, 5]"]
|
||||
137[Solid2d]
|
||||
end
|
||||
subgraph path144 [Path]
|
||||
144["Path<br>[638, 694, 4]"]
|
||||
145["Segment<br>[638, 694, 4]"]
|
||||
144["Path<br>[638, 694, 5]"]
|
||||
145["Segment<br>[638, 694, 5]"]
|
||||
146[Solid2d]
|
||||
end
|
||||
subgraph path147 [Path]
|
||||
147["Path<br>[705, 761, 4]"]
|
||||
148["Segment<br>[705, 761, 4]"]
|
||||
147["Path<br>[705, 761, 5]"]
|
||||
148["Segment<br>[705, 761, 5]"]
|
||||
149[Solid2d]
|
||||
end
|
||||
subgraph path156 [Path]
|
||||
156["Path<br>[905, 959, 4]"]
|
||||
157["Segment<br>[905, 959, 4]"]
|
||||
156["Path<br>[905, 959, 5]"]
|
||||
157["Segment<br>[905, 959, 5]"]
|
||||
158[Solid2d]
|
||||
end
|
||||
subgraph path167 [Path]
|
||||
167["Path<br>[1237, 1297, 4]"]
|
||||
168["Segment<br>[1237, 1297, 4]"]
|
||||
167["Path<br>[1237, 1297, 5]"]
|
||||
168["Segment<br>[1237, 1297, 5]"]
|
||||
169[Solid2d]
|
||||
end
|
||||
subgraph path179 [Path]
|
||||
179["Path<br>[1655, 1701, 4]"]
|
||||
180["Segment<br>[1707, 1759, 4]"]
|
||||
181["Segment<br>[1765, 1870, 4]"]
|
||||
182["Segment<br>[1876, 1898, 4]"]
|
||||
183["Segment<br>[1904, 1960, 4]"]
|
||||
184["Segment<br>[1966, 1973, 4]"]
|
||||
179["Path<br>[1655, 1701, 5]"]
|
||||
180["Segment<br>[1707, 1759, 5]"]
|
||||
181["Segment<br>[1765, 1870, 5]"]
|
||||
182["Segment<br>[1876, 1898, 5]"]
|
||||
183["Segment<br>[1904, 1960, 5]"]
|
||||
184["Segment<br>[1966, 1973, 5]"]
|
||||
185[Solid2d]
|
||||
end
|
||||
subgraph path195 [Path]
|
||||
195["Path<br>[2107, 2153, 4]"]
|
||||
196["Segment<br>[2159, 2211, 4]"]
|
||||
197["Segment<br>[2217, 2324, 4]"]
|
||||
198["Segment<br>[2330, 2367, 4]"]
|
||||
199["Segment<br>[2373, 2429, 4]"]
|
||||
200["Segment<br>[2435, 2442, 4]"]
|
||||
195["Path<br>[2107, 2153, 5]"]
|
||||
196["Segment<br>[2159, 2211, 5]"]
|
||||
197["Segment<br>[2217, 2324, 5]"]
|
||||
198["Segment<br>[2330, 2367, 5]"]
|
||||
199["Segment<br>[2373, 2429, 5]"]
|
||||
200["Segment<br>[2435, 2442, 5]"]
|
||||
201[Solid2d]
|
||||
end
|
||||
subgraph path212 [Path]
|
||||
212["Path<br>[2953, 3000, 4]"]
|
||||
213["Segment<br>[3008, 3348, 4]"]
|
||||
214["Segment<br>[3356, 3388, 4]"]
|
||||
215["Segment<br>[3396, 3740, 4]"]
|
||||
216["Segment<br>[3748, 3804, 4]"]
|
||||
217["Segment<br>[3812, 3819, 4]"]
|
||||
212["Path<br>[2953, 3000, 5]"]
|
||||
213["Segment<br>[3008, 3348, 5]"]
|
||||
214["Segment<br>[3356, 3388, 5]"]
|
||||
215["Segment<br>[3396, 3740, 5]"]
|
||||
216["Segment<br>[3748, 3804, 5]"]
|
||||
217["Segment<br>[3812, 3819, 5]"]
|
||||
218[Solid2d]
|
||||
end
|
||||
subgraph path235 [Path]
|
||||
235["Path<br>[2953, 3000, 4]"]
|
||||
236["Segment<br>[3008, 3348, 4]"]
|
||||
237["Segment<br>[3356, 3388, 4]"]
|
||||
238["Segment<br>[3396, 3740, 4]"]
|
||||
239["Segment<br>[3748, 3804, 4]"]
|
||||
240["Segment<br>[3812, 3819, 4]"]
|
||||
235["Path<br>[2953, 3000, 5]"]
|
||||
236["Segment<br>[3008, 3348, 5]"]
|
||||
237["Segment<br>[3356, 3388, 5]"]
|
||||
238["Segment<br>[3396, 3740, 5]"]
|
||||
239["Segment<br>[3748, 3804, 5]"]
|
||||
240["Segment<br>[3812, 3819, 5]"]
|
||||
241[Solid2d]
|
||||
end
|
||||
subgraph path258 [Path]
|
||||
258["Path<br>[4347, 4442, 4]"]
|
||||
259["Segment<br>[4448, 4481, 4]"]
|
||||
260["Segment<br>[4487, 4538, 4]"]
|
||||
261["Segment<br>[4544, 4577, 4]"]
|
||||
262["Segment<br>[4583, 4633, 4]"]
|
||||
263["Segment<br>[4639, 4680, 4]"]
|
||||
264["Segment<br>[4686, 4735, 4]"]
|
||||
265["Segment<br>[4741, 4774, 4]"]
|
||||
266["Segment<br>[4780, 4814, 4]"]
|
||||
267["Segment<br>[4820, 4854, 4]"]
|
||||
268["Segment<br>[4860, 4912, 4]"]
|
||||
269["Segment<br>[4918, 4952, 4]"]
|
||||
270["Segment<br>[4958, 5034, 4]"]
|
||||
271["Segment<br>[5040, 5073, 4]"]
|
||||
272["Segment<br>[5079, 5155, 4]"]
|
||||
273["Segment<br>[5161, 5195, 4]"]
|
||||
274["Segment<br>[5201, 5275, 4]"]
|
||||
275["Segment<br>[5281, 5315, 4]"]
|
||||
276["Segment<br>[5321, 5372, 4]"]
|
||||
277["Segment<br>[5378, 5440, 4]"]
|
||||
278["Segment<br>[5446, 5497, 4]"]
|
||||
279["Segment<br>[5503, 5537, 4]"]
|
||||
280["Segment<br>[5543, 5576, 4]"]
|
||||
281["Segment<br>[5582, 5615, 4]"]
|
||||
282["Segment<br>[5621, 5628, 4]"]
|
||||
258["Path<br>[4347, 4442, 5]"]
|
||||
259["Segment<br>[4448, 4481, 5]"]
|
||||
260["Segment<br>[4487, 4538, 5]"]
|
||||
261["Segment<br>[4544, 4577, 5]"]
|
||||
262["Segment<br>[4583, 4633, 5]"]
|
||||
263["Segment<br>[4639, 4680, 5]"]
|
||||
264["Segment<br>[4686, 4735, 5]"]
|
||||
265["Segment<br>[4741, 4774, 5]"]
|
||||
266["Segment<br>[4780, 4814, 5]"]
|
||||
267["Segment<br>[4820, 4854, 5]"]
|
||||
268["Segment<br>[4860, 4912, 5]"]
|
||||
269["Segment<br>[4918, 4952, 5]"]
|
||||
270["Segment<br>[4958, 5034, 5]"]
|
||||
271["Segment<br>[5040, 5073, 5]"]
|
||||
272["Segment<br>[5079, 5155, 5]"]
|
||||
273["Segment<br>[5161, 5195, 5]"]
|
||||
274["Segment<br>[5201, 5275, 5]"]
|
||||
275["Segment<br>[5281, 5315, 5]"]
|
||||
276["Segment<br>[5321, 5372, 5]"]
|
||||
277["Segment<br>[5378, 5440, 5]"]
|
||||
278["Segment<br>[5446, 5497, 5]"]
|
||||
279["Segment<br>[5503, 5537, 5]"]
|
||||
280["Segment<br>[5543, 5576, 5]"]
|
||||
281["Segment<br>[5582, 5615, 5]"]
|
||||
282["Segment<br>[5621, 5628, 5]"]
|
||||
283[Solid2d]
|
||||
end
|
||||
subgraph path334 [Path]
|
||||
334["Path<br>[740, 780, 7]"]
|
||||
335["Segment<br>[788, 850, 7]"]
|
||||
336["Segment<br>[858, 894, 7]"]
|
||||
337["Segment<br>[902, 932, 7]"]
|
||||
338["Segment<br>[940, 992, 7]"]
|
||||
339["Segment<br>[1000, 1040, 7]"]
|
||||
340["Segment<br>[1048, 1083, 7]"]
|
||||
341["Segment<br>[1091, 1129, 7]"]
|
||||
342["Segment<br>[1137, 1159, 7]"]
|
||||
343["Segment<br>[1167, 1174, 7]"]
|
||||
334["Path<br>[740, 780, 8]"]
|
||||
335["Segment<br>[788, 850, 8]"]
|
||||
336["Segment<br>[858, 894, 8]"]
|
||||
337["Segment<br>[902, 932, 8]"]
|
||||
338["Segment<br>[940, 992, 8]"]
|
||||
339["Segment<br>[1000, 1040, 8]"]
|
||||
340["Segment<br>[1048, 1083, 8]"]
|
||||
341["Segment<br>[1091, 1129, 8]"]
|
||||
342["Segment<br>[1137, 1159, 8]"]
|
||||
343["Segment<br>[1167, 1174, 8]"]
|
||||
344[Solid2d]
|
||||
end
|
||||
subgraph path365 [Path]
|
||||
365["Path<br>[507, 588, 6]"]
|
||||
366["Segment<br>[594, 695, 6]"]
|
||||
367["Segment<br>[701, 786, 6]"]
|
||||
368["Segment<br>[792, 876, 6]"]
|
||||
369["Segment<br>[882, 968, 6]"]
|
||||
370["Segment<br>[974, 1059, 6]"]
|
||||
371["Segment<br>[1065, 1151, 6]"]
|
||||
372["Segment<br>[1157, 1280, 6]"]
|
||||
373["Segment<br>[1286, 1372, 6]"]
|
||||
374["Segment<br>[1378, 1513, 6]"]
|
||||
375["Segment<br>[1519, 1605, 6]"]
|
||||
376["Segment<br>[1611, 1735, 6]"]
|
||||
377["Segment<br>[1741, 1827, 6]"]
|
||||
378["Segment<br>[1833, 1918, 6]"]
|
||||
379["Segment<br>[1924, 2010, 6]"]
|
||||
380["Segment<br>[2016, 2101, 6]"]
|
||||
381["Segment<br>[2107, 2192, 6]"]
|
||||
382["Segment<br>[2198, 2205, 6]"]
|
||||
365["Path<br>[507, 588, 7]"]
|
||||
366["Segment<br>[594, 695, 7]"]
|
||||
367["Segment<br>[701, 786, 7]"]
|
||||
368["Segment<br>[792, 876, 7]"]
|
||||
369["Segment<br>[882, 968, 7]"]
|
||||
370["Segment<br>[974, 1059, 7]"]
|
||||
371["Segment<br>[1065, 1151, 7]"]
|
||||
372["Segment<br>[1157, 1280, 7]"]
|
||||
373["Segment<br>[1286, 1372, 7]"]
|
||||
374["Segment<br>[1378, 1513, 7]"]
|
||||
375["Segment<br>[1519, 1605, 7]"]
|
||||
376["Segment<br>[1611, 1735, 7]"]
|
||||
377["Segment<br>[1741, 1827, 7]"]
|
||||
378["Segment<br>[1833, 1918, 7]"]
|
||||
379["Segment<br>[1924, 2010, 7]"]
|
||||
380["Segment<br>[2016, 2101, 7]"]
|
||||
381["Segment<br>[2107, 2192, 7]"]
|
||||
382["Segment<br>[2198, 2205, 7]"]
|
||||
383[Solid2d]
|
||||
end
|
||||
subgraph path439 [Path]
|
||||
439["Path<br>[483, 540, 8]"]
|
||||
440["Segment<br>[546, 680, 8]"]
|
||||
441["Segment<br>[686, 741, 8]"]
|
||||
442["Segment<br>[747, 844, 8]"]
|
||||
443["Segment<br>[850, 882, 8]"]
|
||||
444["Segment<br>[888, 920, 8]"]
|
||||
445["Segment<br>[926, 957, 8]"]
|
||||
446["Segment<br>[963, 1078, 8]"]
|
||||
447["Segment<br>[1084, 1116, 8]"]
|
||||
448["Segment<br>[1122, 1154, 8]"]
|
||||
449["Segment<br>[1160, 1191, 8]"]
|
||||
450["Segment<br>[1197, 1290, 8]"]
|
||||
451["Segment<br>[1296, 1351, 8]"]
|
||||
452["Segment<br>[1357, 1430, 8]"]
|
||||
453["Segment<br>[1436, 1443, 8]"]
|
||||
439["Path<br>[483, 540, 9]"]
|
||||
440["Segment<br>[546, 680, 9]"]
|
||||
441["Segment<br>[686, 741, 9]"]
|
||||
442["Segment<br>[747, 844, 9]"]
|
||||
443["Segment<br>[850, 882, 9]"]
|
||||
444["Segment<br>[888, 920, 9]"]
|
||||
445["Segment<br>[926, 957, 9]"]
|
||||
446["Segment<br>[963, 1078, 9]"]
|
||||
447["Segment<br>[1084, 1116, 9]"]
|
||||
448["Segment<br>[1122, 1154, 9]"]
|
||||
449["Segment<br>[1160, 1191, 9]"]
|
||||
450["Segment<br>[1197, 1290, 9]"]
|
||||
451["Segment<br>[1296, 1351, 9]"]
|
||||
452["Segment<br>[1357, 1430, 9]"]
|
||||
453["Segment<br>[1436, 1443, 9]"]
|
||||
454[Solid2d]
|
||||
end
|
||||
1["Plane<br>[544, 561, 5]"]
|
||||
5["Sweep Extrusion<br>[627, 683, 5]"]
|
||||
1["Plane<br>[544, 561, 6]"]
|
||||
5["Sweep Extrusion<br>[627, 683, 6]"]
|
||||
6[Wall]
|
||||
7["Cap Start"]
|
||||
8["Cap End"]
|
||||
9["SweepEdge Opposite"]
|
||||
10["SweepEdge Adjacent"]
|
||||
14["Sweep Extrusion<br>[872, 934, 5]"]
|
||||
14["Sweep Extrusion<br>[872, 934, 6]"]
|
||||
15[Wall]
|
||||
16["Cap End"]
|
||||
17["SweepEdge Opposite"]
|
||||
18["SweepEdge Adjacent"]
|
||||
22["Sweep Extrusion<br>[1184, 1263, 5]"]
|
||||
22["Sweep Extrusion<br>[1184, 1263, 6]"]
|
||||
23[Wall]
|
||||
24["SweepEdge Opposite"]
|
||||
25["SweepEdge Adjacent"]
|
||||
26["Sweep Extrusion<br>[1184, 1263, 5]"]
|
||||
27["Sweep Extrusion<br>[1184, 1263, 5]"]
|
||||
28["Sweep Extrusion<br>[1184, 1263, 5]"]
|
||||
29["Sweep Extrusion<br>[1184, 1263, 5]"]
|
||||
33["Sweep Extrusion<br>[1466, 1499, 5]"]
|
||||
26["Sweep Extrusion<br>[1184, 1263, 6]"]
|
||||
27["Sweep Extrusion<br>[1184, 1263, 6]"]
|
||||
28["Sweep Extrusion<br>[1184, 1263, 6]"]
|
||||
29["Sweep Extrusion<br>[1184, 1263, 6]"]
|
||||
33["Sweep Extrusion<br>[1466, 1499, 6]"]
|
||||
34[Wall]
|
||||
35["Cap End"]
|
||||
36["SweepEdge Opposite"]
|
||||
37["SweepEdge Adjacent"]
|
||||
41["Sweep Extrusion<br>[1630, 1695, 5]"]
|
||||
41["Sweep Extrusion<br>[1630, 1695, 6]"]
|
||||
42[Wall]
|
||||
43["Cap Start"]
|
||||
44["Cap End"]
|
||||
45["SweepEdge Opposite"]
|
||||
46["SweepEdge Adjacent"]
|
||||
50["Sweep Extrusion<br>[1948, 1992, 5]"]
|
||||
50["Sweep Extrusion<br>[1948, 1992, 6]"]
|
||||
51[Wall]
|
||||
52["SweepEdge Opposite"]
|
||||
53["SweepEdge Adjacent"]
|
||||
54["Sweep Extrusion<br>[1948, 1992, 5]"]
|
||||
55["Sweep Extrusion<br>[1948, 1992, 5]"]
|
||||
56["Sweep Extrusion<br>[1948, 1992, 5]"]
|
||||
57["Sweep Extrusion<br>[1948, 1992, 5]"]
|
||||
61["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
54["Sweep Extrusion<br>[1948, 1992, 6]"]
|
||||
55["Sweep Extrusion<br>[1948, 1992, 6]"]
|
||||
56["Sweep Extrusion<br>[1948, 1992, 6]"]
|
||||
57["Sweep Extrusion<br>[1948, 1992, 6]"]
|
||||
61["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
62[Wall]
|
||||
63["Cap End"]
|
||||
64["SweepEdge Opposite"]
|
||||
65["SweepEdge Adjacent"]
|
||||
66["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
67["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
68["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
69["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
70["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
71["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
72["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
73["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
74["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
75["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
76["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
77["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
78["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
79["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
80["Sweep Extrusion<br>[2271, 2315, 5]"]
|
||||
88["Sweep Extrusion<br>[2724, 2792, 5]"]
|
||||
66["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
67["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
68["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
69["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
70["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
71["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
72["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
73["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
74["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
75["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
76["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
77["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
78["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
79["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
80["Sweep Extrusion<br>[2271, 2315, 6]"]
|
||||
88["Sweep Extrusion<br>[2724, 2792, 6]"]
|
||||
89[Wall]
|
||||
90[Wall]
|
||||
91[Wall]
|
||||
@ -272,11 +272,11 @@ flowchart LR
|
||||
99["SweepEdge Adjacent"]
|
||||
100["SweepEdge Opposite"]
|
||||
101["SweepEdge Adjacent"]
|
||||
102["Sweep Extrusion<br>[2724, 2792, 5]"]
|
||||
103["Sweep Extrusion<br>[2724, 2792, 5]"]
|
||||
104["Sweep Extrusion<br>[2724, 2792, 5]"]
|
||||
105["Sweep Extrusion<br>[2724, 2792, 5]"]
|
||||
113["Sweep Extrusion<br>[3198, 3272, 5]"]
|
||||
102["Sweep Extrusion<br>[2724, 2792, 6]"]
|
||||
103["Sweep Extrusion<br>[2724, 2792, 6]"]
|
||||
104["Sweep Extrusion<br>[2724, 2792, 6]"]
|
||||
105["Sweep Extrusion<br>[2724, 2792, 6]"]
|
||||
113["Sweep Extrusion<br>[3198, 3272, 6]"]
|
||||
114[Wall]
|
||||
115[Wall]
|
||||
116[Wall]
|
||||
@ -290,41 +290,41 @@ flowchart LR
|
||||
124["SweepEdge Adjacent"]
|
||||
125["SweepEdge Opposite"]
|
||||
126["SweepEdge Adjacent"]
|
||||
127["Sweep Extrusion<br>[3198, 3272, 5]"]
|
||||
128["Sweep Extrusion<br>[3198, 3272, 5]"]
|
||||
129["Sweep Extrusion<br>[3198, 3272, 5]"]
|
||||
130["Sweep Extrusion<br>[3198, 3272, 5]"]
|
||||
131["Plane<br>[327, 344, 4]"]
|
||||
138["Sweep Extrusion<br>[483, 516, 4]"]
|
||||
127["Sweep Extrusion<br>[3198, 3272, 6]"]
|
||||
128["Sweep Extrusion<br>[3198, 3272, 6]"]
|
||||
129["Sweep Extrusion<br>[3198, 3272, 6]"]
|
||||
130["Sweep Extrusion<br>[3198, 3272, 6]"]
|
||||
131["Plane<br>[327, 344, 5]"]
|
||||
138["Sweep Extrusion<br>[483, 516, 5]"]
|
||||
139[Wall]
|
||||
140["Cap Start"]
|
||||
141["Cap End"]
|
||||
142["SweepEdge Opposite"]
|
||||
143["SweepEdge Adjacent"]
|
||||
150["Sweep Extrusion<br>[771, 804, 4]"]
|
||||
150["Sweep Extrusion<br>[771, 804, 5]"]
|
||||
151[Wall]
|
||||
152["Cap Start"]
|
||||
153["Cap End"]
|
||||
154["SweepEdge Opposite"]
|
||||
155["SweepEdge Adjacent"]
|
||||
159["Sweep Extrusion<br>[1106, 1140, 4]"]
|
||||
159["Sweep Extrusion<br>[1106, 1140, 5]"]
|
||||
160[Wall]
|
||||
161["SweepEdge Opposite"]
|
||||
162["SweepEdge Adjacent"]
|
||||
163["Sweep Extrusion<br>[1106, 1140, 4]"]
|
||||
164["Sweep Extrusion<br>[1106, 1140, 4]"]
|
||||
165["Sweep Extrusion<br>[1106, 1140, 4]"]
|
||||
166["Sweep Extrusion<br>[1106, 1140, 4]"]
|
||||
170["Sweep Extrusion<br>[1444, 1478, 4]"]
|
||||
163["Sweep Extrusion<br>[1106, 1140, 5]"]
|
||||
164["Sweep Extrusion<br>[1106, 1140, 5]"]
|
||||
165["Sweep Extrusion<br>[1106, 1140, 5]"]
|
||||
166["Sweep Extrusion<br>[1106, 1140, 5]"]
|
||||
170["Sweep Extrusion<br>[1444, 1478, 5]"]
|
||||
171[Wall]
|
||||
172["SweepEdge Opposite"]
|
||||
173["SweepEdge Adjacent"]
|
||||
174["Sweep Extrusion<br>[1444, 1478, 4]"]
|
||||
175["Sweep Extrusion<br>[1444, 1478, 4]"]
|
||||
176["Sweep Extrusion<br>[1444, 1478, 4]"]
|
||||
177["Sweep Extrusion<br>[1444, 1478, 4]"]
|
||||
178["Plane<br>[1632, 1649, 4]"]
|
||||
186["Sweep Revolve<br>[1979, 1998, 4]"]
|
||||
174["Sweep Extrusion<br>[1444, 1478, 5]"]
|
||||
175["Sweep Extrusion<br>[1444, 1478, 5]"]
|
||||
176["Sweep Extrusion<br>[1444, 1478, 5]"]
|
||||
177["Sweep Extrusion<br>[1444, 1478, 5]"]
|
||||
178["Plane<br>[1632, 1649, 5]"]
|
||||
186["Sweep Revolve<br>[1979, 1998, 5]"]
|
||||
187[Wall]
|
||||
188[Wall]
|
||||
189[Wall]
|
||||
@ -332,8 +332,8 @@ flowchart LR
|
||||
191["SweepEdge Adjacent"]
|
||||
192["SweepEdge Adjacent"]
|
||||
193["SweepEdge Adjacent"]
|
||||
194["Plane<br>[2084, 2101, 4]"]
|
||||
202["Sweep Revolve<br>[2448, 2467, 4]"]
|
||||
194["Plane<br>[2084, 2101, 5]"]
|
||||
202["Sweep Revolve<br>[2448, 2467, 5]"]
|
||||
203[Wall]
|
||||
204[Wall]
|
||||
205[Wall]
|
||||
@ -342,8 +342,8 @@ flowchart LR
|
||||
208["SweepEdge Adjacent"]
|
||||
209["SweepEdge Adjacent"]
|
||||
210["SweepEdge Adjacent"]
|
||||
211["Plane<br>[2922, 2945, 4]"]
|
||||
219["Sweep Extrusion<br>[3867, 3913, 4]"]
|
||||
211["Plane<br>[2922, 2945, 5]"]
|
||||
219["Sweep Extrusion<br>[3867, 3913, 5]"]
|
||||
220[Wall]
|
||||
221[Wall]
|
||||
222[Wall]
|
||||
@ -358,8 +358,8 @@ flowchart LR
|
||||
231["SweepEdge Adjacent"]
|
||||
232["SweepEdge Opposite"]
|
||||
233["SweepEdge Adjacent"]
|
||||
234["Plane<br>[2922, 2945, 4]"]
|
||||
242["Sweep Extrusion<br>[3867, 3913, 4]"]
|
||||
234["Plane<br>[2922, 2945, 5]"]
|
||||
242["Sweep Extrusion<br>[3867, 3913, 5]"]
|
||||
243[Wall]
|
||||
244[Wall]
|
||||
245[Wall]
|
||||
@ -374,8 +374,8 @@ flowchart LR
|
||||
254["SweepEdge Adjacent"]
|
||||
255["SweepEdge Opposite"]
|
||||
256["SweepEdge Adjacent"]
|
||||
257["Plane<br>[4324, 4341, 4]"]
|
||||
284["Sweep Revolve<br>[5634, 5653, 4]"]
|
||||
257["Plane<br>[4324, 4341, 5]"]
|
||||
284["Sweep Revolve<br>[5634, 5653, 5]"]
|
||||
285[Wall]
|
||||
286[Wall]
|
||||
287[Wall]
|
||||
@ -424,8 +424,8 @@ flowchart LR
|
||||
330["SweepEdge Adjacent"]
|
||||
331["SweepEdge Adjacent"]
|
||||
332["SweepEdge Adjacent"]
|
||||
333["Plane<br>[706, 732, 7]"]
|
||||
345["Sweep Revolve<br>[1182, 1201, 7]"]
|
||||
333["Plane<br>[706, 732, 8]"]
|
||||
345["Sweep Revolve<br>[1182, 1201, 8]"]
|
||||
346[Wall]
|
||||
347[Wall]
|
||||
348[Wall]
|
||||
@ -444,8 +444,8 @@ flowchart LR
|
||||
361["SweepEdge Adjacent"]
|
||||
362["SweepEdge Adjacent"]
|
||||
363["SweepEdge Adjacent"]
|
||||
364["Plane<br>[484, 501, 6]"]
|
||||
384["Sweep Revolve<br>[2243, 2295, 6]"]
|
||||
364["Plane<br>[484, 501, 7]"]
|
||||
384["Sweep Revolve<br>[2243, 2295, 7]"]
|
||||
385[Wall]
|
||||
386[Wall]
|
||||
387[Wall]
|
||||
@ -499,8 +499,8 @@ flowchart LR
|
||||
435["SweepEdge Adjacent"]
|
||||
436["SweepEdge Opposite"]
|
||||
437["SweepEdge Adjacent"]
|
||||
438["Plane<br>[460, 477, 8]"]
|
||||
455["Sweep Revolve<br>[1486, 1517, 8]"]
|
||||
438["Plane<br>[460, 477, 9]"]
|
||||
455["Sweep Revolve<br>[1486, 1517, 9]"]
|
||||
456[Wall]
|
||||
457[Wall]
|
||||
458[Wall]
|
||||
@ -529,17 +529,17 @@ flowchart LR
|
||||
481["SweepEdge Adjacent"]
|
||||
482["SweepEdge Adjacent"]
|
||||
483["SweepEdge Adjacent"]
|
||||
484["StartSketchOnFace<br>[770, 797, 5]"]
|
||||
485["StartSketchOnFace<br>[947, 978, 5]"]
|
||||
486["StartSketchOnFace<br>[1385, 1414, 5]"]
|
||||
487["StartSketchOnFace<br>[1524, 1558, 5]"]
|
||||
488["StartSketchOnFace<br>[1709, 1742, 5]"]
|
||||
489["StartSketchOnFace<br>[2009, 2038, 5]"]
|
||||
490["StartSketchOnFace<br>[2338, 2367, 5]"]
|
||||
491["StartSketchOnFace<br>[2821, 2854, 5]"]
|
||||
492["StartSketchOnFace<br>[603, 632, 4]"]
|
||||
493["StartSketchOnFace<br>[865, 899, 4]"]
|
||||
494["StartSketchOnFace<br>[1202, 1231, 4]"]
|
||||
484["StartSketchOnFace<br>[770, 797, 6]"]
|
||||
485["StartSketchOnFace<br>[947, 978, 6]"]
|
||||
486["StartSketchOnFace<br>[1385, 1414, 6]"]
|
||||
487["StartSketchOnFace<br>[1524, 1558, 6]"]
|
||||
488["StartSketchOnFace<br>[1709, 1742, 6]"]
|
||||
489["StartSketchOnFace<br>[2009, 2038, 6]"]
|
||||
490["StartSketchOnFace<br>[2338, 2367, 6]"]
|
||||
491["StartSketchOnFace<br>[2821, 2854, 6]"]
|
||||
492["StartSketchOnFace<br>[603, 632, 5]"]
|
||||
493["StartSketchOnFace<br>[865, 899, 5]"]
|
||||
494["StartSketchOnFace<br>[1202, 1231, 5]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 ---- 5
|
||||
|
@ -168,54 +168,65 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"label": {
|
||||
"commentStart": 366,
|
||||
"end": 0,
|
||||
"name": "translate",
|
||||
"name": "x",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 378,
|
||||
"elements": [
|
||||
{
|
||||
"commentStart": 379,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 382,
|
||||
"end": 0,
|
||||
"raw": "0.5",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.5,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 387,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
],
|
||||
"commentStart": 370,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "ArrayExpression",
|
||||
"type": "ArrayExpression"
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 373,
|
||||
"end": 0,
|
||||
"name": "y",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 377,
|
||||
"end": 0,
|
||||
"raw": "0.5",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.5,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 382,
|
||||
"end": 0,
|
||||
"name": "z",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 386,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
@ -253,14 +264,14 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"type": "ExpressionStatement"
|
||||
},
|
||||
{
|
||||
"commentStart": 391,
|
||||
"commentStart": 389,
|
||||
"end": 0,
|
||||
"expression": {
|
||||
"abs_path": false,
|
||||
"commentStart": 391,
|
||||
"commentStart": 389,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 391,
|
||||
"commentStart": 389,
|
||||
"end": 0,
|
||||
"name": "carWheel",
|
||||
"start": 0,
|
||||
@ -276,16 +287,16 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"type": "ExpressionStatement"
|
||||
},
|
||||
{
|
||||
"commentStart": 400,
|
||||
"commentStart": 398,
|
||||
"end": 0,
|
||||
"expression": {
|
||||
"body": [
|
||||
{
|
||||
"abs_path": false,
|
||||
"commentStart": 400,
|
||||
"commentStart": 398,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 400,
|
||||
"commentStart": 398,
|
||||
"end": 0,
|
||||
"name": "lugNut",
|
||||
"start": 0,
|
||||
@ -301,14 +312,14 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 438,
|
||||
"commentStart": 436,
|
||||
"end": 0,
|
||||
"name": "arcDegrees",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 451,
|
||||
"commentStart": 449,
|
||||
"end": 0,
|
||||
"raw": "360",
|
||||
"start": 0,
|
||||
@ -323,17 +334,17 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 463,
|
||||
"commentStart": 461,
|
||||
"end": 0,
|
||||
"name": "axis",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 470,
|
||||
"commentStart": 468,
|
||||
"elements": [
|
||||
{
|
||||
"commentStart": 471,
|
||||
"commentStart": 469,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
@ -345,7 +356,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 474,
|
||||
"commentStart": 472,
|
||||
"end": 0,
|
||||
"raw": "1",
|
||||
"start": 0,
|
||||
@ -357,7 +368,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 477,
|
||||
"commentStart": 475,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
@ -378,17 +389,17 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 488,
|
||||
"commentStart": 486,
|
||||
"end": 0,
|
||||
"name": "center",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 497,
|
||||
"commentStart": 495,
|
||||
"elements": [
|
||||
{
|
||||
"commentStart": 498,
|
||||
"commentStart": 496,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
@ -400,7 +411,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 501,
|
||||
"commentStart": 499,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
@ -412,7 +423,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 504,
|
||||
"commentStart": 502,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
@ -433,7 +444,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 515,
|
||||
"commentStart": 513,
|
||||
"end": 0,
|
||||
"name": "instances",
|
||||
"start": 0,
|
||||
@ -441,10 +452,10 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
},
|
||||
"arg": {
|
||||
"abs_path": false,
|
||||
"commentStart": 527,
|
||||
"commentStart": 525,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 527,
|
||||
"commentStart": 525,
|
||||
"end": 0,
|
||||
"name": "lugCount",
|
||||
"start": 0,
|
||||
@ -459,14 +470,14 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 544,
|
||||
"commentStart": 542,
|
||||
"end": 0,
|
||||
"name": "rotateDuplicates",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 563,
|
||||
"commentStart": 561,
|
||||
"end": 0,
|
||||
"raw": "false",
|
||||
"start": 0,
|
||||
@ -478,10 +489,10 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
],
|
||||
"callee": {
|
||||
"abs_path": false,
|
||||
"commentStart": 412,
|
||||
"commentStart": 410,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 412,
|
||||
"commentStart": 410,
|
||||
"end": 0,
|
||||
"name": "patternCircular3d",
|
||||
"start": 0,
|
||||
@ -491,7 +502,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
"commentStart": 412,
|
||||
"commentStart": 410,
|
||||
"end": 0,
|
||||
"start": 0,
|
||||
"type": "CallExpressionKw",
|
||||
@ -499,7 +510,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"unlabeled": null
|
||||
}
|
||||
],
|
||||
"commentStart": 400,
|
||||
"commentStart": 398,
|
||||
"end": 0,
|
||||
"start": 0,
|
||||
"type": "PipeExpression",
|
||||
@ -510,16 +521,16 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"type": "ExpressionStatement"
|
||||
},
|
||||
{
|
||||
"commentStart": 577,
|
||||
"commentStart": 575,
|
||||
"end": 0,
|
||||
"expression": {
|
||||
"body": [
|
||||
{
|
||||
"abs_path": false,
|
||||
"commentStart": 577,
|
||||
"commentStart": 575,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 577,
|
||||
"commentStart": 575,
|
||||
"end": 0,
|
||||
"name": "brakeCaliper",
|
||||
"start": 0,
|
||||
@ -535,65 +546,76 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 605,
|
||||
"commentStart": 603,
|
||||
"end": 0,
|
||||
"name": "translate",
|
||||
"name": "x",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 617,
|
||||
"elements": [
|
||||
{
|
||||
"commentStart": 618,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 621,
|
||||
"end": 0,
|
||||
"raw": "0.5",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.5,
|
||||
"suffix": "None"
|
||||
}
|
||||
},
|
||||
{
|
||||
"commentStart": 626,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
],
|
||||
"commentStart": 607,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "ArrayExpression",
|
||||
"type": "ArrayExpression"
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 610,
|
||||
"end": 0,
|
||||
"name": "y",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 614,
|
||||
"end": 0,
|
||||
"raw": "0.5",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.5,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "LabeledArg",
|
||||
"label": {
|
||||
"commentStart": 619,
|
||||
"end": 0,
|
||||
"name": "z",
|
||||
"start": 0,
|
||||
"type": "Identifier"
|
||||
},
|
||||
"arg": {
|
||||
"commentStart": 623,
|
||||
"end": 0,
|
||||
"raw": "0",
|
||||
"start": 0,
|
||||
"type": "Literal",
|
||||
"type": "Literal",
|
||||
"value": {
|
||||
"value": 0.0,
|
||||
"suffix": "None"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"callee": {
|
||||
"abs_path": false,
|
||||
"commentStart": 595,
|
||||
"commentStart": 593,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 595,
|
||||
"commentStart": 593,
|
||||
"end": 0,
|
||||
"name": "translate",
|
||||
"start": 0,
|
||||
@ -603,7 +625,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"start": 0,
|
||||
"type": "Name"
|
||||
},
|
||||
"commentStart": 595,
|
||||
"commentStart": 593,
|
||||
"end": 0,
|
||||
"start": 0,
|
||||
"type": "CallExpressionKw",
|
||||
@ -611,7 +633,7 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"unlabeled": null
|
||||
}
|
||||
],
|
||||
"commentStart": 577,
|
||||
"commentStart": 575,
|
||||
"end": 0,
|
||||
"start": 0,
|
||||
"type": "PipeExpression",
|
||||
@ -622,14 +644,14 @@ description: Result of parsing car-wheel-assembly.kcl
|
||||
"type": "ExpressionStatement"
|
||||
},
|
||||
{
|
||||
"commentStart": 630,
|
||||
"commentStart": 626,
|
||||
"end": 0,
|
||||
"expression": {
|
||||
"abs_path": false,
|
||||
"commentStart": 630,
|
||||
"commentStart": 626,
|
||||
"end": 0,
|
||||
"name": {
|
||||
"commentStart": 630,
|
||||
"commentStart": 626,
|
||||
"end": 0,
|
||||
"name": "carTire",
|
||||
"start": 0,
|
||||
|
@ -1848,7 +1848,7 @@ description: Operations executed car-wheel-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
2620,
|
||||
4193,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -2235,7 +2235,7 @@ description: Operations executed car-wheel-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
2620,
|
||||
4193,
|
||||
4
|
||||
5
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -2660,7 +2660,7 @@ description: Operations executed car-wheel-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
664,
|
||||
1291,
|
||||
7
|
||||
8
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
|
@ -5,7 +5,7 @@ description: Variables in memory after executing car-wheel-assembly.kcl
|
||||
{
|
||||
"brakeCaliper": {
|
||||
"type": "Module",
|
||||
"value": 6
|
||||
"value": 7
|
||||
},
|
||||
"c1": {
|
||||
"type": "TagIdentifier",
|
||||
@ -14,15 +14,15 @@ description: Variables in memory after executing car-wheel-assembly.kcl
|
||||
},
|
||||
"carRotor": {
|
||||
"type": "Module",
|
||||
"value": 5
|
||||
"value": 6
|
||||
},
|
||||
"carTire": {
|
||||
"type": "Module",
|
||||
"value": 8
|
||||
"value": 9
|
||||
},
|
||||
"carWheel": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
},
|
||||
"lugCount": {
|
||||
"type": "Number",
|
||||
@ -39,6 +39,6 @@ description: Variables in memory after executing car-wheel-assembly.kcl
|
||||
},
|
||||
"lugNut": {
|
||||
"type": "Module",
|
||||
"value": 7
|
||||
"value": 8
|
||||
}
|
||||
}
|
||||
|
@ -1,162 +1,162 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[224, 279, 4]"]
|
||||
3["Segment<br>[285, 347, 4]"]
|
||||
4["Segment<br>[353, 468, 4]"]
|
||||
5["Segment<br>[474, 594, 4]"]
|
||||
6["Segment<br>[600, 685, 4]"]
|
||||
7["Segment<br>[691, 698, 4]"]
|
||||
2["Path<br>[224, 279, 5]"]
|
||||
3["Segment<br>[285, 347, 5]"]
|
||||
4["Segment<br>[353, 468, 5]"]
|
||||
5["Segment<br>[474, 594, 5]"]
|
||||
6["Segment<br>[600, 685, 5]"]
|
||||
7["Segment<br>[691, 698, 5]"]
|
||||
8[Solid2d]
|
||||
end
|
||||
subgraph path28 [Path]
|
||||
28["Path<br>[1134, 1191, 4]"]
|
||||
29["Segment<br>[1134, 1191, 4]"]
|
||||
28["Path<br>[1134, 1191, 5]"]
|
||||
29["Segment<br>[1134, 1191, 5]"]
|
||||
30[Solid2d]
|
||||
end
|
||||
subgraph path36 [Path]
|
||||
36["Path<br>[1389, 1426, 4]"]
|
||||
37["Segment<br>[1389, 1426, 4]"]
|
||||
36["Path<br>[1389, 1426, 5]"]
|
||||
37["Segment<br>[1389, 1426, 5]"]
|
||||
38[Solid2d]
|
||||
end
|
||||
subgraph path44 [Path]
|
||||
44["Path<br>[1558, 1698, 4]"]
|
||||
45["Segment<br>[1558, 1698, 4]"]
|
||||
44["Path<br>[1558, 1698, 5]"]
|
||||
45["Segment<br>[1558, 1698, 5]"]
|
||||
46[Solid2d]
|
||||
end
|
||||
subgraph path54 [Path]
|
||||
54["Path<br>[1944, 2084, 4]"]
|
||||
55["Segment<br>[1944, 2084, 4]"]
|
||||
54["Path<br>[1944, 2084, 5]"]
|
||||
55["Segment<br>[1944, 2084, 5]"]
|
||||
56[Solid2d]
|
||||
end
|
||||
subgraph path65 [Path]
|
||||
65["Path<br>[203, 263, 5]"]
|
||||
66["Segment<br>[203, 263, 5]"]
|
||||
65["Path<br>[203, 263, 6]"]
|
||||
66["Segment<br>[203, 263, 6]"]
|
||||
67[Solid2d]
|
||||
end
|
||||
subgraph path75 [Path]
|
||||
75["Path<br>[493, 529, 5]"]
|
||||
76["Segment<br>[535, 579, 5]"]
|
||||
77["Segment<br>[585, 673, 5]"]
|
||||
78["Segment<br>[679, 728, 5]"]
|
||||
79["Segment<br>[734, 790, 5]"]
|
||||
80["Segment<br>[796, 803, 5]"]
|
||||
75["Path<br>[493, 529, 6]"]
|
||||
76["Segment<br>[535, 579, 6]"]
|
||||
77["Segment<br>[585, 673, 6]"]
|
||||
78["Segment<br>[679, 728, 6]"]
|
||||
79["Segment<br>[734, 790, 6]"]
|
||||
80["Segment<br>[796, 803, 6]"]
|
||||
81[Solid2d]
|
||||
end
|
||||
subgraph path97 [Path]
|
||||
97["Path<br>[900, 1075, 5]"]
|
||||
98["Segment<br>[900, 1075, 5]"]
|
||||
97["Path<br>[900, 1075, 6]"]
|
||||
98["Segment<br>[900, 1075, 6]"]
|
||||
99[Solid2d]
|
||||
end
|
||||
subgraph path105 [Path]
|
||||
105["Path<br>[1279, 1426, 5]"]
|
||||
106["Segment<br>[1279, 1426, 5]"]
|
||||
105["Path<br>[1279, 1426, 6]"]
|
||||
106["Segment<br>[1279, 1426, 6]"]
|
||||
107[Solid2d]
|
||||
end
|
||||
subgraph path116 [Path]
|
||||
116["Path<br>[1743, 1917, 5]"]
|
||||
117["Segment<br>[1743, 1917, 5]"]
|
||||
116["Path<br>[1743, 1917, 6]"]
|
||||
117["Segment<br>[1743, 1917, 6]"]
|
||||
118[Solid2d]
|
||||
end
|
||||
subgraph path125 [Path]
|
||||
125["Path<br>[2142, 2182, 5]"]
|
||||
126["Segment<br>[2142, 2182, 5]"]
|
||||
125["Path<br>[2142, 2182, 6]"]
|
||||
126["Segment<br>[2142, 2182, 6]"]
|
||||
127[Solid2d]
|
||||
end
|
||||
subgraph path137 [Path]
|
||||
137["Path<br>[251, 394, 6]"]
|
||||
138["Segment<br>[400, 516, 6]"]
|
||||
139["Segment<br>[522, 600, 6]"]
|
||||
140["Segment<br>[606, 722, 6]"]
|
||||
141["Segment<br>[728, 784, 6]"]
|
||||
142["Segment<br>[790, 797, 6]"]
|
||||
137["Path<br>[251, 394, 7]"]
|
||||
138["Segment<br>[400, 516, 7]"]
|
||||
139["Segment<br>[522, 600, 7]"]
|
||||
140["Segment<br>[606, 722, 7]"]
|
||||
141["Segment<br>[728, 784, 7]"]
|
||||
142["Segment<br>[790, 797, 7]"]
|
||||
143[Solid2d]
|
||||
end
|
||||
subgraph path159 [Path]
|
||||
159["Path<br>[913, 977, 6]"]
|
||||
160["Segment<br>[913, 977, 6]"]
|
||||
159["Path<br>[913, 977, 7]"]
|
||||
160["Segment<br>[913, 977, 7]"]
|
||||
161[Solid2d]
|
||||
end
|
||||
subgraph path167 [Path]
|
||||
167["Path<br>[1146, 1354, 6]"]
|
||||
168["Segment<br>[1146, 1354, 6]"]
|
||||
167["Path<br>[1146, 1354, 7]"]
|
||||
168["Segment<br>[1146, 1354, 7]"]
|
||||
169[Solid2d]
|
||||
end
|
||||
subgraph path175 [Path]
|
||||
175["Path<br>[1557, 1601, 6]"]
|
||||
176["Segment<br>[1557, 1601, 6]"]
|
||||
175["Path<br>[1557, 1601, 7]"]
|
||||
176["Segment<br>[1557, 1601, 7]"]
|
||||
177[Solid2d]
|
||||
end
|
||||
subgraph path190 [Path]
|
||||
190["Path<br>[1839, 2031, 6]"]
|
||||
191["Segment<br>[1839, 2031, 6]"]
|
||||
190["Path<br>[1839, 2031, 7]"]
|
||||
191["Segment<br>[1839, 2031, 7]"]
|
||||
192[Solid2d]
|
||||
end
|
||||
subgraph path201 [Path]
|
||||
201["Path<br>[2384, 2559, 6]"]
|
||||
202["Segment<br>[2384, 2559, 6]"]
|
||||
201["Path<br>[2384, 2559, 7]"]
|
||||
202["Segment<br>[2384, 2559, 7]"]
|
||||
203[Solid2d]
|
||||
end
|
||||
subgraph path210 [Path]
|
||||
210["Path<br>[271, 504, 7]"]
|
||||
211["Segment<br>[510, 629, 7]"]
|
||||
212["Segment<br>[635, 715, 7]"]
|
||||
213["Segment<br>[721, 840, 7]"]
|
||||
214["Segment<br>[846, 916, 7]"]
|
||||
215["Segment<br>[922, 929, 7]"]
|
||||
210["Path<br>[271, 504, 8]"]
|
||||
211["Segment<br>[510, 629, 8]"]
|
||||
212["Segment<br>[635, 715, 8]"]
|
||||
213["Segment<br>[721, 840, 8]"]
|
||||
214["Segment<br>[846, 916, 8]"]
|
||||
215["Segment<br>[922, 929, 8]"]
|
||||
216[Solid2d]
|
||||
end
|
||||
subgraph path232 [Path]
|
||||
232["Path<br>[1043, 1252, 7]"]
|
||||
233["Segment<br>[1043, 1252, 7]"]
|
||||
232["Path<br>[1043, 1252, 8]"]
|
||||
233["Segment<br>[1043, 1252, 8]"]
|
||||
234[Solid2d]
|
||||
end
|
||||
subgraph path240 [Path]
|
||||
240["Path<br>[1457, 1646, 7]"]
|
||||
241["Segment<br>[1457, 1646, 7]"]
|
||||
240["Path<br>[1457, 1646, 8]"]
|
||||
241["Segment<br>[1457, 1646, 8]"]
|
||||
242[Solid2d]
|
||||
end
|
||||
subgraph path255 [Path]
|
||||
255["Path<br>[2067, 2353, 7]"]
|
||||
256["Segment<br>[2067, 2353, 7]"]
|
||||
255["Path<br>[2067, 2353, 8]"]
|
||||
256["Segment<br>[2067, 2353, 8]"]
|
||||
257[Solid2d]
|
||||
end
|
||||
subgraph path264 [Path]
|
||||
264["Path<br>[2452, 2736, 7]"]
|
||||
265["Segment<br>[2452, 2736, 7]"]
|
||||
264["Path<br>[2452, 2736, 8]"]
|
||||
265["Segment<br>[2452, 2736, 8]"]
|
||||
266[Solid2d]
|
||||
end
|
||||
subgraph path273 [Path]
|
||||
273["Path<br>[2890, 2928, 7]"]
|
||||
274["Segment<br>[2890, 2928, 7]"]
|
||||
273["Path<br>[2890, 2928, 8]"]
|
||||
274["Segment<br>[2890, 2928, 8]"]
|
||||
275[Solid2d]
|
||||
end
|
||||
subgraph path282 [Path]
|
||||
282["Path<br>[3058, 3283, 7]"]
|
||||
283["Segment<br>[3289, 3383, 7]"]
|
||||
284["Segment<br>[3389, 3532, 7]"]
|
||||
285["Segment<br>[3538, 3632, 7]"]
|
||||
286["Segment<br>[3638, 3740, 7]"]
|
||||
287["Segment<br>[3746, 3848, 7]"]
|
||||
288["Segment<br>[3854, 3954, 7]"]
|
||||
289["Segment<br>[3960, 4016, 7]"]
|
||||
290["Segment<br>[4022, 4029, 7]"]
|
||||
282["Path<br>[3058, 3283, 8]"]
|
||||
283["Segment<br>[3289, 3383, 8]"]
|
||||
284["Segment<br>[3389, 3532, 8]"]
|
||||
285["Segment<br>[3538, 3632, 8]"]
|
||||
286["Segment<br>[3638, 3740, 8]"]
|
||||
287["Segment<br>[3746, 3848, 8]"]
|
||||
288["Segment<br>[3854, 3954, 8]"]
|
||||
289["Segment<br>[3960, 4016, 8]"]
|
||||
290["Segment<br>[4022, 4029, 8]"]
|
||||
291[Solid2d]
|
||||
end
|
||||
subgraph path316 [Path]
|
||||
316["Path<br>[4158, 4383, 7]"]
|
||||
317["Segment<br>[4389, 4485, 7]"]
|
||||
318["Segment<br>[4491, 4639, 7]"]
|
||||
319["Segment<br>[4645, 4741, 7]"]
|
||||
320["Segment<br>[4747, 4851, 7]"]
|
||||
321["Segment<br>[4857, 4961, 7]"]
|
||||
322["Segment<br>[4967, 5069, 7]"]
|
||||
323["Segment<br>[5075, 5131, 7]"]
|
||||
324["Segment<br>[5137, 5144, 7]"]
|
||||
316["Path<br>[4158, 4383, 8]"]
|
||||
317["Segment<br>[4389, 4485, 8]"]
|
||||
318["Segment<br>[4491, 4639, 8]"]
|
||||
319["Segment<br>[4645, 4741, 8]"]
|
||||
320["Segment<br>[4747, 4851, 8]"]
|
||||
321["Segment<br>[4857, 4961, 8]"]
|
||||
322["Segment<br>[4967, 5069, 8]"]
|
||||
323["Segment<br>[5075, 5131, 8]"]
|
||||
324["Segment<br>[5137, 5144, 8]"]
|
||||
325[Solid2d]
|
||||
end
|
||||
1["Plane<br>[201, 218, 4]"]
|
||||
9["Sweep Extrusion<br>[712, 759, 4]"]
|
||||
1["Plane<br>[201, 218, 5]"]
|
||||
9["Sweep Extrusion<br>[712, 759, 5]"]
|
||||
10[Wall]
|
||||
11[Wall]
|
||||
12[Wall]
|
||||
@ -171,43 +171,43 @@ flowchart LR
|
||||
21["SweepEdge Adjacent"]
|
||||
22["SweepEdge Opposite"]
|
||||
23["SweepEdge Adjacent"]
|
||||
24["EdgeCut Chamfer<br>[765, 1042, 4]"]
|
||||
25["EdgeCut Chamfer<br>[765, 1042, 4]"]
|
||||
26["EdgeCut Chamfer<br>[765, 1042, 4]"]
|
||||
27["EdgeCut Chamfer<br>[765, 1042, 4]"]
|
||||
31["Sweep Extrusion<br>[1205, 1271, 4]"]
|
||||
24["EdgeCut Chamfer<br>[765, 1042, 5]"]
|
||||
25["EdgeCut Chamfer<br>[765, 1042, 5]"]
|
||||
26["EdgeCut Chamfer<br>[765, 1042, 5]"]
|
||||
27["EdgeCut Chamfer<br>[765, 1042, 5]"]
|
||||
31["Sweep Extrusion<br>[1205, 1271, 5]"]
|
||||
32[Wall]
|
||||
33["Cap End"]
|
||||
34["SweepEdge Opposite"]
|
||||
35["SweepEdge Adjacent"]
|
||||
39["Sweep Extrusion<br>[1440, 1470, 4]"]
|
||||
39["Sweep Extrusion<br>[1440, 1470, 5]"]
|
||||
40[Wall]
|
||||
41["Cap End"]
|
||||
42["SweepEdge Opposite"]
|
||||
43["SweepEdge Adjacent"]
|
||||
47["Sweep Extrusion<br>[1846, 1893, 4]"]
|
||||
47["Sweep Extrusion<br>[1846, 1893, 5]"]
|
||||
48[Wall]
|
||||
49["SweepEdge Opposite"]
|
||||
50["SweepEdge Adjacent"]
|
||||
51["Sweep Extrusion<br>[1846, 1893, 4]"]
|
||||
52["Sweep Extrusion<br>[1846, 1893, 4]"]
|
||||
53["Sweep Extrusion<br>[1846, 1893, 4]"]
|
||||
57["Sweep Extrusion<br>[2220, 2267, 4]"]
|
||||
51["Sweep Extrusion<br>[1846, 1893, 5]"]
|
||||
52["Sweep Extrusion<br>[1846, 1893, 5]"]
|
||||
53["Sweep Extrusion<br>[1846, 1893, 5]"]
|
||||
57["Sweep Extrusion<br>[2220, 2267, 5]"]
|
||||
58[Wall]
|
||||
59["SweepEdge Opposite"]
|
||||
60["SweepEdge Adjacent"]
|
||||
61["Sweep Extrusion<br>[2220, 2267, 4]"]
|
||||
62["Sweep Extrusion<br>[2220, 2267, 4]"]
|
||||
63["Sweep Extrusion<br>[2220, 2267, 4]"]
|
||||
64["Plane<br>[174, 197, 5]"]
|
||||
68["Sweep Extrusion<br>[277, 315, 5]"]
|
||||
61["Sweep Extrusion<br>[2220, 2267, 5]"]
|
||||
62["Sweep Extrusion<br>[2220, 2267, 5]"]
|
||||
63["Sweep Extrusion<br>[2220, 2267, 5]"]
|
||||
64["Plane<br>[174, 197, 6]"]
|
||||
68["Sweep Extrusion<br>[277, 315, 6]"]
|
||||
69[Wall]
|
||||
70["Cap Start"]
|
||||
71["Cap End"]
|
||||
72["SweepEdge Opposite"]
|
||||
73["SweepEdge Adjacent"]
|
||||
74["Plane<br>[464, 487, 5]"]
|
||||
82["Sweep Extrusion<br>[818, 848, 5]"]
|
||||
74["Plane<br>[464, 487, 6]"]
|
||||
82["Sweep Extrusion<br>[818, 848, 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<br>[1089, 1121, 5]"]
|
||||
100["Sweep Extrusion<br>[1089, 1121, 6]"]
|
||||
101[Wall]
|
||||
102["Cap End"]
|
||||
103["SweepEdge Opposite"]
|
||||
104["SweepEdge Adjacent"]
|
||||
108["Sweep Extrusion<br>[1659, 1691, 5]"]
|
||||
108["Sweep Extrusion<br>[1659, 1691, 6]"]
|
||||
109[Wall]
|
||||
110["Cap End"]
|
||||
111["SweepEdge Opposite"]
|
||||
112["SweepEdge Adjacent"]
|
||||
113["Sweep Extrusion<br>[1659, 1691, 5]"]
|
||||
114["Sweep Extrusion<br>[1659, 1691, 5]"]
|
||||
115["Sweep Extrusion<br>[1659, 1691, 5]"]
|
||||
119["Sweep Extrusion<br>[1931, 1964, 5]"]
|
||||
113["Sweep Extrusion<br>[1659, 1691, 6]"]
|
||||
114["Sweep Extrusion<br>[1659, 1691, 6]"]
|
||||
115["Sweep Extrusion<br>[1659, 1691, 6]"]
|
||||
119["Sweep Extrusion<br>[1931, 1964, 6]"]
|
||||
120[Wall]
|
||||
121["Cap End"]
|
||||
122["SweepEdge Opposite"]
|
||||
123["SweepEdge Adjacent"]
|
||||
124["Plane<br>[2113, 2136, 5]"]
|
||||
128["Sweep Extrusion<br>[2184, 2215, 5]"]
|
||||
124["Plane<br>[2113, 2136, 6]"]
|
||||
128["Sweep Extrusion<br>[2184, 2215, 6]"]
|
||||
129[Wall]
|
||||
130["Cap Start"]
|
||||
131["Cap End"]
|
||||
132["SweepEdge Opposite"]
|
||||
133["SweepEdge Adjacent"]
|
||||
134["EdgeCut Fillet<br>[321, 383, 5]"]
|
||||
135["EdgeCut Fillet<br>[1970, 2032, 5]"]
|
||||
136["Plane<br>[222, 245, 6]"]
|
||||
144["Sweep Extrusion<br>[811, 859, 6]"]
|
||||
134["EdgeCut Fillet<br>[321, 383, 6]"]
|
||||
135["EdgeCut Fillet<br>[1970, 2032, 6]"]
|
||||
136["Plane<br>[222, 245, 7]"]
|
||||
144["Sweep Extrusion<br>[811, 859, 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<br>[992, 1025, 6]"]
|
||||
162["Sweep Extrusion<br>[992, 1025, 7]"]
|
||||
163[Wall]
|
||||
164["Cap End"]
|
||||
165["SweepEdge Opposite"]
|
||||
166["SweepEdge Adjacent"]
|
||||
170["Sweep Extrusion<br>[1369, 1399, 6]"]
|
||||
170["Sweep Extrusion<br>[1369, 1399, 7]"]
|
||||
171[Wall]
|
||||
172["Cap End"]
|
||||
173["SweepEdge Opposite"]
|
||||
174["SweepEdge Adjacent"]
|
||||
178["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
178["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
179[Wall]
|
||||
180["Cap End"]
|
||||
181["SweepEdge Opposite"]
|
||||
182["SweepEdge Adjacent"]
|
||||
183["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
184["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
185["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
186["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
187["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
188["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
189["Sweep Extrusion<br>[1754, 1787, 6]"]
|
||||
193["Sweep Extrusion<br>[2299, 2332, 6]"]
|
||||
183["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
184["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
185["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
186["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
187["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
188["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
189["Sweep Extrusion<br>[1754, 1787, 7]"]
|
||||
193["Sweep Extrusion<br>[2299, 2332, 7]"]
|
||||
194[Wall]
|
||||
195["Cap End"]
|
||||
196["SweepEdge Opposite"]
|
||||
197["SweepEdge Adjacent"]
|
||||
198["Sweep Extrusion<br>[2299, 2332, 6]"]
|
||||
199["Sweep Extrusion<br>[2299, 2332, 6]"]
|
||||
200["Sweep Extrusion<br>[2299, 2332, 6]"]
|
||||
204["Sweep Extrusion<br>[2561, 2591, 6]"]
|
||||
198["Sweep Extrusion<br>[2299, 2332, 7]"]
|
||||
199["Sweep Extrusion<br>[2299, 2332, 7]"]
|
||||
200["Sweep Extrusion<br>[2299, 2332, 7]"]
|
||||
204["Sweep Extrusion<br>[2561, 2591, 7]"]
|
||||
205[Wall]
|
||||
206["Cap End"]
|
||||
207["SweepEdge Opposite"]
|
||||
208["SweepEdge Adjacent"]
|
||||
209["Plane<br>[242, 265, 7]"]
|
||||
217["Sweep Extrusion<br>[943, 991, 7]"]
|
||||
209["Plane<br>[242, 265, 8]"]
|
||||
217["Sweep Extrusion<br>[943, 991, 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<br>[1267, 1300, 7]"]
|
||||
235["Sweep Extrusion<br>[1267, 1300, 8]"]
|
||||
236[Wall]
|
||||
237["Cap End"]
|
||||
238["SweepEdge Opposite"]
|
||||
239["SweepEdge Adjacent"]
|
||||
243["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
243["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
244[Wall]
|
||||
245["Cap End"]
|
||||
246["SweepEdge Opposite"]
|
||||
247["SweepEdge Adjacent"]
|
||||
248["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
249["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
250["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
251["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
252["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
253["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
254["Sweep Extrusion<br>[1911, 1944, 7]"]
|
||||
258["Sweep Extrusion<br>[2367, 2400, 7]"]
|
||||
248["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
249["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
250["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
251["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
252["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
253["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
254["Sweep Extrusion<br>[1911, 1944, 8]"]
|
||||
258["Sweep Extrusion<br>[2367, 2400, 8]"]
|
||||
259[Wall]
|
||||
260["Cap Start"]
|
||||
261["Cap End"]
|
||||
262["SweepEdge Opposite"]
|
||||
263["SweepEdge Adjacent"]
|
||||
267["Sweep Extrusion<br>[2751, 2784, 7]"]
|
||||
267["Sweep Extrusion<br>[2751, 2784, 8]"]
|
||||
268[Wall]
|
||||
269["Cap Start"]
|
||||
270["Cap End"]
|
||||
271["SweepEdge Opposite"]
|
||||
272["SweepEdge Adjacent"]
|
||||
276["Sweep Extrusion<br>[2943, 2977, 7]"]
|
||||
276["Sweep Extrusion<br>[2943, 2977, 8]"]
|
||||
277[Wall]
|
||||
278["Cap Start"]
|
||||
279["Cap End"]
|
||||
280["SweepEdge Opposite"]
|
||||
281["SweepEdge Adjacent"]
|
||||
292["Sweep Extrusion<br>[4044, 4077, 7]"]
|
||||
292["Sweep Extrusion<br>[4044, 4077, 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<br>[5146, 5179, 7]"]
|
||||
326["Sweep Extrusion<br>[5146, 5179, 8]"]
|
||||
327[Wall]
|
||||
328[Wall]
|
||||
329[Wall]
|
||||
@ -399,25 +399,25 @@ flowchart LR
|
||||
347["SweepEdge Adjacent"]
|
||||
348["SweepEdge Opposite"]
|
||||
349["SweepEdge Adjacent"]
|
||||
350["StartSketchOnFace<br>[1096, 1128, 4]"]
|
||||
351["StartSketchOnFace<br>[1351, 1383, 4]"]
|
||||
352["StartSketchOnFace<br>[1520, 1552, 4]"]
|
||||
353["StartSketchOnFace<br>[1906, 1938, 4]"]
|
||||
354["StartSketchOnFace<br>[862, 894, 5]"]
|
||||
355["StartSketchOnFace<br>[1241, 1273, 5]"]
|
||||
356["StartSketchOnFace<br>[1705, 1737, 5]"]
|
||||
357["StartSketchOnFace<br>[873, 907, 6]"]
|
||||
358["StartSketchOnFace<br>[1106, 1140, 6]"]
|
||||
359["StartSketchOnFace<br>[1519, 1551, 6]"]
|
||||
360["StartSketchOnFace<br>[1801, 1833, 6]"]
|
||||
361["StartSketchOnFace<br>[2346, 2378, 6]"]
|
||||
362["StartSketchOnFace<br>[1005, 1037, 7]"]
|
||||
363["StartSketchOnFace<br>[1419, 1451, 7]"]
|
||||
364["StartSketchOnFace<br>[2027, 2061, 7]"]
|
||||
365["StartSketchOnFace<br>[2414, 2446, 7]"]
|
||||
366["StartSketchOnFace<br>[2850, 2884, 7]"]
|
||||
367["StartSketchOnFace<br>[3018, 3052, 7]"]
|
||||
368["StartSketchOnFace<br>[4118, 4152, 7]"]
|
||||
350["StartSketchOnFace<br>[1096, 1128, 5]"]
|
||||
351["StartSketchOnFace<br>[1351, 1383, 5]"]
|
||||
352["StartSketchOnFace<br>[1520, 1552, 5]"]
|
||||
353["StartSketchOnFace<br>[1906, 1938, 5]"]
|
||||
354["StartSketchOnFace<br>[862, 894, 6]"]
|
||||
355["StartSketchOnFace<br>[1241, 1273, 6]"]
|
||||
356["StartSketchOnFace<br>[1705, 1737, 6]"]
|
||||
357["StartSketchOnFace<br>[873, 907, 7]"]
|
||||
358["StartSketchOnFace<br>[1106, 1140, 7]"]
|
||||
359["StartSketchOnFace<br>[1519, 1551, 7]"]
|
||||
360["StartSketchOnFace<br>[1801, 1833, 7]"]
|
||||
361["StartSketchOnFace<br>[2346, 2378, 7]"]
|
||||
362["StartSketchOnFace<br>[1005, 1037, 8]"]
|
||||
363["StartSketchOnFace<br>[1419, 1451, 8]"]
|
||||
364["StartSketchOnFace<br>[2027, 2061, 8]"]
|
||||
365["StartSketchOnFace<br>[2414, 2446, 8]"]
|
||||
366["StartSketchOnFace<br>[2850, 2884, 8]"]
|
||||
367["StartSketchOnFace<br>[3018, 3052, 8]"]
|
||||
368["StartSketchOnFace<br>[4118, 4152, 8]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
|
@ -5,18 +5,18 @@ description: Variables in memory after executing multi-axis-robot.kcl
|
||||
{
|
||||
"j2RobotArm": {
|
||||
"type": "Module",
|
||||
"value": 6
|
||||
"value": 7
|
||||
},
|
||||
"j3RobotArm": {
|
||||
"type": "Module",
|
||||
"value": 7
|
||||
"value": 8
|
||||
},
|
||||
"robotArmBase": {
|
||||
"type": "Module",
|
||||
"value": 4
|
||||
"value": 5
|
||||
},
|
||||
"rotatingBase": {
|
||||
"type": "Module",
|
||||
"value": 5
|
||||
"value": 6
|
||||
}
|
||||
}
|
||||
|
@ -1,206 +1,206 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[537, 630, 5]"]
|
||||
3["Segment<br>[537, 630, 5]"]
|
||||
2["Path<br>[537, 630, 6]"]
|
||||
3["Segment<br>[537, 630, 6]"]
|
||||
4[Solid2d]
|
||||
end
|
||||
subgraph path6 [Path]
|
||||
6["Path<br>[859, 914, 5]"]
|
||||
7["Segment<br>[859, 914, 5]"]
|
||||
6["Path<br>[859, 914, 6]"]
|
||||
7["Segment<br>[859, 914, 6]"]
|
||||
8[Solid2d]
|
||||
end
|
||||
subgraph path15 [Path]
|
||||
15["Path<br>[1129, 1188, 5]"]
|
||||
16["Segment<br>[1129, 1188, 5]"]
|
||||
15["Path<br>[1129, 1188, 6]"]
|
||||
16["Segment<br>[1129, 1188, 6]"]
|
||||
17[Solid2d]
|
||||
end
|
||||
subgraph path23 [Path]
|
||||
23["Path<br>[1290, 1350, 5]"]
|
||||
24["Segment<br>[1290, 1350, 5]"]
|
||||
23["Path<br>[1290, 1350, 6]"]
|
||||
24["Segment<br>[1290, 1350, 6]"]
|
||||
25[Solid2d]
|
||||
end
|
||||
subgraph path31 [Path]
|
||||
31["Path<br>[1507, 1560, 5]"]
|
||||
32["Segment<br>[1507, 1560, 5]"]
|
||||
31["Path<br>[1507, 1560, 6]"]
|
||||
32["Segment<br>[1507, 1560, 6]"]
|
||||
33[Solid2d]
|
||||
end
|
||||
subgraph path39 [Path]
|
||||
39["Path<br>[537, 630, 5]"]
|
||||
40["Segment<br>[537, 630, 5]"]
|
||||
39["Path<br>[537, 630, 6]"]
|
||||
40["Segment<br>[537, 630, 6]"]
|
||||
41[Solid2d]
|
||||
end
|
||||
subgraph path43 [Path]
|
||||
43["Path<br>[859, 914, 5]"]
|
||||
44["Segment<br>[859, 914, 5]"]
|
||||
43["Path<br>[859, 914, 6]"]
|
||||
44["Segment<br>[859, 914, 6]"]
|
||||
45[Solid2d]
|
||||
end
|
||||
subgraph path52 [Path]
|
||||
52["Path<br>[1129, 1188, 5]"]
|
||||
53["Segment<br>[1129, 1188, 5]"]
|
||||
52["Path<br>[1129, 1188, 6]"]
|
||||
53["Segment<br>[1129, 1188, 6]"]
|
||||
54[Solid2d]
|
||||
end
|
||||
subgraph path60 [Path]
|
||||
60["Path<br>[1290, 1350, 5]"]
|
||||
61["Segment<br>[1290, 1350, 5]"]
|
||||
60["Path<br>[1290, 1350, 6]"]
|
||||
61["Segment<br>[1290, 1350, 6]"]
|
||||
62[Solid2d]
|
||||
end
|
||||
subgraph path68 [Path]
|
||||
68["Path<br>[1507, 1560, 5]"]
|
||||
69["Segment<br>[1507, 1560, 5]"]
|
||||
68["Path<br>[1507, 1560, 6]"]
|
||||
69["Segment<br>[1507, 1560, 6]"]
|
||||
70[Solid2d]
|
||||
end
|
||||
subgraph path76 [Path]
|
||||
76["Path<br>[494, 556, 6]"]
|
||||
77["Segment<br>[494, 556, 6]"]
|
||||
76["Path<br>[494, 556, 7]"]
|
||||
77["Segment<br>[494, 556, 7]"]
|
||||
78[Solid2d]
|
||||
end
|
||||
subgraph path85 [Path]
|
||||
85["Path<br>[706, 766, 6]"]
|
||||
86["Segment<br>[706, 766, 6]"]
|
||||
85["Path<br>[706, 766, 7]"]
|
||||
86["Segment<br>[706, 766, 7]"]
|
||||
87[Solid2d]
|
||||
end
|
||||
subgraph path93 [Path]
|
||||
93["Path<br>[355, 407, 7]"]
|
||||
94["Segment<br>[355, 407, 7]"]
|
||||
93["Path<br>[355, 407, 8]"]
|
||||
94["Segment<br>[355, 407, 8]"]
|
||||
95[Solid2d]
|
||||
end
|
||||
subgraph path102 [Path]
|
||||
102["Path<br>[540, 592, 7]"]
|
||||
103["Segment<br>[540, 592, 7]"]
|
||||
102["Path<br>[540, 592, 8]"]
|
||||
103["Segment<br>[540, 592, 8]"]
|
||||
104[Solid2d]
|
||||
end
|
||||
subgraph path110 [Path]
|
||||
110["Path<br>[446, 516, 8]"]
|
||||
111["Segment<br>[446, 516, 8]"]
|
||||
110["Path<br>[446, 516, 9]"]
|
||||
111["Segment<br>[446, 516, 9]"]
|
||||
112[Solid2d]
|
||||
end
|
||||
subgraph path121 [Path]
|
||||
121["Path<br>[780, 867, 8]"]
|
||||
122["Segment<br>[875, 958, 8]"]
|
||||
123["Segment<br>[966, 1049, 8]"]
|
||||
124["Segment<br>[1057, 1140, 8]"]
|
||||
125["Segment<br>[1148, 1230, 8]"]
|
||||
126["Segment<br>[1238, 1320, 8]"]
|
||||
127["Segment<br>[1328, 1335, 8]"]
|
||||
121["Path<br>[780, 867, 9]"]
|
||||
122["Segment<br>[875, 958, 9]"]
|
||||
123["Segment<br>[966, 1049, 9]"]
|
||||
124["Segment<br>[1057, 1140, 9]"]
|
||||
125["Segment<br>[1148, 1230, 9]"]
|
||||
126["Segment<br>[1238, 1320, 9]"]
|
||||
127["Segment<br>[1328, 1335, 9]"]
|
||||
128[Solid2d]
|
||||
end
|
||||
subgraph path149 [Path]
|
||||
149["Path<br>[1469, 1538, 8]"]
|
||||
150["Segment<br>[1469, 1538, 8]"]
|
||||
149["Path<br>[1469, 1538, 9]"]
|
||||
150["Segment<br>[1469, 1538, 9]"]
|
||||
151[Solid2d]
|
||||
end
|
||||
subgraph path158 [Path]
|
||||
158["Path<br>[378, 468, 9]"]
|
||||
159["Segment<br>[476, 558, 9]"]
|
||||
160["Segment<br>[566, 648, 9]"]
|
||||
161["Segment<br>[656, 738, 9]"]
|
||||
162["Segment<br>[746, 827, 9]"]
|
||||
163["Segment<br>[835, 916, 9]"]
|
||||
164["Segment<br>[924, 931, 9]"]
|
||||
158["Path<br>[378, 468, 10]"]
|
||||
159["Segment<br>[476, 558, 10]"]
|
||||
160["Segment<br>[566, 648, 10]"]
|
||||
161["Segment<br>[656, 738, 10]"]
|
||||
162["Segment<br>[746, 827, 10]"]
|
||||
163["Segment<br>[835, 916, 10]"]
|
||||
164["Segment<br>[924, 931, 10]"]
|
||||
165[Solid2d]
|
||||
end
|
||||
subgraph path187 [Path]
|
||||
187["Path<br>[1075, 1127, 9]"]
|
||||
188["Segment<br>[1075, 1127, 9]"]
|
||||
187["Path<br>[1075, 1127, 10]"]
|
||||
188["Segment<br>[1075, 1127, 10]"]
|
||||
189[Solid2d]
|
||||
end
|
||||
subgraph path195 [Path]
|
||||
195["Path<br>[313, 371, 10]"]
|
||||
196["Segment<br>[313, 371, 10]"]
|
||||
195["Path<br>[313, 371, 11]"]
|
||||
196["Segment<br>[313, 371, 11]"]
|
||||
197[Solid2d]
|
||||
end
|
||||
subgraph path204 [Path]
|
||||
204["Path<br>[510, 565, 10]"]
|
||||
205["Segment<br>[510, 565, 10]"]
|
||||
204["Path<br>[510, 565, 11]"]
|
||||
205["Segment<br>[510, 565, 11]"]
|
||||
206[Solid2d]
|
||||
end
|
||||
subgraph path212 [Path]
|
||||
212["Path<br>[313, 371, 10]"]
|
||||
213["Segment<br>[313, 371, 10]"]
|
||||
212["Path<br>[313, 371, 11]"]
|
||||
213["Segment<br>[313, 371, 11]"]
|
||||
214[Solid2d]
|
||||
end
|
||||
subgraph path221 [Path]
|
||||
221["Path<br>[510, 565, 10]"]
|
||||
222["Segment<br>[510, 565, 10]"]
|
||||
221["Path<br>[510, 565, 11]"]
|
||||
222["Segment<br>[510, 565, 11]"]
|
||||
223[Solid2d]
|
||||
end
|
||||
1["Plane<br>[512, 529, 5]"]
|
||||
5["Plane<br>[834, 851, 5]"]
|
||||
9["Sweep Extrusion<br>[952, 992, 5]"]
|
||||
1["Plane<br>[512, 529, 6]"]
|
||||
5["Plane<br>[834, 851, 6]"]
|
||||
9["Sweep Extrusion<br>[952, 992, 6]"]
|
||||
10[Wall]
|
||||
11["Cap Start"]
|
||||
12["Cap End"]
|
||||
13["SweepEdge Opposite"]
|
||||
14["SweepEdge Adjacent"]
|
||||
18["Sweep Extrusion<br>[1196, 1233, 5]"]
|
||||
18["Sweep Extrusion<br>[1196, 1233, 6]"]
|
||||
19[Wall]
|
||||
20["Cap End"]
|
||||
21["SweepEdge Opposite"]
|
||||
22["SweepEdge Adjacent"]
|
||||
26["Sweep Extrusion<br>[1358, 1396, 5]"]
|
||||
26["Sweep Extrusion<br>[1358, 1396, 6]"]
|
||||
27[Wall]
|
||||
28["Cap End"]
|
||||
29["SweepEdge Opposite"]
|
||||
30["SweepEdge Adjacent"]
|
||||
34["Sweep Extrusion<br>[1568, 1610, 5]"]
|
||||
34["Sweep Extrusion<br>[1568, 1610, 6]"]
|
||||
35[Wall]
|
||||
36["SweepEdge Opposite"]
|
||||
37["SweepEdge Adjacent"]
|
||||
38["Plane<br>[512, 529, 5]"]
|
||||
42["Plane<br>[834, 851, 5]"]
|
||||
46["Sweep Extrusion<br>[952, 992, 5]"]
|
||||
38["Plane<br>[512, 529, 6]"]
|
||||
42["Plane<br>[834, 851, 6]"]
|
||||
46["Sweep Extrusion<br>[952, 992, 6]"]
|
||||
47[Wall]
|
||||
48["Cap Start"]
|
||||
49["Cap End"]
|
||||
50["SweepEdge Opposite"]
|
||||
51["SweepEdge Adjacent"]
|
||||
55["Sweep Extrusion<br>[1196, 1233, 5]"]
|
||||
55["Sweep Extrusion<br>[1196, 1233, 6]"]
|
||||
56[Wall]
|
||||
57["Cap End"]
|
||||
58["SweepEdge Opposite"]
|
||||
59["SweepEdge Adjacent"]
|
||||
63["Sweep Extrusion<br>[1358, 1396, 5]"]
|
||||
63["Sweep Extrusion<br>[1358, 1396, 6]"]
|
||||
64[Wall]
|
||||
65["Cap End"]
|
||||
66["SweepEdge Opposite"]
|
||||
67["SweepEdge Adjacent"]
|
||||
71["Sweep Extrusion<br>[1568, 1610, 5]"]
|
||||
71["Sweep Extrusion<br>[1568, 1610, 6]"]
|
||||
72[Wall]
|
||||
73["SweepEdge Opposite"]
|
||||
74["SweepEdge Adjacent"]
|
||||
75["Plane<br>[469, 486, 6]"]
|
||||
79["Sweep Extrusion<br>[564, 600, 6]"]
|
||||
75["Plane<br>[469, 486, 7]"]
|
||||
79["Sweep Extrusion<br>[564, 600, 7]"]
|
||||
80[Wall]
|
||||
81["Cap Start"]
|
||||
82["Cap End"]
|
||||
83["SweepEdge Opposite"]
|
||||
84["SweepEdge Adjacent"]
|
||||
88["Sweep Extrusion<br>[774, 811, 6]"]
|
||||
88["Sweep Extrusion<br>[774, 811, 7]"]
|
||||
89[Wall]
|
||||
90["SweepEdge Opposite"]
|
||||
91["SweepEdge Adjacent"]
|
||||
92["Plane<br>[330, 347, 7]"]
|
||||
96["Sweep Extrusion<br>[415, 448, 7]"]
|
||||
92["Plane<br>[330, 347, 8]"]
|
||||
96["Sweep Extrusion<br>[415, 448, 8]"]
|
||||
97[Wall]
|
||||
98["Cap Start"]
|
||||
99["Cap End"]
|
||||
100["SweepEdge Opposite"]
|
||||
101["SweepEdge Adjacent"]
|
||||
105["Sweep Extrusion<br>[600, 637, 7]"]
|
||||
105["Sweep Extrusion<br>[600, 637, 8]"]
|
||||
106[Wall]
|
||||
107["SweepEdge Opposite"]
|
||||
108["SweepEdge Adjacent"]
|
||||
109["Plane<br>[421, 438, 8]"]
|
||||
113["Sweep Extrusion<br>[524, 557, 8]"]
|
||||
109["Plane<br>[421, 438, 9]"]
|
||||
113["Sweep Extrusion<br>[524, 557, 9]"]
|
||||
114[Wall]
|
||||
115["Cap Start"]
|
||||
116["Cap End"]
|
||||
117["SweepEdge Opposite"]
|
||||
118["SweepEdge Adjacent"]
|
||||
119["EdgeCut Fillet<br>[565, 631, 8]"]
|
||||
120["EdgeCut Fillet<br>[565, 631, 8]"]
|
||||
129["Sweep Extrusion<br>[1343, 1383, 8]"]
|
||||
119["EdgeCut Fillet<br>[565, 631, 9]"]
|
||||
120["EdgeCut Fillet<br>[565, 631, 9]"]
|
||||
129["Sweep Extrusion<br>[1343, 1383, 9]"]
|
||||
130[Wall]
|
||||
131[Wall]
|
||||
132[Wall]
|
||||
@ -220,13 +220,13 @@ flowchart LR
|
||||
146["SweepEdge Adjacent"]
|
||||
147["SweepEdge Opposite"]
|
||||
148["SweepEdge Adjacent"]
|
||||
152["Sweep Extrusion<br>[1546, 1574, 8]"]
|
||||
152["Sweep Extrusion<br>[1546, 1574, 9]"]
|
||||
153[Wall]
|
||||
154["Cap End"]
|
||||
155["SweepEdge Opposite"]
|
||||
156["SweepEdge Adjacent"]
|
||||
157["Plane<br>[353, 370, 9]"]
|
||||
166["Sweep Extrusion<br>[939, 972, 9]"]
|
||||
157["Plane<br>[353, 370, 10]"]
|
||||
166["Sweep Extrusion<br>[939, 972, 10]"]
|
||||
167[Wall]
|
||||
168[Wall]
|
||||
169[Wall]
|
||||
@ -247,45 +247,45 @@ flowchart LR
|
||||
184["SweepEdge Adjacent"]
|
||||
185["SweepEdge Opposite"]
|
||||
186["SweepEdge Adjacent"]
|
||||
190["Sweep Extrusion<br>[1135, 1172, 9]"]
|
||||
190["Sweep Extrusion<br>[1135, 1172, 10]"]
|
||||
191[Wall]
|
||||
192["SweepEdge Opposite"]
|
||||
193["SweepEdge Adjacent"]
|
||||
194["Plane<br>[288, 305, 10]"]
|
||||
198["Sweep Extrusion<br>[379, 410, 10]"]
|
||||
194["Plane<br>[288, 305, 11]"]
|
||||
198["Sweep Extrusion<br>[379, 410, 11]"]
|
||||
199[Wall]
|
||||
200["Cap Start"]
|
||||
201["Cap End"]
|
||||
202["SweepEdge Opposite"]
|
||||
203["SweepEdge Adjacent"]
|
||||
207["Sweep Extrusion<br>[573, 605, 10]"]
|
||||
207["Sweep Extrusion<br>[573, 605, 11]"]
|
||||
208[Wall]
|
||||
209["SweepEdge Opposite"]
|
||||
210["SweepEdge Adjacent"]
|
||||
211["Plane<br>[288, 305, 10]"]
|
||||
215["Sweep Extrusion<br>[379, 410, 10]"]
|
||||
211["Plane<br>[288, 305, 11]"]
|
||||
215["Sweep Extrusion<br>[379, 410, 11]"]
|
||||
216[Wall]
|
||||
217["Cap Start"]
|
||||
218["Cap End"]
|
||||
219["SweepEdge Opposite"]
|
||||
220["SweepEdge Adjacent"]
|
||||
224["Sweep Extrusion<br>[573, 605, 10]"]
|
||||
224["Sweep Extrusion<br>[573, 605, 11]"]
|
||||
225[Wall]
|
||||
226["SweepEdge Opposite"]
|
||||
227["SweepEdge Adjacent"]
|
||||
228["StartSketchOnFace<br>[1087, 1121, 5]"]
|
||||
229["StartSketchOnFace<br>[1250, 1282, 5]"]
|
||||
230["StartSketchOnFace<br>[1466, 1499, 5]"]
|
||||
231["StartSketchOnFace<br>[1087, 1121, 5]"]
|
||||
232["StartSketchOnFace<br>[1250, 1282, 5]"]
|
||||
233["StartSketchOnFace<br>[1466, 1499, 5]"]
|
||||
234["StartSketchOnFace<br>[666, 698, 6]"]
|
||||
235["StartSketchOnFace<br>[500, 532, 7]"]
|
||||
236["StartSketchOnFace<br>[740, 772, 8]"]
|
||||
237["StartSketchOnFace<br>[1431, 1461, 8]"]
|
||||
238["StartSketchOnFace<br>[1035, 1067, 9]"]
|
||||
239["StartSketchOnFace<br>[472, 502, 10]"]
|
||||
240["StartSketchOnFace<br>[472, 502, 10]"]
|
||||
228["StartSketchOnFace<br>[1087, 1121, 6]"]
|
||||
229["StartSketchOnFace<br>[1250, 1282, 6]"]
|
||||
230["StartSketchOnFace<br>[1466, 1499, 6]"]
|
||||
231["StartSketchOnFace<br>[1087, 1121, 6]"]
|
||||
232["StartSketchOnFace<br>[1250, 1282, 6]"]
|
||||
233["StartSketchOnFace<br>[1466, 1499, 6]"]
|
||||
234["StartSketchOnFace<br>[666, 698, 7]"]
|
||||
235["StartSketchOnFace<br>[500, 532, 8]"]
|
||||
236["StartSketchOnFace<br>[740, 772, 9]"]
|
||||
237["StartSketchOnFace<br>[1431, 1461, 9]"]
|
||||
238["StartSketchOnFace<br>[1035, 1067, 10]"]
|
||||
239["StartSketchOnFace<br>[472, 502, 11]"]
|
||||
240["StartSketchOnFace<br>[472, 502, 11]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -39,7 +39,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
451,
|
||||
1670,
|
||||
5
|
||||
6
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -657,7 +657,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
451,
|
||||
1670,
|
||||
5
|
||||
6
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1275,7 +1275,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
414,
|
||||
870,
|
||||
6
|
||||
7
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -1525,7 +1525,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
275,
|
||||
696,
|
||||
7
|
||||
8
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -2024,7 +2024,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
365,
|
||||
1664,
|
||||
8
|
||||
9
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -2524,7 +2524,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
297,
|
||||
1231,
|
||||
9
|
||||
10
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -2839,7 +2839,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
244,
|
||||
658,
|
||||
10
|
||||
11
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
@ -3083,7 +3083,7 @@ description: Operations executed pipe-flange-assembly.kcl
|
||||
"functionSourceRange": [
|
||||
244,
|
||||
658,
|
||||
10
|
||||
11
|
||||
],
|
||||
"unlabeledArg": null,
|
||||
"labeledArgs": {},
|
||||
|
@ -1,59 +1,59 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph path2 [Path]
|
||||
2["Path<br>[460, 506, 0]"]
|
||||
3["Segment<br>[512, 565, 0]"]
|
||||
4["Segment<br>[571, 673, 0]"]
|
||||
5["Segment<br>[679, 732, 0]"]
|
||||
6["Segment<br>[738, 785, 0]"]
|
||||
7["Segment<br>[791, 886, 0]"]
|
||||
8["Segment<br>[892, 963, 0]"]
|
||||
9["Segment<br>[969, 1020, 0]"]
|
||||
10["Segment<br>[1026, 1079, 0]"]
|
||||
11["Segment<br>[1085, 1154, 0]"]
|
||||
12["Segment<br>[1160, 1199, 0]"]
|
||||
13["Segment<br>[1205, 1235, 0]"]
|
||||
14["Segment<br>[1241, 1271, 0]"]
|
||||
15["Segment<br>[1277, 1307, 0]"]
|
||||
16["Segment<br>[1313, 1343, 0]"]
|
||||
17["Segment<br>[1349, 1378, 0]"]
|
||||
18["Segment<br>[1384, 1414, 0]"]
|
||||
19["Segment<br>[1420, 1449, 0]"]
|
||||
20["Segment<br>[1455, 1484, 0]"]
|
||||
21["Segment<br>[1490, 1586, 0]"]
|
||||
22["Segment<br>[1592, 1648, 0]"]
|
||||
23["Segment<br>[1654, 1661, 0]"]
|
||||
2["Path<br>[460, 503, 0]"]
|
||||
3["Segment<br>[509, 562, 0]"]
|
||||
4["Segment<br>[568, 670, 0]"]
|
||||
5["Segment<br>[676, 729, 0]"]
|
||||
6["Segment<br>[735, 782, 0]"]
|
||||
7["Segment<br>[788, 883, 0]"]
|
||||
8["Segment<br>[889, 960, 0]"]
|
||||
9["Segment<br>[966, 1017, 0]"]
|
||||
10["Segment<br>[1023, 1076, 0]"]
|
||||
11["Segment<br>[1082, 1151, 0]"]
|
||||
12["Segment<br>[1157, 1193, 0]"]
|
||||
13["Segment<br>[1199, 1229, 0]"]
|
||||
14["Segment<br>[1235, 1265, 0]"]
|
||||
15["Segment<br>[1271, 1301, 0]"]
|
||||
16["Segment<br>[1307, 1337, 0]"]
|
||||
17["Segment<br>[1343, 1372, 0]"]
|
||||
18["Segment<br>[1378, 1408, 0]"]
|
||||
19["Segment<br>[1414, 1443, 0]"]
|
||||
20["Segment<br>[1449, 1478, 0]"]
|
||||
21["Segment<br>[1484, 1580, 0]"]
|
||||
22["Segment<br>[1586, 1642, 0]"]
|
||||
23["Segment<br>[1648, 1655, 0]"]
|
||||
24[Solid2d]
|
||||
end
|
||||
subgraph path85 [Path]
|
||||
85["Path<br>[1759, 1803, 0]"]
|
||||
86["Segment<br>[1809, 1871, 0]"]
|
||||
87["Segment<br>[1877, 1990, 0]"]
|
||||
88["Segment<br>[1996, 2116, 0]"]
|
||||
89["Segment<br>[2122, 2178, 0]"]
|
||||
90["Segment<br>[2184, 2191, 0]"]
|
||||
85["Path<br>[1753, 1797, 0]"]
|
||||
86["Segment<br>[1803, 1865, 0]"]
|
||||
87["Segment<br>[1871, 1984, 0]"]
|
||||
88["Segment<br>[1990, 2110, 0]"]
|
||||
89["Segment<br>[2116, 2172, 0]"]
|
||||
90["Segment<br>[2178, 2185, 0]"]
|
||||
91[Solid2d]
|
||||
end
|
||||
subgraph path107 [Path]
|
||||
107["Path<br>[2290, 2335, 0]"]
|
||||
108["Segment<br>[2341, 2401, 0]"]
|
||||
109["Segment<br>[2407, 2520, 0]"]
|
||||
110["Segment<br>[2526, 2646, 0]"]
|
||||
111["Segment<br>[2652, 2708, 0]"]
|
||||
112["Segment<br>[2714, 2721, 0]"]
|
||||
107["Path<br>[2284, 2329, 0]"]
|
||||
108["Segment<br>[2335, 2395, 0]"]
|
||||
109["Segment<br>[2401, 2514, 0]"]
|
||||
110["Segment<br>[2520, 2640, 0]"]
|
||||
111["Segment<br>[2646, 2702, 0]"]
|
||||
112["Segment<br>[2708, 2715, 0]"]
|
||||
113[Solid2d]
|
||||
end
|
||||
subgraph path129 [Path]
|
||||
129["Path<br>[2819, 2864, 0]"]
|
||||
130["Segment<br>[2870, 2937, 0]"]
|
||||
131["Segment<br>[2943, 3056, 0]"]
|
||||
132["Segment<br>[3062, 3182, 0]"]
|
||||
133["Segment<br>[3188, 3244, 0]"]
|
||||
134["Segment<br>[3250, 3257, 0]"]
|
||||
129["Path<br>[2813, 2858, 0]"]
|
||||
130["Segment<br>[2864, 2931, 0]"]
|
||||
131["Segment<br>[2937, 3050, 0]"]
|
||||
132["Segment<br>[3056, 3176, 0]"]
|
||||
133["Segment<br>[3182, 3238, 0]"]
|
||||
134["Segment<br>[3244, 3251, 0]"]
|
||||
135[Solid2d]
|
||||
end
|
||||
1["Plane<br>[437, 454, 0]"]
|
||||
25["Sweep Extrusion<br>[1675, 1705, 0]"]
|
||||
25["Sweep Extrusion<br>[1669, 1699, 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<br>[2205, 2236, 0]"]
|
||||
92["Sweep Extrusion<br>[2199, 2230, 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<br>[2736, 2767, 0]"]
|
||||
114["Sweep Extrusion<br>[2730, 2761, 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<br>[3271, 3301, 0]"]
|
||||
136["Sweep Extrusion<br>[3265, 3295, 0]"]
|
||||
137[Wall]
|
||||
138[Wall]
|
||||
139[Wall]
|
||||
@ -158,9 +158,9 @@ flowchart LR
|
||||
148["SweepEdge Adjacent"]
|
||||
149["SweepEdge Opposite"]
|
||||
150["SweepEdge Adjacent"]
|
||||
151["StartSketchOnFace<br>[1719, 1753, 0]"]
|
||||
152["StartSketchOnFace<br>[2250, 2284, 0]"]
|
||||
153["StartSketchOnFace<br>[2781, 2813, 0]"]
|
||||
151["StartSketchOnFace<br>[1713, 1747, 0]"]
|
||||
152["StartSketchOnFace<br>[2244, 2278, 0]"]
|
||||
153["StartSketchOnFace<br>[2775, 2807, 0]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -7,36 +7,36 @@ flowchart LR
|
||||
5["Segment<br>[705, 781, 0]"]
|
||||
6["Segment<br>[787, 856, 0]"]
|
||||
7["Segment<br>[862, 902, 0]"]
|
||||
8["Segment<br>[908, 947, 0]"]
|
||||
9["Segment<br>[987, 1017, 0]"]
|
||||
10["Segment<br>[1023, 1052, 0]"]
|
||||
11["Segment<br>[1058, 1087, 0]"]
|
||||
12["Segment<br>[1093, 1122, 0]"]
|
||||
13["Segment<br>[1128, 1228, 0]"]
|
||||
14["Segment<br>[1234, 1290, 0]"]
|
||||
15["Segment<br>[1296, 1303, 0]"]
|
||||
8["Segment<br>[908, 944, 0]"]
|
||||
9["Segment<br>[984, 1014, 0]"]
|
||||
10["Segment<br>[1020, 1049, 0]"]
|
||||
11["Segment<br>[1055, 1084, 0]"]
|
||||
12["Segment<br>[1090, 1119, 0]"]
|
||||
13["Segment<br>[1125, 1225, 0]"]
|
||||
14["Segment<br>[1231, 1287, 0]"]
|
||||
15["Segment<br>[1293, 1300, 0]"]
|
||||
16[Solid2d]
|
||||
end
|
||||
subgraph path52 [Path]
|
||||
52["Path<br>[1458, 1558, 0]"]
|
||||
53["Segment<br>[1564, 1611, 0]"]
|
||||
54["Segment<br>[1617, 1732, 0]"]
|
||||
55["Segment<br>[1738, 1858, 0]"]
|
||||
56["Segment<br>[1864, 1920, 0]"]
|
||||
57["Segment<br>[1926, 1933, 0]"]
|
||||
52["Path<br>[1455, 1555, 0]"]
|
||||
53["Segment<br>[1561, 1608, 0]"]
|
||||
54["Segment<br>[1614, 1729, 0]"]
|
||||
55["Segment<br>[1735, 1855, 0]"]
|
||||
56["Segment<br>[1861, 1917, 0]"]
|
||||
57["Segment<br>[1923, 1930, 0]"]
|
||||
58[Solid2d]
|
||||
end
|
||||
subgraph path74 [Path]
|
||||
74["Path<br>[2090, 2189, 0]"]
|
||||
75["Segment<br>[2195, 2241, 0]"]
|
||||
76["Segment<br>[2247, 2339, 0]"]
|
||||
77["Segment<br>[2345, 2442, 0]"]
|
||||
78["Segment<br>[2448, 2504, 0]"]
|
||||
79["Segment<br>[2510, 2517, 0]"]
|
||||
74["Path<br>[2087, 2186, 0]"]
|
||||
75["Segment<br>[2192, 2238, 0]"]
|
||||
76["Segment<br>[2244, 2336, 0]"]
|
||||
77["Segment<br>[2342, 2439, 0]"]
|
||||
78["Segment<br>[2445, 2501, 0]"]
|
||||
79["Segment<br>[2507, 2514, 0]"]
|
||||
80[Solid2d]
|
||||
end
|
||||
1["Plane<br>[484, 501, 0]"]
|
||||
17["Sweep Extrusion<br>[1346, 1376, 0]"]
|
||||
17["Sweep Extrusion<br>[1343, 1373, 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<br>[1977, 2009, 0]"]
|
||||
59["Sweep Extrusion<br>[1974, 2006, 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<br>[2560, 2592, 0]"]
|
||||
81["Sweep Extrusion<br>[2557, 2589, 0]"]
|
||||
82[Wall]
|
||||
83[Wall]
|
||||
84[Wall]
|
||||
@ -101,8 +101,8 @@ flowchart LR
|
||||
93["SweepEdge Adjacent"]
|
||||
94["SweepEdge Opposite"]
|
||||
95["SweepEdge Adjacent"]
|
||||
96["StartSketchOnFace<br>[1418, 1452, 0]"]
|
||||
97["StartSketchOnFace<br>[2050, 2084, 0]"]
|
||||
96["StartSketchOnFace<br>[1415, 1449, 0]"]
|
||||
97["StartSketchOnFace<br>[2047, 2081, 0]"]
|
||||
1 --- 2
|
||||
2 --- 3
|
||||
2 --- 4
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user