Compare commits
11 Commits
v0.41.0
...
pierremtb/
Author | SHA1 | Date | |
---|---|---|---|
fecf5c2ee7 | |||
d531728675 | |||
1d78fc15ac | |||
c32aebc8ad | |||
997ebce3eb | |||
1eaf371b44 | |||
54da18d8ab | |||
2fe5ef7034 | |||
16b5eeadb1 | |||
7be4001839 | |||
ffb2559787 |
@ -2,8 +2,8 @@ NODE_ENV=development
|
||||
DEV=true
|
||||
VITE_KC_API_WS_MODELING_URL=wss://api.dev.zoo.dev/ws/modeling/commands
|
||||
VITE_KC_API_BASE_URL=https://api.dev.zoo.dev
|
||||
BASE_URL=https://api.dev.zoo.dev
|
||||
VITE_KC_SITE_BASE_URL=https://dev.zoo.dev
|
||||
VITE_KC_SITE_APP_URL=https://app.dev.zoo.dev
|
||||
VITE_KC_SKIP_AUTH=false
|
||||
VITE_KC_CONNECTION_TIMEOUT_MS=5000
|
||||
# ONLY add your token in .env.development.local if you want to skip auth, otherwise this token takes precedence!
|
||||
|
@ -1,8 +1,5 @@
|
||||
NODE_ENV=production
|
||||
DEV=false
|
||||
VITE_KC_API_WS_MODELING_URL=wss://api.zoo.dev/ws/modeling/commands
|
||||
VITE_KC_API_BASE_URL=https://api.zoo.dev
|
||||
VITE_KC_SITE_BASE_URL=https://zoo.dev
|
||||
VITE_KC_SITE_APP_URL=https://app.zoo.dev
|
||||
VITE_KC_SKIP_AUTH=false
|
||||
VITE_KC_CONNECTION_TIMEOUT_MS=15000
|
||||
|
@ -29,13 +29,6 @@
|
||||
{
|
||||
"name": "isNaN",
|
||||
"message": "Use Number.isNaN() instead."
|
||||
},
|
||||
],
|
||||
"no-restricted-syntax": [
|
||||
"error",
|
||||
{
|
||||
"selector": "CallExpression[callee.object.name='Array'][callee.property.name='isArray']",
|
||||
"message": "Use isArray() in lib/utils.ts instead of Array.isArray()."
|
||||
}
|
||||
],
|
||||
"semi": [
|
||||
|
16
.github/workflows/build-apps.yml
vendored
16
.github/workflows/build-apps.yml
vendored
@ -134,6 +134,8 @@ jobs:
|
||||
max_attempts: 3
|
||||
command: yarn install
|
||||
|
||||
- run: yarn tronb:vite
|
||||
|
||||
- name: Prepare certificate and variables (Windows only)
|
||||
if: ${{ (env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true') && matrix.os == 'windows-2022' }}
|
||||
run: |
|
||||
@ -163,8 +165,8 @@ jobs:
|
||||
- name: Build the app (debug)
|
||||
if: ${{ env.IS_RELEASE == 'false' && env.IS_NIGHTLY == 'false' }}
|
||||
# electron-builder doesn't have a concept of release vs debug,
|
||||
# this is just not doing any codesign or release yml generation, and points to dev infra
|
||||
run: yarn tronb:package:dev
|
||||
# this is just not doing any codesign or release yml generation
|
||||
run: yarn electron-builder --config
|
||||
|
||||
- name: Build the app (release)
|
||||
if: ${{ env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true' }}
|
||||
@ -183,7 +185,7 @@ jobs:
|
||||
with:
|
||||
timeout_minutes: 10
|
||||
max_attempts: 3
|
||||
command: yarn tronb:package:prod
|
||||
command: yarn electron-builder --config --publish always
|
||||
|
||||
- name: List artifacts in out/
|
||||
run: ls -R out
|
||||
@ -244,7 +246,7 @@ jobs:
|
||||
with:
|
||||
timeout_minutes: 10
|
||||
max_attempts: 3
|
||||
command: yarn tronb:package:prod
|
||||
command: yarn electron-builder --config --publish always
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: ${{ env.IS_RELEASE == 'true' }}
|
||||
@ -388,19 +390,19 @@ jobs:
|
||||
|
||||
- name: Authenticate to Google Cloud
|
||||
if: ${{ env.IS_NIGHTLY == 'true' }}
|
||||
uses: 'google-github-actions/auth@v2.1.8'
|
||||
uses: 'google-github-actions/auth@v2.1.7'
|
||||
with:
|
||||
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
|
||||
|
||||
- name: Set up Google Cloud SDK
|
||||
if: ${{ env.IS_NIGHTLY == 'true' }}
|
||||
uses: google-github-actions/setup-gcloud@v2.1.4
|
||||
uses: google-github-actions/setup-gcloud@v2.1.2
|
||||
with:
|
||||
project_id: ${{ env.GOOGLE_CLOUD_PROJECT_ID }}
|
||||
|
||||
- name: Upload nightly files to public bucket
|
||||
if: ${{ env.IS_NIGHTLY == 'true' }}
|
||||
uses: google-github-actions/upload-cloud-storage@v2.2.2
|
||||
uses: google-github-actions/upload-cloud-storage@v2.2.1
|
||||
with:
|
||||
path: out
|
||||
glob: '*'
|
||||
|
12
.github/workflows/e2e-tests.yml
vendored
12
.github/workflows/e2e-tests.yml
vendored
@ -46,15 +46,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os }}
|
||||
needs: check-rust-changes
|
||||
steps:
|
||||
- uses: actions/create-github-app-token@v1
|
||||
id: app-token
|
||||
with:
|
||||
app-id: ${{ secrets.MODELING_APP_GH_APP_ID }}
|
||||
private-key: ${{ secrets.MODELING_APP_GH_APP_PRIVATE_KEY }}
|
||||
owner: ${{ github.repository_owner }}
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ steps.app-token.outputs.token }}
|
||||
- uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
@ -131,9 +123,9 @@ jobs:
|
||||
if: steps.download-wasm.outcome == 'failure'
|
||||
shell: bash
|
||||
run: yarn build:wasm
|
||||
- name: build web
|
||||
- name: build electron
|
||||
shell: bash
|
||||
run: yarn tronb:vite:dev
|
||||
run: yarn tron:package
|
||||
- name: Run ubuntu/chrome snapshots
|
||||
if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 }}
|
||||
shell: bash
|
||||
|
6
.github/workflows/publish-apps-release.yml
vendored
6
.github/workflows/publish-apps-release.yml
vendored
@ -108,17 +108,17 @@ jobs:
|
||||
run: yarn files:set-notes
|
||||
|
||||
- name: Authenticate to Google Cloud
|
||||
uses: 'google-github-actions/auth@v2.1.8'
|
||||
uses: 'google-github-actions/auth@v2.1.7'
|
||||
with:
|
||||
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
|
||||
|
||||
- name: Set up Google Cloud SDK
|
||||
uses: google-github-actions/setup-gcloud@v2.1.4
|
||||
uses: google-github-actions/setup-gcloud@v2.1.2
|
||||
with:
|
||||
project_id: ${{ env.GOOGLE_CLOUD_PROJECT_ID }}
|
||||
|
||||
- name: Upload release files to public bucket
|
||||
uses: google-github-actions/upload-cloud-storage@v2.2.2
|
||||
uses: google-github-actions/upload-cloud-storage@v2.2.1
|
||||
with:
|
||||
path: out
|
||||
glob: '*'
|
||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -25,7 +25,6 @@ yarn-error.log*
|
||||
|
||||
.idea
|
||||
.vscode
|
||||
.helix
|
||||
src/wasm-lib/.idea
|
||||
src/wasm-lib/.vscode
|
||||
|
||||
@ -45,7 +44,7 @@ e2e/playwright/temp3.png
|
||||
e2e/playwright/export-snapshots/*
|
||||
!e2e/playwright/export-snapshots/*.png
|
||||
|
||||
/kcl-samples
|
||||
|
||||
/test-results/
|
||||
/playwright-report/
|
||||
/blob-report/
|
||||
|
@ -1,2 +0,0 @@
|
||||
[editor]
|
||||
auto-format = true
|
@ -1,10 +0,0 @@
|
||||
[language-server.eslint]
|
||||
args = ["--stdio"]
|
||||
command = "vscode-eslint-language-server"
|
||||
|
||||
[[language]]
|
||||
name = "typescript"
|
||||
auto-format = true
|
||||
formatter = { command = "node_modules/.bin/prettier", args = ["--parser", "typescript"] }
|
||||
language-servers = [ { name = "eslint", only-features = [ "diagnostics" ] }, "typescript-language-server" ]
|
||||
|
@ -101,7 +101,7 @@ This will start the application and hot-reload on changes.
|
||||
|
||||
Devtools can be opened with the usual Cmd-Opt-I (Mac) or Ctrl-Shift-I (Linux and Windows).
|
||||
|
||||
To build with electron-builder, run `yarn tronb:package:dev` (or `yarn tronb:package:prod` to point to the .env.production variables)
|
||||
To build, run `yarn tron:package`.
|
||||
|
||||
## Checking out commits / Bisecting
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -31,12 +31,12 @@ appearance(data: AppearanceData, solid_set: SolidSet) -> SolidSet
|
||||
// Add color to an extruded solid.
|
||||
exampleSketch = startSketchOn("XZ")
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(endAbsolute = [10, 0])
|
||||
|> line(endAbsolute = [0, 10])
|
||||
|> line(endAbsolute = [-10, 0])
|
||||
|> close()
|
||||
|> lineTo([10, 0], %)
|
||||
|> lineTo([0, 10], %)
|
||||
|> lineTo([-10, 0], %)
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 5)
|
||||
example = extrude(5, exampleSketch)
|
||||
|> appearance({
|
||||
color = '#ff0000',
|
||||
metalness = 50,
|
||||
@ -65,11 +65,11 @@ sketch001 = startSketchOn('XY')
|
||||
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)
|
||||
|> lineTo([center[0] + 10, center[1] - 10], %)
|
||||
|> lineTo([center[0] + 10, center[1] + 10], %)
|
||||
|> lineTo([center[0] - 10, center[1] + 10], %)
|
||||
|> close(%)
|
||||
|> extrude(10, %)
|
||||
}
|
||||
|
||||
example0 = cube([0, 0])
|
||||
@ -95,11 +95,11 @@ appearance({
|
||||
// This example shows setting the appearance _after_ the shell.
|
||||
firstSketch = startSketchOn('XY')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0])
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|
||||
shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
||||
|> appearance({
|
||||
@ -116,11 +116,11 @@ shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
||||
// This example shows setting the appearance _before_ the shell.
|
||||
firstSketch = startSketchOn('XY')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0])
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|> appearance({
|
||||
color = '#ff0000',
|
||||
metalness = 90,
|
||||
@ -137,12 +137,12 @@ shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
||||
// This example shows _before_ the pattern.
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0, 2])
|
||||
|> line(end = [3, 1])
|
||||
|> line(end = [0, -4])
|
||||
|> close()
|
||||
|> line([0, 2], %)
|
||||
|> line([3, 1], %)
|
||||
|> line([0, -4], %)
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 1)
|
||||
example = extrude(1, exampleSketch)
|
||||
|> appearance({
|
||||
color = '#ff0000',
|
||||
metalness = 90,
|
||||
@ -162,12 +162,12 @@ example = extrude(exampleSketch, length = 1)
|
||||
// This example shows _after_ the pattern.
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0, 2])
|
||||
|> line(end = [3, 1])
|
||||
|> line(end = [0, -4])
|
||||
|> close()
|
||||
|> line([0, 2], %)
|
||||
|> line([3, 1], %)
|
||||
|> line([0, -4], %)
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 1)
|
||||
example = extrude(1, exampleSketch)
|
||||
|> patternLinear3d({
|
||||
axis = [1, 0, 1],
|
||||
instances = 7,
|
||||
@ -186,10 +186,10 @@ example = extrude(exampleSketch, length = 1)
|
||||
// Color the result of a 2D pattern that was extruded.
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([.5, 25], %)
|
||||
|> line(end = [0, 5])
|
||||
|> line(end = [-1, 0])
|
||||
|> line(end = [0, -5])
|
||||
|> close()
|
||||
|> line([0, 5], %)
|
||||
|> line([-1, 0], %)
|
||||
|> line([0, -5], %)
|
||||
|> close(%)
|
||||
|> patternCircular2d({
|
||||
center = [0, 0],
|
||||
instances = 13,
|
||||
@ -197,7 +197,7 @@ exampleSketch = startSketchOn('XZ')
|
||||
rotateDuplicates = true
|
||||
}, %)
|
||||
|
||||
example = extrude(exampleSketch, length = 1)
|
||||
example = extrude(1, exampleSketch)
|
||||
|> appearance({
|
||||
color = '#ff0000',
|
||||
metalness = 90,
|
||||
@ -214,11 +214,11 @@ example = extrude(exampleSketch, length = 1)
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
|> line(end = [0, 7])
|
||||
|> line([0, 7], %)
|
||||
|> tangentialArc({ offset = 90, radius = 5 }, %)
|
||||
|> line(end = [-3, 0])
|
||||
|> line([-3, 0], %)
|
||||
|> tangentialArc({ offset = -90, radius = 5 }, %)
|
||||
|> line(end = [0, 7])
|
||||
|> line([0, 7], %)
|
||||
|
||||
pipeHole = startSketchOn('XY')
|
||||
|> circle({ center = [0, 0], radius = 1.5 }, %)
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -36,12 +36,12 @@ filletRadius = 2
|
||||
|
||||
mountingPlateSketch = startSketchOn("XY")
|
||||
|> startProfileAt([-width / 2, -length / 2], %)
|
||||
|> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)
|
||||
|> line(endAbsolute = [width / 2, length / 2], tag = $edge2)
|
||||
|> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)
|
||||
|> close(tag = $edge4)
|
||||
|> lineTo([width / 2, -length / 2], %, $edge1)
|
||||
|> lineTo([width / 2, length / 2], %, $edge2)
|
||||
|> lineTo([-width / 2, length / 2], %, $edge3)
|
||||
|> close(%, $edge4)
|
||||
|
||||
mountingPlate = extrude(mountingPlateSketch, length = thickness)
|
||||
mountingPlate = extrude(thickness, mountingPlateSketch)
|
||||
|> fillet({
|
||||
radius = filletRadius,
|
||||
tags = [
|
||||
@ -63,12 +63,12 @@ filletRadius = 1
|
||||
|
||||
mountingPlateSketch = startSketchOn("XY")
|
||||
|> startProfileAt([-width / 2, -length / 2], %)
|
||||
|> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)
|
||||
|> line(endAbsolute = [width / 2, length / 2], tag = $edge2)
|
||||
|> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)
|
||||
|> close(tag = $edge4)
|
||||
|> lineTo([width / 2, -length / 2], %, $edge1)
|
||||
|> lineTo([width / 2, length / 2], %, $edge2)
|
||||
|> lineTo([-width / 2, length / 2], %, $edge3)
|
||||
|> close(%, $edge4)
|
||||
|
||||
mountingPlate = extrude(mountingPlateSketch, length = thickness)
|
||||
mountingPlate = extrude(thickness, mountingPlateSketch)
|
||||
|> fillet({
|
||||
radius = filletRadius,
|
||||
tolerance = 0.000001,
|
||||
|
File diff suppressed because one or more lines are too long
@ -29,14 +29,14 @@ getNextAdjacentEdge(tag: TagIdentifier) -> Uuid
|
||||
```js
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [10, 0])
|
||||
|> line([10, 0], %)
|
||||
|> angledLine({ angle = 60, length = 10 }, %)
|
||||
|> angledLine({ angle = 120, length = 10 }, %)
|
||||
|> line(end = [-10, 0])
|
||||
|> line([-10, 0], %)
|
||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
||||
|> close()
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 5)
|
||||
example = extrude(5, exampleSketch)
|
||||
|> fillet({
|
||||
radius = 3,
|
||||
tags = [getNextAdjacentEdge(referenceEdge)]
|
||||
|
@ -29,14 +29,14 @@ getOppositeEdge(tag: TagIdentifier) -> Uuid
|
||||
```js
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [10, 0])
|
||||
|> line([10, 0], %)
|
||||
|> angledLine({ angle = 60, length = 10 }, %)
|
||||
|> angledLine({ angle = 120, length = 10 }, %)
|
||||
|> line(end = [-10, 0])
|
||||
|> line([-10, 0], %)
|
||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
||||
|> close()
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 5)
|
||||
example = extrude(5, exampleSketch)
|
||||
|> fillet({
|
||||
radius = 3,
|
||||
tags = [getOppositeEdge(referenceEdge)]
|
||||
|
@ -29,14 +29,14 @@ getPreviousAdjacentEdge(tag: TagIdentifier) -> Uuid
|
||||
```js
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [10, 0])
|
||||
|> line([10, 0], %)
|
||||
|> angledLine({ angle = 60, length = 10 }, %)
|
||||
|> angledLine({ angle = 120, length = 10 }, %)
|
||||
|> line(end = [-10, 0])
|
||||
|> line([-10, 0], %)
|
||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
||||
|> close()
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 5)
|
||||
example = extrude(5, exampleSketch)
|
||||
|> fillet({
|
||||
radius = 3,
|
||||
tags = [getPreviousAdjacentEdge(referenceEdge)]
|
||||
|
@ -49,7 +49,7 @@ springSketch = startSketchOn('YZ')
|
||||
// Create a helix around an edge.
|
||||
helper001 = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0, 10], tag = $edge001)
|
||||
|> line([0, 10], %, $edge001)
|
||||
|
||||
helixPath = helix({
|
||||
angleStart = 0,
|
||||
|
@ -30,7 +30,7 @@ helixRevolutions(data: HelixRevolutionsData, solid: Solid) -> Solid
|
||||
```js
|
||||
part001 = startSketchOn('XY')
|
||||
|> circle({ center = [5, 5], radius = 10 }, %)
|
||||
|> extrude(length = 10)
|
||||
|> extrude(10, %)
|
||||
|> helixRevolutions({
|
||||
angleStart = 0,
|
||||
ccw = true,
|
||||
|
File diff suppressed because one or more lines are too long
@ -31,11 +31,11 @@ hollow(thickness: number, solid: Solid) -> Solid
|
||||
// Hollow a basic sketch.
|
||||
firstSketch = startSketchOn('XY')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0])
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|> hollow(0.25, %)
|
||||
```
|
||||
|
||||
@ -45,11 +45,11 @@ firstSketch = startSketchOn('XY')
|
||||
// Hollow a basic sketch.
|
||||
firstSketch = startSketchOn('-XZ')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0])
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|> hollow(0.5, %)
|
||||
```
|
||||
|
||||
@ -60,25 +60,25 @@ firstSketch = startSketchOn('-XZ')
|
||||
size = 100
|
||||
case = startSketchOn('-XZ')
|
||||
|> startProfileAt([-size, -size], %)
|
||||
|> line(end = [2 * size, 0])
|
||||
|> line(end = [0, 2 * size])
|
||||
|> line([2 * size, 0], %)
|
||||
|> line([0, 2 * size], %)
|
||||
|> tangentialArcTo([-size, size], %)
|
||||
|> close()
|
||||
|> extrude(length = 65)
|
||||
|> close(%)
|
||||
|> extrude(65, %)
|
||||
|
||||
thing1 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [-size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
thing2 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
hollow(0.5, case)
|
||||
```
|
||||
|
@ -4,16 +4,14 @@ excerpt: "Import a CAD file."
|
||||
layout: manual
|
||||
---
|
||||
|
||||
**WARNING:** This function is deprecated.
|
||||
|
||||
Import a CAD file.
|
||||
|
||||
**DEPRECATED** Prefer to use import statements.
|
||||
|
||||
For formats lacking unit data (such as STL, OBJ, or PLY files), the default unit of measurement is millimeters. Alternatively you may specify the unit by passing your desired measurement unit in the options parameter. When importing a GLTF file, the bin file will be imported as well. Import paths are relative to the current project directory.
|
||||
|
||||
Note: The import command currently only works when using the native Modeling App.
|
||||
|
||||
For importing KCL functions using the `import` statement, see the docs on [KCL modules](/docs/kcl/modules).
|
||||
|
||||
```js
|
||||
import(file_path: String, options?: ImportFormat) -> ImportedGeometry
|
||||
```
|
||||
|
@ -51,6 +51,7 @@ layout: manual
|
||||
* [`helixRevolutions`](kcl/helixRevolutions)
|
||||
* [`hole`](kcl/hole)
|
||||
* [`hollow`](kcl/hollow)
|
||||
* [`import`](kcl/import)
|
||||
* [`inch`](kcl/inch)
|
||||
* [`lastSegX`](kcl/lastSegX)
|
||||
* [`lastSegY`](kcl/lastSegY)
|
||||
@ -58,6 +59,7 @@ layout: manual
|
||||
* [`legAngY`](kcl/legAngY)
|
||||
* [`legLen`](kcl/legLen)
|
||||
* [`line`](kcl/line)
|
||||
* [`lineTo`](kcl/lineTo)
|
||||
* [`ln`](kcl/ln)
|
||||
* [`loft`](kcl/loft)
|
||||
* [`log`](kcl/log)
|
||||
|
@ -38,7 +38,7 @@ assertEqual(n, 3, 0.0001, "5/2 = 2.5, rounded up makes 3")
|
||||
// Draw n cylinders.
|
||||
startSketchOn('XZ')
|
||||
|> circle({ center = [0, 0], radius = 2 }, %)
|
||||
|> extrude(length = 5)
|
||||
|> extrude(5, %)
|
||||
|> patternTransform(n, fn(id) {
|
||||
return { translate = [4 * id, 0, 0] }
|
||||
}, %)
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -31,7 +31,7 @@ patternCircular3d(data: CircularPattern3dData, solid_set: SolidSet) -> [Solid]
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> circle({ center = [0, 0], radius = 1 }, %)
|
||||
|
||||
example = extrude(exampleSketch, length = -5)
|
||||
example = extrude(-5, exampleSketch)
|
||||
|> patternCircular3d({
|
||||
axis = [1, -1, 0],
|
||||
center = [10, -20, 0],
|
||||
|
File diff suppressed because one or more lines are too long
@ -30,12 +30,12 @@ patternLinear3d(data: LinearPattern3dData, solid_set: SolidSet) -> [Solid]
|
||||
```js
|
||||
exampleSketch = startSketchOn('XZ')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [0, 2])
|
||||
|> line(end = [3, 1])
|
||||
|> line(end = [0, -4])
|
||||
|> close()
|
||||
|> line([0, 2], %)
|
||||
|> line([3, 1], %)
|
||||
|> line([0, -4], %)
|
||||
|> close(%)
|
||||
|
||||
example = extrude(exampleSketch, length = 1)
|
||||
example = extrude(1, exampleSketch)
|
||||
|> patternLinear3d({
|
||||
axis = [1, 0, 1],
|
||||
instances = 7,
|
||||
|
@ -63,7 +63,7 @@ fn transform(id) {
|
||||
// Sketch 4 cylinders.
|
||||
sketch001 = startSketchOn('XZ')
|
||||
|> circle({ center = [0, 0], radius = 2 }, %)
|
||||
|> extrude(length = 5)
|
||||
|> extrude(5, %)
|
||||
|> patternTransform(4, transform, %)
|
||||
```
|
||||
|
||||
@ -79,7 +79,7 @@ fn transform(id) {
|
||||
|
||||
sketch001 = startSketchOn('XZ')
|
||||
|> circle({ center = [0, 0], radius = 2 }, %)
|
||||
|> extrude(length = 5)
|
||||
|> extrude(5, %)
|
||||
|> patternTransform(4, transform, %)
|
||||
```
|
||||
|
||||
@ -97,12 +97,12 @@ fn cube(length, center) {
|
||||
|
||||
return startSketchOn('XY')
|
||||
|> startProfileAt(p0, %)
|
||||
|> line(endAbsolute = p1)
|
||||
|> line(endAbsolute = p2)
|
||||
|> line(endAbsolute = p3)
|
||||
|> line(endAbsolute = p0)
|
||||
|> close()
|
||||
|> extrude(length = length)
|
||||
|> lineTo(p1, %)
|
||||
|> lineTo(p2, %)
|
||||
|> lineTo(p3, %)
|
||||
|> lineTo(p0, %)
|
||||
|> close(%)
|
||||
|> extrude(length, %)
|
||||
}
|
||||
|
||||
width = 20
|
||||
@ -135,12 +135,12 @@ fn cube(length, center) {
|
||||
|
||||
return startSketchOn('XY')
|
||||
|> startProfileAt(p0, %)
|
||||
|> line(endAbsolute = p1)
|
||||
|> line(endAbsolute = p2)
|
||||
|> line(endAbsolute = p3)
|
||||
|> line(endAbsolute = p0)
|
||||
|> close()
|
||||
|> extrude(length = length)
|
||||
|> lineTo(p1, %)
|
||||
|> lineTo(p2, %)
|
||||
|> lineTo(p3, %)
|
||||
|> lineTo(p0, %)
|
||||
|> close(%)
|
||||
|> extrude(length, %)
|
||||
}
|
||||
|
||||
width = 20
|
||||
@ -179,7 +179,7 @@ fn layer() {
|
||||
return startSketchOn("XY")
|
||||
// or some other plane idk
|
||||
|> circle({ center = [0, 0], radius = 1 }, %, $tag1)
|
||||
|> extrude(length = h)
|
||||
|> extrude(h, %)
|
||||
}
|
||||
// The vase is 100 layers tall.
|
||||
// The 100 layers are replica of each other, with a slight transformation applied to each.
|
||||
@ -205,7 +205,7 @@ startSketchOn('XY')
|
||||
center = [0, 0],
|
||||
inscribed = false
|
||||
}, %)
|
||||
|> extrude(length = 4)
|
||||
|> extrude(4, %)
|
||||
|> patternTransform(3, transform, %)
|
||||
```
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -30,12 +30,12 @@ segEnd(tag: TagIdentifier) -> [number]
|
||||
w = 15
|
||||
cube = startSketchOn('XY')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [w, 0], tag = $line1)
|
||||
|> line(end = [0, w], tag = $line2)
|
||||
|> line(end = [-w, 0], tag = $line3)
|
||||
|> line(end = [0, -w], tag = $line4)
|
||||
|> close()
|
||||
|> extrude(length = 5)
|
||||
|> line([w, 0], %, $line1)
|
||||
|> line([0, w], %, $line2)
|
||||
|> line([-w, 0], %, $line3)
|
||||
|> line([0, -w], %, $line4)
|
||||
|> close(%)
|
||||
|> extrude(5, %)
|
||||
|
||||
fn cylinder(radius, tag) {
|
||||
return startSketchOn('XY')
|
||||
@ -44,7 +44,7 @@ fn cylinder(radius, tag) {
|
||||
radius = radius,
|
||||
center = segEnd(tag)
|
||||
}, %)
|
||||
|> extrude(length = radius)
|
||||
|> extrude(radius, %)
|
||||
}
|
||||
|
||||
cylinder(1, line1)
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -30,12 +30,12 @@ segStart(tag: TagIdentifier) -> [number]
|
||||
w = 15
|
||||
cube = startSketchOn('XY')
|
||||
|> startProfileAt([0, 0], %)
|
||||
|> line(end = [w, 0], tag = $line1)
|
||||
|> line(end = [0, w], tag = $line2)
|
||||
|> line(end = [-w, 0], tag = $line3)
|
||||
|> line(end = [0, -w], tag = $line4)
|
||||
|> close()
|
||||
|> extrude(length = 5)
|
||||
|> line([w, 0], %, $line1)
|
||||
|> line([0, w], %, $line2)
|
||||
|> line([-w, 0], %, $line3)
|
||||
|> line([0, -w], %, $line4)
|
||||
|> close(%)
|
||||
|> extrude(5, %)
|
||||
|
||||
fn cylinder(radius, tag) {
|
||||
return startSketchOn('XY')
|
||||
@ -44,7 +44,7 @@ fn cylinder(radius, tag) {
|
||||
radius = radius,
|
||||
center = segStart(tag)
|
||||
}, %)
|
||||
|> extrude(length = radius)
|
||||
|> extrude(radius, %)
|
||||
}
|
||||
|
||||
cylinder(1, line1)
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -31,11 +31,11 @@ shell(data: ShellData, solid_set: SolidSet) -> SolidSet
|
||||
// Remove the end face for the extrusion.
|
||||
firstSketch = startSketchOn('XY')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0])
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|
||||
// Remove the end face for the extrusion.
|
||||
shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
||||
@ -47,11 +47,11 @@ shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
||||
// Remove the start face for the extrusion.
|
||||
firstSketch = startSketchOn('-XZ')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0])
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|
||||
// Remove the start face for the extrusion.
|
||||
shell({ faces = ['start'], thickness = 0.25 }, firstSketch)
|
||||
@ -63,11 +63,11 @@ shell({ faces = ['start'], thickness = 0.25 }, firstSketch)
|
||||
// Remove a tagged face and the end face for the extrusion.
|
||||
firstSketch = startSketchOn('XY')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0], tag = $myTag)
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %, $myTag)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|
||||
// Remove a tagged face for the extrusion.
|
||||
shell({ faces = [myTag], thickness = 0.25 }, firstSketch)
|
||||
@ -79,11 +79,11 @@ shell({ faces = [myTag], thickness = 0.25 }, firstSketch)
|
||||
// Remove multiple faces at once.
|
||||
firstSketch = startSketchOn('XY')
|
||||
|> startProfileAt([-12, 12], %)
|
||||
|> line(end = [24, 0])
|
||||
|> line(end = [0, -24])
|
||||
|> line(end = [-24, 0], tag = $myTag)
|
||||
|> close()
|
||||
|> extrude(length = 6)
|
||||
|> line([24, 0], %)
|
||||
|> line([0, -24], %)
|
||||
|> line([-24, 0], %, $myTag)
|
||||
|> close(%)
|
||||
|> extrude(6, %)
|
||||
|
||||
// Remove a tagged face and the end face for the extrusion.
|
||||
shell({
|
||||
@ -99,25 +99,25 @@ shell({
|
||||
size = 100
|
||||
case = startSketchOn('-XZ')
|
||||
|> startProfileAt([-size, -size], %)
|
||||
|> line(end = [2 * size, 0])
|
||||
|> line(end = [0, 2 * size])
|
||||
|> line([2 * size, 0], %)
|
||||
|> line([0, 2 * size], %)
|
||||
|> tangentialArcTo([-size, size], %)
|
||||
|> close()
|
||||
|> extrude(length = 65)
|
||||
|> close(%)
|
||||
|> extrude(65, %)
|
||||
|
||||
thing1 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [-size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
thing2 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
// We put "case" in the shell function to shell the entire object.
|
||||
shell({ faces = ['start'], thickness = 5 }, case)
|
||||
@ -130,25 +130,25 @@ shell({ faces = ['start'], thickness = 5 }, case)
|
||||
size = 100
|
||||
case = startSketchOn('XY')
|
||||
|> startProfileAt([-size, -size], %)
|
||||
|> line(end = [2 * size, 0])
|
||||
|> line(end = [0, 2 * size])
|
||||
|> line([2 * size, 0], %)
|
||||
|> line([0, 2 * size], %)
|
||||
|> tangentialArcTo([-size, size], %)
|
||||
|> close()
|
||||
|> extrude(length = 65)
|
||||
|> close(%)
|
||||
|> extrude(65, %)
|
||||
|
||||
thing1 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [-size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
thing2 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
// We put "thing1" in the shell function to shell the end face of the object.
|
||||
shell({ faces = ['end'], thickness = 5 }, thing1)
|
||||
@ -164,25 +164,25 @@ shell({ faces = ['end'], thickness = 5 }, thing1)
|
||||
size = 100
|
||||
case = startSketchOn('XY')
|
||||
|> startProfileAt([-size, -size], %)
|
||||
|> line(end = [2 * size, 0])
|
||||
|> line(end = [0, 2 * size])
|
||||
|> line([2 * size, 0], %)
|
||||
|> line([0, 2 * size], %)
|
||||
|> tangentialArcTo([-size, size], %)
|
||||
|> close()
|
||||
|> extrude(length = 65)
|
||||
|> close(%)
|
||||
|> extrude(65, %)
|
||||
|
||||
thing1 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [-size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
thing2 = startSketchOn(case, 'end')
|
||||
|> circle({
|
||||
center = [size / 2, -size / 2],
|
||||
radius = 25
|
||||
}, %)
|
||||
|> extrude(length = 50)
|
||||
|> extrude(50, %)
|
||||
|
||||
// We put "thing1" and "thing2" in the shell function to shell the end face of the object.
|
||||
shell({ faces = ['end'], thickness = 5 }, [thing1, thing2])
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
9324
docs/kcl/std.json
9324
docs/kcl/std.json
File diff suppressed because it is too large
Load Diff
@ -34,11 +34,11 @@ sweep(data: SweepData, sketch: Sketch) -> Solid
|
||||
// Create a path for the sweep.
|
||||
sweepPath = startSketchOn('XZ')
|
||||
|> startProfileAt([0.05, 0.05], %)
|
||||
|> line(end = [0, 7])
|
||||
|> line([0, 7], %)
|
||||
|> tangentialArc({ offset = 90, radius = 5 }, %)
|
||||
|> line(end = [-3, 0])
|
||||
|> line([-3, 0], %)
|
||||
|> tangentialArc({ offset = -90, radius = 5 }, %)
|
||||
|> line(end = [0, 7])
|
||||
|> line([0, 7], %)
|
||||
|
||||
// Create a hole for the pipe.
|
||||
pipeHole = startSketchOn('XY')
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user