Compare commits
192 Commits
Author | SHA1 | Date | |
---|---|---|---|
138728a95d | |||
9a92e7d642 | |||
efedc8de58 | |||
f7ee248a26 | |||
336f4f27ba | |||
e1f128d64a | |||
f858a611f1 | |||
6ce270c0d0 | |||
30ac0e4f48 | |||
8f90c352fe | |||
bc6f0fceca | |||
5c830a4ed4 | |||
8a9d50226f | |||
8397405998 | |||
f5b8298735 | |||
25ad603502 | |||
86349375d0 | |||
56d861f2cc | |||
3e8ee3ffc4 | |||
a44516bc7e | |||
ce62fe67cf | |||
763a1b6628 | |||
3281e62e6b | |||
f1a458f124 | |||
229433126d | |||
b962b5fcb3 | |||
428d125139 | |||
cffeb52b4b | |||
e0ef10e7bb | |||
7095ce2377 | |||
5b207d7d1a | |||
2fac213c58 | |||
2f72a8ef14 | |||
27ce9f8aa4 | |||
b0426e3f94 | |||
d707c66e53 | |||
f8f44743fa | |||
f262eda12a | |||
9e1136195a | |||
4ff07ddaee | |||
1e565379a7 | |||
76e34ac4da | |||
4cd427bf91 | |||
f321ecdff0 | |||
d114ab798c | |||
69fec37107 | |||
8ca8c49cc3 | |||
b25fc302fd | |||
648b37c1dd | |||
18e5da5ca4 | |||
46524cda10 | |||
4585671a5d | |||
e7203b9e7a | |||
ab375f4b92 | |||
04ed6f52ee | |||
2332338ca1 | |||
41b97de3d1 | |||
8ef31a0be1 | |||
3adb42b5f2 | |||
20016b101e | |||
8d9dbf36c3 | |||
440704ed9f | |||
2261217a5d | |||
10da986649 | |||
10789d9c3c | |||
67cc4f5835 | |||
2692f2b73a | |||
965cb18059 | |||
a022b8ef6c | |||
4d24bf7c94 | |||
9a537da183 | |||
df81b76b8b | |||
ac3f7ab712 | |||
dac91d3b79 | |||
0698432abf | |||
0592d3b5da | |||
31e4d60045 | |||
c0817b00e4 | |||
4ea1d16fb6 | |||
d049bf33e8 | |||
7b11047d07 | |||
412e9568f2 | |||
9be208e5e1 | |||
842ef5ede9 | |||
3f855d7bad | |||
0a1a6e50cf | |||
d4e955289c | |||
c147a219f4 | |||
38513a1e25 | |||
c0c5c790ca | |||
8b60f75220 | |||
f91ad4331f | |||
59103a2118 | |||
9737c2550a | |||
bf9d01a8dd | |||
702e322f90 | |||
e82830754d | |||
7806377a5a | |||
859afa2fd8 | |||
0a5f3093fc | |||
b65f7939f6 | |||
c35dea5e07 | |||
fc66d4745f | |||
b313d26c2a | |||
00b94ead62 | |||
0531ea1ce9 | |||
5f9a4887c1 | |||
da7dfa16d8 | |||
363ae10658 | |||
ac4a6c84cf | |||
c6fad2e2dc | |||
013cb10961 | |||
6261083cb1 | |||
2b0ba37ed0 | |||
96174f3cf6 | |||
aed62ff912 | |||
9334d64608 | |||
4fa7d2d8c8 | |||
3e615dfdbc | |||
c9860af29f | |||
23a42f0195 | |||
a77fa639f3 | |||
0a5ad7c95b | |||
4a654523d2 | |||
73a7e2bfd6 | |||
eb0850fea9 | |||
029f76f273 | |||
28b5f7080c | |||
5b1dcfecd6 | |||
f89d191425 | |||
2f4e4b62a8 | |||
5ebd5c8dbb | |||
a9ceaf2678 | |||
c8afd3399b | |||
5dda4828c6 | |||
72acab752c | |||
81df38ad1c | |||
0576a2bef1 | |||
4b2f6b4647 | |||
69edaa4183 | |||
2eb7c382bf | |||
38913ecb98 | |||
debd06129f | |||
d38bd342a0 | |||
f026f10335 | |||
895d7ebc6d | |||
65edf17a44 | |||
0c2a0a8c07 | |||
97cef4d16c | |||
9358278f7b | |||
a174e084d4 | |||
df7246897a | |||
0c9f64dd7c | |||
d2b9d3a058 | |||
7e54f08778 | |||
d9c2dd376e | |||
275a2150e7 | |||
8b8feb8d68 | |||
e21ef3f122 | |||
66834931aa | |||
06c1bcaf2e | |||
fc7df7ecbe | |||
67cb7b33bb | |||
ea74b94fac | |||
529833c63f | |||
92da86391a | |||
e7cb390db4 | |||
8a66bbbdbd | |||
3c53babb50 | |||
474acb1c68 | |||
1c941112d7 | |||
6f1d718097 | |||
36957237c0 | |||
da9cae98aa | |||
9ae025dc56 | |||
579ab23d78 | |||
4bef33e745 | |||
ac7bd28c5a | |||
d478d81156 | |||
3d27f0191b | |||
30c2acd18a | |||
a83b4b2145 | |||
70b8541038 | |||
bb51646738 | |||
c02e31a530 | |||
1d06cc7845 | |||
e0c07eecfe | |||
c5d42500fa | |||
e6e47f77f0 | |||
662c2485ac | |||
9f891deebb | |||
d08a07a1f8 |
@ -1,3 +1,3 @@
|
|||||||
[codespell]
|
[codespell]
|
||||||
ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,absolutey,atleast,ue,afterall
|
ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,atleast,ue,afterall,ser
|
||||||
skip: **/target,node_modules,build,**/Cargo.lock,./docs/kcl/*.md,.yarn.lock,**/yarn.lock,./openapi/*.json,./src/lib/machine-api.d.ts
|
skip: **/target,node_modules,build,dist,./out,**/Cargo.lock,./docs/kcl/*.md,.yarn.lock,**/yarn.lock,./openapi/*.json,./packages/codemirror-lang-kcl/test/all.test.ts,tsconfig.tsbuildinfo
|
||||||
|
@ -2,8 +2,8 @@ NODE_ENV=development
|
|||||||
DEV=true
|
DEV=true
|
||||||
VITE_KC_API_WS_MODELING_URL=wss://api.dev.zoo.dev/ws/modeling/commands
|
VITE_KC_API_WS_MODELING_URL=wss://api.dev.zoo.dev/ws/modeling/commands
|
||||||
VITE_KC_API_BASE_URL=https://api.dev.zoo.dev
|
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_BASE_URL=https://dev.zoo.dev
|
||||||
|
VITE_KC_SITE_APP_URL=https://app.dev.zoo.dev
|
||||||
VITE_KC_SKIP_AUTH=false
|
VITE_KC_SKIP_AUTH=false
|
||||||
VITE_KC_CONNECTION_TIMEOUT_MS=5000
|
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!
|
# ONLY add your token in .env.development.local if you want to skip auth, otherwise this token takes precedence!
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
|
NODE_ENV=production
|
||||||
|
DEV=false
|
||||||
VITE_KC_API_WS_MODELING_URL=wss://api.zoo.dev/ws/modeling/commands
|
VITE_KC_API_WS_MODELING_URL=wss://api.zoo.dev/ws/modeling/commands
|
||||||
VITE_KC_API_BASE_URL=https://api.zoo.dev
|
VITE_KC_API_BASE_URL=https://api.zoo.dev
|
||||||
VITE_KC_SITE_BASE_URL=https://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_SKIP_AUTH=false
|
||||||
VITE_KC_CONNECTION_TIMEOUT_MS=15000
|
VITE_KC_CONNECTION_TIMEOUT_MS=15000
|
||||||
|
35
.eslintrc
35
.eslintrc
@ -5,16 +5,39 @@
|
|||||||
},
|
},
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"css-modules",
|
"css-modules",
|
||||||
|
"jest",
|
||||||
|
"jsx-a11y",
|
||||||
|
"react",
|
||||||
|
"react-hooks",
|
||||||
"suggest-no-throw",
|
"suggest-no-throw",
|
||||||
|
"testing-library",
|
||||||
|
"@typescript-eslint"
|
||||||
],
|
],
|
||||||
"extends": [
|
"extends": [
|
||||||
"react-app",
|
"plugin:css-modules/recommended",
|
||||||
"react-app/jest",
|
"plugin:jsx-a11y/recommended",
|
||||||
"plugin:css-modules/recommended"
|
"plugin:react-hooks/recommended"
|
||||||
],
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"@typescript-eslint/no-floating-promises": "error",
|
"@typescript-eslint/no-floating-promises": "error",
|
||||||
"@typescript-eslint/no-misused-promises": "error",
|
"@typescript-eslint/no-misused-promises": "error",
|
||||||
|
"jsx-a11y/click-events-have-key-events": "off",
|
||||||
|
"jsx-a11y/no-autofocus": "off",
|
||||||
|
"jsx-a11y/no-noninteractive-element-interactions": "off",
|
||||||
|
"no-restricted-globals": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"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": [
|
"semi": [
|
||||||
"error",
|
"error",
|
||||||
"never"
|
"never"
|
||||||
@ -25,6 +48,9 @@
|
|||||||
"overrides": [
|
"overrides": [
|
||||||
{
|
{
|
||||||
"files": ["e2e/**/*.ts"], // Update the pattern based on your file structure
|
"files": ["e2e/**/*.ts"], // Update the pattern based on your file structure
|
||||||
|
"extends": [
|
||||||
|
"plugin:testing-library/react"
|
||||||
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"suggest-no-throw/suggest-no-throw": "off",
|
"suggest-no-throw/suggest-no-throw": "off",
|
||||||
"testing-library/prefer-screen-queries": "off",
|
"testing-library/prefer-screen-queries": "off",
|
||||||
@ -33,6 +59,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"files": ["src/**/*.test.ts"],
|
"files": ["src/**/*.test.ts"],
|
||||||
|
"extends": [
|
||||||
|
"plugin:testing-library/react"
|
||||||
|
],
|
||||||
"rules": {
|
"rules": {
|
||||||
"suggest-no-throw/suggest-no-throw": "off",
|
"suggest-no-throw/suggest-no-throw": "off",
|
||||||
}
|
}
|
||||||
|
2
.github/ci-cd-scripts/playwright-electron.sh
vendored
2
.github/ci-cd-scripts/playwright-electron.sh
vendored
@ -21,7 +21,7 @@ if [[ ! -f "test-results/.last-run.json" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
retry=1
|
retry=1
|
||||||
max_retrys=4
|
max_retrys=5
|
||||||
|
|
||||||
# retry failed tests, doing our own retries because using inbuilt playwright retries causes connection issues
|
# retry failed tests, doing our own retries because using inbuilt playwright retries causes connection issues
|
||||||
while [[ $retry -le $max_retrys ]]; do
|
while [[ $retry -le $max_retrys ]]; do
|
||||||
|
21
.github/dependabot.yml
vendored
21
.github/dependabot.yml
vendored
@ -6,23 +6,36 @@
|
|||||||
version: 2
|
version: 2
|
||||||
updates:
|
updates:
|
||||||
- package-ecosystem: 'npm' # See documentation for possible values
|
- package-ecosystem: 'npm' # See documentation for possible values
|
||||||
directory: '/' # Location of package manifests
|
directories:
|
||||||
|
- '/'
|
||||||
|
- '/packages/codemirror-lang-kcl/'
|
||||||
|
- '/packages/codemirror-lsp-client/'
|
||||||
schedule:
|
schedule:
|
||||||
interval: 'weekly'
|
interval: weekly
|
||||||
|
day: monday
|
||||||
reviewers:
|
reviewers:
|
||||||
- franknoirot
|
- franknoirot
|
||||||
- irev-dev
|
- irev-dev
|
||||||
- package-ecosystem: 'github-actions' # See documentation for possible values
|
- package-ecosystem: 'github-actions' # See documentation for possible values
|
||||||
directory: '/' # Location of package manifests
|
directory: '/' # Location of package manifests
|
||||||
schedule:
|
schedule:
|
||||||
interval: 'weekly'
|
interval: weekly
|
||||||
|
day: monday
|
||||||
reviewers:
|
reviewers:
|
||||||
- adamchalmers
|
- adamchalmers
|
||||||
- jessfraz
|
- jessfraz
|
||||||
- package-ecosystem: 'cargo' # See documentation for possible values
|
- package-ecosystem: 'cargo' # See documentation for possible values
|
||||||
directory: '/src/wasm-lib/' # Location of package manifests
|
directory: '/src/wasm-lib/' # Location of package manifests
|
||||||
schedule:
|
schedule:
|
||||||
interval: 'weekly'
|
interval: weekly
|
||||||
|
day: monday
|
||||||
reviewers:
|
reviewers:
|
||||||
- adamchalmers
|
- adamchalmers
|
||||||
- jessfraz
|
- jessfraz
|
||||||
|
groups:
|
||||||
|
serde-dependencies:
|
||||||
|
patterns:
|
||||||
|
- "serde*"
|
||||||
|
wasm-bindgen-deps:
|
||||||
|
patterns:
|
||||||
|
- "wasm-bindgen*"
|
||||||
|
2
.github/workflows/build-and-store-wasm.yml
vendored
2
.github/workflows/build-and-store-wasm.yml
vendored
@ -27,7 +27,7 @@ jobs:
|
|||||||
|
|
||||||
|
|
||||||
# Upload the WASM bundle as an artifact
|
# Upload the WASM bundle as an artifact
|
||||||
- uses: actions/upload-artifact@v3
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: wasm-bundle
|
name: wasm-bundle
|
||||||
path: src/wasm-lib/pkg
|
path: src/wasm-lib/pkg
|
||||||
|
36
.github/workflows/build-apps.yml
vendored
36
.github/workflows/build-apps.yml
vendored
@ -126,9 +126,13 @@ jobs:
|
|||||||
node-version-file: '.nvmrc'
|
node-version-file: '.nvmrc'
|
||||||
cache: 'yarn' # Set this to npm, yarn or pnpm.
|
cache: 'yarn' # Set this to npm, yarn or pnpm.
|
||||||
|
|
||||||
- run: yarn install
|
- name: yarn install
|
||||||
|
# Windows is picky sometimes and fails on fetch. Step takes about ~30s
|
||||||
- run: yarn tronb:vite
|
uses: nick-fields/retry@v3.0.0
|
||||||
|
with:
|
||||||
|
timeout_minutes: 2
|
||||||
|
max_attempts: 3
|
||||||
|
command: yarn install
|
||||||
|
|
||||||
- name: Prepare certificate and variables (Windows only)
|
- name: Prepare certificate and variables (Windows only)
|
||||||
if: ${{ (env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true') && matrix.os == 'windows-2022' }}
|
if: ${{ (env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true') && matrix.os == 'windows-2022' }}
|
||||||
@ -159,8 +163,8 @@ jobs:
|
|||||||
- name: Build the app (debug)
|
- name: Build the app (debug)
|
||||||
if: ${{ env.IS_RELEASE == 'false' && env.IS_NIGHTLY == 'false' }}
|
if: ${{ env.IS_RELEASE == 'false' && env.IS_NIGHTLY == 'false' }}
|
||||||
# electron-builder doesn't have a concept of release vs debug,
|
# electron-builder doesn't have a concept of release vs debug,
|
||||||
# this is just not doing any codesign or release yml generation
|
# this is just not doing any codesign or release yml generation, and points to dev infra
|
||||||
run: yarn electron-builder --config
|
run: yarn tronb:package:dev
|
||||||
|
|
||||||
- name: Build the app (release)
|
- name: Build the app (release)
|
||||||
if: ${{ env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true' }}
|
if: ${{ env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true' }}
|
||||||
@ -173,7 +177,13 @@ jobs:
|
|||||||
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||||
CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
||||||
WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }}
|
WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }}
|
||||||
run: yarn electron-builder --config --publish always
|
DEBUG: "electron-notarize*"
|
||||||
|
# TODO: Fix electron-notarize flakes. The logs above should help gather more data on failures
|
||||||
|
uses: nick-fields/retry@v3.0.0
|
||||||
|
with:
|
||||||
|
timeout_minutes: 10
|
||||||
|
max_attempts: 3
|
||||||
|
command: yarn tronb:package:prod
|
||||||
|
|
||||||
- name: List artifacts in out/
|
- name: List artifacts in out/
|
||||||
run: ls -R out
|
run: ls -R out
|
||||||
@ -228,7 +238,13 @@ jobs:
|
|||||||
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||||
CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
||||||
WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }}
|
WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }}
|
||||||
run: yarn electron-builder --config --publish always
|
DEBUG: "electron-notarize*"
|
||||||
|
# TODO: Fix electron-notarize flakes. The logs above should help gather more data on failures
|
||||||
|
uses: nick-fields/retry@v3.0.0
|
||||||
|
with:
|
||||||
|
timeout_minutes: 10
|
||||||
|
max_attempts: 3
|
||||||
|
command: yarn tronb:package:prod
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
if: ${{ env.IS_RELEASE == 'true' }}
|
if: ${{ env.IS_RELEASE == 'true' }}
|
||||||
@ -372,19 +388,19 @@ jobs:
|
|||||||
|
|
||||||
- name: Authenticate to Google Cloud
|
- name: Authenticate to Google Cloud
|
||||||
if: ${{ env.IS_NIGHTLY == 'true' }}
|
if: ${{ env.IS_NIGHTLY == 'true' }}
|
||||||
uses: 'google-github-actions/auth@v2.1.7'
|
uses: 'google-github-actions/auth@v2.1.8'
|
||||||
with:
|
with:
|
||||||
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
|
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
|
||||||
|
|
||||||
- name: Set up Google Cloud SDK
|
- name: Set up Google Cloud SDK
|
||||||
if: ${{ env.IS_NIGHTLY == 'true' }}
|
if: ${{ env.IS_NIGHTLY == 'true' }}
|
||||||
uses: google-github-actions/setup-gcloud@v2.1.2
|
uses: google-github-actions/setup-gcloud@v2.1.4
|
||||||
with:
|
with:
|
||||||
project_id: ${{ env.GOOGLE_CLOUD_PROJECT_ID }}
|
project_id: ${{ env.GOOGLE_CLOUD_PROJECT_ID }}
|
||||||
|
|
||||||
- name: Upload nightly files to public bucket
|
- name: Upload nightly files to public bucket
|
||||||
if: ${{ env.IS_NIGHTLY == 'true' }}
|
if: ${{ env.IS_NIGHTLY == 'true' }}
|
||||||
uses: google-github-actions/upload-cloud-storage@v2.2.1
|
uses: google-github-actions/upload-cloud-storage@v2.2.2
|
||||||
with:
|
with:
|
||||||
path: out
|
path: out
|
||||||
glob: '*'
|
glob: '*'
|
||||||
|
44
.github/workflows/cargo-bench.yml
vendored
44
.github/workflows/cargo-bench.yml
vendored
@ -1,44 +0,0 @@
|
|||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- '**.rs'
|
|
||||||
- '**/Cargo.toml'
|
|
||||||
- '**/Cargo.lock'
|
|
||||||
- '**/rust-toolchain.toml'
|
|
||||||
- .github/workflows/cargo-bench.yml
|
|
||||||
pull_request:
|
|
||||||
paths:
|
|
||||||
- '**.rs'
|
|
||||||
- '**/Cargo.toml'
|
|
||||||
- '**/Cargo.lock'
|
|
||||||
- '**/rust-toolchain.toml'
|
|
||||||
- .github/workflows/cargo-bench.yml
|
|
||||||
workflow_dispatch:
|
|
||||||
permissions: read-all
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
name: cargo bench
|
|
||||||
jobs:
|
|
||||||
cargo-bench:
|
|
||||||
name: Benchmark with iai
|
|
||||||
runs-on: ubuntu-latest-8-cores
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
- uses: dtolnay/rust-toolchain@stable
|
|
||||||
- name: Install dependencies
|
|
||||||
run: |
|
|
||||||
cargo install cargo-criterion
|
|
||||||
sudo apt update
|
|
||||||
sudo apt install -y valgrind
|
|
||||||
- name: Rust Cache
|
|
||||||
uses: Swatinem/rust-cache@v2.6.1
|
|
||||||
- name: Benchmark kcl library
|
|
||||||
shell: bash
|
|
||||||
run: |-
|
|
||||||
cd src/wasm-lib/kcl; cargo bench --all-features -- iai
|
|
||||||
env:
|
|
||||||
KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}}
|
|
||||||
|
|
32
.github/workflows/codemirror-lang-kcl.yml
vendored
Normal file
32
.github/workflows/codemirror-lang-kcl.yml
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
name: CodeMirror Lang KCL
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
yarn-unit-test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version-file: '.nvmrc'
|
||||||
|
cache: 'yarn'
|
||||||
|
|
||||||
|
- run: yarn install
|
||||||
|
working-directory: packages/codemirror-lang-kcl
|
||||||
|
|
||||||
|
- run: yarn tsc
|
||||||
|
working-directory: packages/codemirror-lang-kcl
|
||||||
|
|
||||||
|
- name: run unit tests
|
||||||
|
run: yarn test
|
||||||
|
working-directory: packages/codemirror-lang-kcl
|
20
.github/workflows/e2e-tests.yml
vendored
20
.github/workflows/e2e-tests.yml
vendored
@ -18,7 +18,6 @@ permissions:
|
|||||||
jobs:
|
jobs:
|
||||||
|
|
||||||
check-rust-changes:
|
check-rust-changes:
|
||||||
if: github.event.pull_request.draft == false
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
outputs:
|
outputs:
|
||||||
rust-changed: ${{ steps.filter.outputs.rust }}
|
rust-changed: ${{ steps.filter.outputs.rust }}
|
||||||
@ -35,7 +34,6 @@ jobs:
|
|||||||
- 'src/wasm-lib/**'
|
- 'src/wasm-lib/**'
|
||||||
|
|
||||||
electron:
|
electron:
|
||||||
if: github.event.pull_request.draft == false
|
|
||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
name: playwright:electron:${{ matrix.os }} ${{ matrix.shardIndex }} ${{ matrix.shardTotal }}
|
name: playwright:electron:${{ matrix.os }} ${{ matrix.shardIndex }} ${{ matrix.shardTotal }}
|
||||||
strategy:
|
strategy:
|
||||||
@ -48,7 +46,15 @@ jobs:
|
|||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
needs: check-rust-changes
|
needs: check-rust-changes
|
||||||
steps:
|
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
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
token: ${{ steps.app-token.outputs.token }}
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version-file: '.nvmrc'
|
node-version-file: '.nvmrc'
|
||||||
@ -125,13 +131,16 @@ jobs:
|
|||||||
if: steps.download-wasm.outcome == 'failure'
|
if: steps.download-wasm.outcome == 'failure'
|
||||||
shell: bash
|
shell: bash
|
||||||
run: yarn build:wasm
|
run: yarn build:wasm
|
||||||
- name: build electron
|
- name: build web
|
||||||
shell: bash
|
shell: bash
|
||||||
run: yarn tron:package
|
run: yarn tronb:vite:dev
|
||||||
- name: Run ubuntu/chrome snapshots
|
- name: Run ubuntu/chrome snapshots
|
||||||
|
if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 }}
|
||||||
shell: bash
|
shell: bash
|
||||||
|
# TODO: break this in its own job, for now it's not slowing down the overall execution as ubuntu is the quickest,
|
||||||
|
# but we could do better. This forces a large 1/1 shard of all 20 snapshot tests that runs in about 3 minutes.
|
||||||
run: |
|
run: |
|
||||||
PLATFORM=web yarn playwright test --config=playwright.config.ts --retries="3" --update-snapshots --grep=@snapshot --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }}
|
PLATFORM=web yarn playwright test --config=playwright.config.ts --retries="3" --update-snapshots --grep=@snapshot --shard=1/1
|
||||||
env:
|
env:
|
||||||
CI: true
|
CI: true
|
||||||
NODE_ENV: development
|
NODE_ENV: development
|
||||||
@ -152,6 +161,7 @@ jobs:
|
|||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
run: rm -r test-results
|
run: rm -r test-results
|
||||||
- name: check for changes
|
- name: check for changes
|
||||||
|
if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 }}
|
||||||
shell: bash
|
shell: bash
|
||||||
id: git-check
|
id: git-check
|
||||||
run: |
|
run: |
|
||||||
|
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
|
run: yarn files:set-notes
|
||||||
|
|
||||||
- name: Authenticate to Google Cloud
|
- name: Authenticate to Google Cloud
|
||||||
uses: 'google-github-actions/auth@v2.1.7'
|
uses: 'google-github-actions/auth@v2.1.8'
|
||||||
with:
|
with:
|
||||||
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
|
credentials_json: '${{ secrets.GOOGLE_CLOUD_DL_SA }}'
|
||||||
|
|
||||||
- name: Set up Google Cloud SDK
|
- name: Set up Google Cloud SDK
|
||||||
uses: google-github-actions/setup-gcloud@v2.1.2
|
uses: google-github-actions/setup-gcloud@v2.1.4
|
||||||
with:
|
with:
|
||||||
project_id: ${{ env.GOOGLE_CLOUD_PROJECT_ID }}
|
project_id: ${{ env.GOOGLE_CLOUD_PROJECT_ID }}
|
||||||
|
|
||||||
- name: Upload release files to public bucket
|
- name: Upload release files to public bucket
|
||||||
uses: google-github-actions/upload-cloud-storage@v2.2.1
|
uses: google-github-actions/upload-cloud-storage@v2.2.2
|
||||||
with:
|
with:
|
||||||
path: out
|
path: out
|
||||||
glob: '*'
|
glob: '*'
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -25,6 +25,7 @@ yarn-error.log*
|
|||||||
|
|
||||||
.idea
|
.idea
|
||||||
.vscode
|
.vscode
|
||||||
|
.helix
|
||||||
src/wasm-lib/.idea
|
src/wasm-lib/.idea
|
||||||
src/wasm-lib/.vscode
|
src/wasm-lib/.vscode
|
||||||
|
|
||||||
@ -44,7 +45,7 @@ e2e/playwright/temp3.png
|
|||||||
e2e/playwright/export-snapshots/*
|
e2e/playwright/export-snapshots/*
|
||||||
!e2e/playwright/export-snapshots/*.png
|
!e2e/playwright/export-snapshots/*.png
|
||||||
|
|
||||||
|
/kcl-samples
|
||||||
/test-results/
|
/test-results/
|
||||||
/playwright-report/
|
/playwright-report/
|
||||||
/blob-report/
|
/blob-report/
|
||||||
|
2
.helix/config.toml
Normal file
2
.helix/config.toml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[editor]
|
||||||
|
auto-format = true
|
10
.helix/languages.toml
Normal file
10
.helix/languages.toml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[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" ]
|
||||||
|
|
42
README.md
42
README.md
@ -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).
|
Devtools can be opened with the usual Cmd-Opt-I (Mac) or Ctrl-Shift-I (Linux and Windows).
|
||||||
|
|
||||||
To build, run `yarn tron:package`.
|
To build with electron-builder, run `yarn tronb:package:dev` (or `yarn tronb:package:prod` to point to the .env.production variables)
|
||||||
|
|
||||||
## Checking out commits / Bisecting
|
## Checking out commits / Bisecting
|
||||||
|
|
||||||
@ -337,13 +337,47 @@ For individual testing:
|
|||||||
yarn test abstractSyntaxTree -t "unexpected closed curly brace" --silent=false
|
yarn test abstractSyntaxTree -t "unexpected closed curly brace" --silent=false
|
||||||
```
|
```
|
||||||
|
|
||||||
Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testing Library E2E](https://testing-library.com/docs/react-testing-library/intro/) tests, in interactive mode by default.
|
Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testing Library E2E](https://testing-library.com/docs/react-testing-library/intro) tests, in interactive mode by default.
|
||||||
|
|
||||||
### Rust tests
|
### Rust tests
|
||||||
|
|
||||||
```bash
|
**Dependencies**
|
||||||
|
|
||||||
|
- `KITTYCAD_API_TOKEN`
|
||||||
|
- `cargo-nextest`
|
||||||
|
- `just`
|
||||||
|
|
||||||
|
#### Setting KITTYCAD_API_TOKEN
|
||||||
|
Use the production zoo.dev token, set this environment variable before running the tests
|
||||||
|
|
||||||
|
#### Installing cargonextest
|
||||||
|
|
||||||
|
```
|
||||||
cd src/wasm-lib
|
cd src/wasm-lib
|
||||||
KITTYCAD_API_TOKEN=XXX cargo test -- --test-threads=1
|
cargo search cargo-nextest
|
||||||
|
cargo install cargo-nextest
|
||||||
|
```
|
||||||
|
|
||||||
|
#### just
|
||||||
|
install [`just`](https://github.com/casey/just?tab=readme-ov-file#pre-built-binaries)
|
||||||
|
|
||||||
|
#### Running the tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# With just
|
||||||
|
# Make sure KITTYCAD_API_TOKEN=<prod zoo.dev token> is set
|
||||||
|
# Make sure you installed cargo-nextest
|
||||||
|
# Make sure you installed just
|
||||||
|
cd src/wasm-lib
|
||||||
|
just test
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Without just
|
||||||
|
# Make sure KITTYCAD_API_TOKEN=<prod zoo.dev token> is set
|
||||||
|
# Make sure you installed cargo-nextest
|
||||||
|
cd src/wasm-lib
|
||||||
|
export RUST_BRACKTRACE="full" && cargo nextest run --workspace --test-threads=1
|
||||||
```
|
```
|
||||||
|
|
||||||
Where `XXX` is an API token from the production engine (NOT the dev environment).
|
Where `XXX` is an API token from the production engine (NOT the dev environment).
|
||||||
|
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.
|
// Add color to an extruded solid.
|
||||||
exampleSketch = startSketchOn("XZ")
|
exampleSketch = startSketchOn("XZ")
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> lineTo([10, 0], %)
|
|> line(endAbsolute = [10, 0])
|
||||||
|> lineTo([0, 10], %)
|
|> line(endAbsolute = [0, 10])
|
||||||
|> lineTo([-10, 0], %)
|
|> line(endAbsolute = [-10, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(5, exampleSketch)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|> appearance({
|
|> appearance({
|
||||||
color = '#ff0000',
|
color = '#ff0000',
|
||||||
metalness = 50,
|
metalness = 50,
|
||||||
@ -65,11 +65,11 @@ sketch001 = startSketchOn('XY')
|
|||||||
fn cube(center) {
|
fn cube(center) {
|
||||||
return startSketchOn('XY')
|
return startSketchOn('XY')
|
||||||
|> startProfileAt([center[0] - 10, center[1] - 10], %)
|
|> startProfileAt([center[0] - 10, center[1] - 10], %)
|
||||||
|> lineTo([center[0] + 10, center[1] - 10], %)
|
|> line(endAbsolute = [center[0] + 10, center[1] - 10])
|
||||||
|> lineTo([center[0] + 10, center[1] + 10], %)
|
|> line(endAbsolute = [center[0] + 10, center[1] + 10])
|
||||||
|> lineTo([center[0] - 10, center[1] + 10], %)
|
|> line(endAbsolute = [center[0] - 10, center[1] + 10])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(10, %)
|
|> extrude(length = 10)
|
||||||
}
|
}
|
||||||
|
|
||||||
example0 = cube([0, 0])
|
example0 = cube([0, 0])
|
||||||
@ -95,11 +95,11 @@ appearance({
|
|||||||
// This example shows setting the appearance _after_ the shell.
|
// This example shows setting the appearance _after_ the shell.
|
||||||
firstSketch = startSketchOn('XY')
|
firstSketch = startSketchOn('XY')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %)
|
|> line(end = [-24, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|
|
||||||
shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
||||||
|> appearance({
|
|> appearance({
|
||||||
@ -116,11 +116,11 @@ shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
|||||||
// This example shows setting the appearance _before_ the shell.
|
// This example shows setting the appearance _before_ the shell.
|
||||||
firstSketch = startSketchOn('XY')
|
firstSketch = startSketchOn('XY')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %)
|
|> line(end = [-24, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|> appearance({
|
|> appearance({
|
||||||
color = '#ff0000',
|
color = '#ff0000',
|
||||||
metalness = 90,
|
metalness = 90,
|
||||||
@ -137,12 +137,12 @@ shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
|||||||
// This example shows _before_ the pattern.
|
// This example shows _before_ the pattern.
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([0, 2], %)
|
|> line(end = [0, 2])
|
||||||
|> line([3, 1], %)
|
|> line(end = [3, 1])
|
||||||
|> line([0, -4], %)
|
|> line(end = [0, -4])
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(1, exampleSketch)
|
example = extrude(exampleSketch, length = 1)
|
||||||
|> appearance({
|
|> appearance({
|
||||||
color = '#ff0000',
|
color = '#ff0000',
|
||||||
metalness = 90,
|
metalness = 90,
|
||||||
@ -162,12 +162,12 @@ example = extrude(1, exampleSketch)
|
|||||||
// This example shows _after_ the pattern.
|
// This example shows _after_ the pattern.
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([0, 2], %)
|
|> line(end = [0, 2])
|
||||||
|> line([3, 1], %)
|
|> line(end = [3, 1])
|
||||||
|> line([0, -4], %)
|
|> line(end = [0, -4])
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(1, exampleSketch)
|
example = extrude(exampleSketch, length = 1)
|
||||||
|> patternLinear3d({
|
|> patternLinear3d({
|
||||||
axis = [1, 0, 1],
|
axis = [1, 0, 1],
|
||||||
instances = 7,
|
instances = 7,
|
||||||
@ -186,10 +186,10 @@ example = extrude(1, exampleSketch)
|
|||||||
// Color the result of a 2D pattern that was extruded.
|
// Color the result of a 2D pattern that was extruded.
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([.5, 25], %)
|
|> startProfileAt([.5, 25], %)
|
||||||
|> line([0, 5], %)
|
|> line(end = [0, 5])
|
||||||
|> line([-1, 0], %)
|
|> line(end = [-1, 0])
|
||||||
|> line([0, -5], %)
|
|> line(end = [0, -5])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> patternCircular2d({
|
|> patternCircular2d({
|
||||||
center = [0, 0],
|
center = [0, 0],
|
||||||
instances = 13,
|
instances = 13,
|
||||||
@ -197,7 +197,7 @@ exampleSketch = startSketchOn('XZ')
|
|||||||
rotateDuplicates = true
|
rotateDuplicates = true
|
||||||
}, %)
|
}, %)
|
||||||
|
|
||||||
example = extrude(1, exampleSketch)
|
example = extrude(exampleSketch, length = 1)
|
||||||
|> appearance({
|
|> appearance({
|
||||||
color = '#ff0000',
|
color = '#ff0000',
|
||||||
metalness = 90,
|
metalness = 90,
|
||||||
@ -214,11 +214,11 @@ example = extrude(1, exampleSketch)
|
|||||||
// Create a path for the sweep.
|
// Create a path for the sweep.
|
||||||
sweepPath = startSketchOn('XZ')
|
sweepPath = startSketchOn('XZ')
|
||||||
|> startProfileAt([0.05, 0.05], %)
|
|> startProfileAt([0.05, 0.05], %)
|
||||||
|> line([0, 7], %)
|
|> line(end = [0, 7])
|
||||||
|> tangentialArc({ offset = 90, radius = 5 }, %)
|
|> tangentialArc({ offset = 90, radius = 5 }, %)
|
||||||
|> line([-3, 0], %)
|
|> line(end = [-3, 0])
|
||||||
|> tangentialArc({ offset = -90, radius = 5 }, %)
|
|> tangentialArc({ offset = -90, radius = 5 }, %)
|
||||||
|> line([0, 7], %)
|
|> line(end = [0, 7])
|
||||||
|
|
||||||
pipeHole = startSketchOn('XY')
|
pipeHole = startSketchOn('XY')
|
||||||
|> circle({ center = [0, 0], radius = 1.5 }, %)
|
|> 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
41
docs/kcl/circleThreePoint.md
Normal file
41
docs/kcl/circleThreePoint.md
Normal file
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")
|
mountingPlateSketch = startSketchOn("XY")
|
||||||
|> startProfileAt([-width / 2, -length / 2], %)
|
|> startProfileAt([-width / 2, -length / 2], %)
|
||||||
|> lineTo([width / 2, -length / 2], %, $edge1)
|
|> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)
|
||||||
|> lineTo([width / 2, length / 2], %, $edge2)
|
|> line(endAbsolute = [width / 2, length / 2], tag = $edge2)
|
||||||
|> lineTo([-width / 2, length / 2], %, $edge3)
|
|> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)
|
||||||
|> close(%, $edge4)
|
|> close(tag = $edge4)
|
||||||
|
|
||||||
mountingPlate = extrude(thickness, mountingPlateSketch)
|
mountingPlate = extrude(mountingPlateSketch, length = thickness)
|
||||||
|> fillet({
|
|> fillet({
|
||||||
radius = filletRadius,
|
radius = filletRadius,
|
||||||
tags = [
|
tags = [
|
||||||
@ -63,12 +63,12 @@ filletRadius = 1
|
|||||||
|
|
||||||
mountingPlateSketch = startSketchOn("XY")
|
mountingPlateSketch = startSketchOn("XY")
|
||||||
|> startProfileAt([-width / 2, -length / 2], %)
|
|> startProfileAt([-width / 2, -length / 2], %)
|
||||||
|> lineTo([width / 2, -length / 2], %, $edge1)
|
|> line(endAbsolute = [width / 2, -length / 2], tag = $edge1)
|
||||||
|> lineTo([width / 2, length / 2], %, $edge2)
|
|> line(endAbsolute = [width / 2, length / 2], tag = $edge2)
|
||||||
|> lineTo([-width / 2, length / 2], %, $edge3)
|
|> line(endAbsolute = [-width / 2, length / 2], tag = $edge3)
|
||||||
|> close(%, $edge4)
|
|> close(tag = $edge4)
|
||||||
|
|
||||||
mountingPlate = extrude(thickness, mountingPlateSketch)
|
mountingPlate = extrude(mountingPlateSketch, length = thickness)
|
||||||
|> fillet({
|
|> fillet({
|
||||||
radius = filletRadius,
|
radius = filletRadius,
|
||||||
tolerance = 0.000001,
|
tolerance = 0.000001,
|
||||||
|
File diff suppressed because one or more lines are too long
@ -29,14 +29,14 @@ getNextAdjacentEdge(tag: TagIdentifier) -> Uuid
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([10, 0], %)
|
|> line(end = [10, 0])
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine({ angle = 60, length = 10 }, %)
|
||||||
|> angledLine({ angle = 120, length = 10 }, %)
|
|> angledLine({ angle = 120, length = 10 }, %)
|
||||||
|> line([-10, 0], %)
|
|> line(end = [-10, 0])
|
||||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(5, exampleSketch)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|> fillet({
|
|> fillet({
|
||||||
radius = 3,
|
radius = 3,
|
||||||
tags = [getNextAdjacentEdge(referenceEdge)]
|
tags = [getNextAdjacentEdge(referenceEdge)]
|
||||||
|
@ -29,14 +29,14 @@ getOppositeEdge(tag: TagIdentifier) -> Uuid
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([10, 0], %)
|
|> line(end = [10, 0])
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine({ angle = 60, length = 10 }, %)
|
||||||
|> angledLine({ angle = 120, length = 10 }, %)
|
|> angledLine({ angle = 120, length = 10 }, %)
|
||||||
|> line([-10, 0], %)
|
|> line(end = [-10, 0])
|
||||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(5, exampleSketch)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|> fillet({
|
|> fillet({
|
||||||
radius = 3,
|
radius = 3,
|
||||||
tags = [getOppositeEdge(referenceEdge)]
|
tags = [getOppositeEdge(referenceEdge)]
|
||||||
|
@ -29,14 +29,14 @@ getPreviousAdjacentEdge(tag: TagIdentifier) -> Uuid
|
|||||||
```js
|
```js
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([10, 0], %)
|
|> line(end = [10, 0])
|
||||||
|> angledLine({ angle = 60, length = 10 }, %)
|
|> angledLine({ angle = 60, length = 10 }, %)
|
||||||
|> angledLine({ angle = 120, length = 10 }, %)
|
|> angledLine({ angle = 120, length = 10 }, %)
|
||||||
|> line([-10, 0], %)
|
|> line(end = [-10, 0])
|
||||||
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
|> angledLine({ angle = 240, length = 10 }, %, $referenceEdge)
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(5, exampleSketch)
|
example = extrude(exampleSketch, length = 5)
|
||||||
|> fillet({
|
|> fillet({
|
||||||
radius = 3,
|
radius = 3,
|
||||||
tags = [getPreviousAdjacentEdge(referenceEdge)]
|
tags = [getPreviousAdjacentEdge(referenceEdge)]
|
||||||
|
File diff suppressed because one or more lines are too long
43
docs/kcl/helixRevolutions.md
Normal file
43
docs/kcl/helixRevolutions.md
Normal file
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 @@ hollow(thickness: number, solid: Solid) -> Solid
|
|||||||
// Hollow a basic sketch.
|
// Hollow a basic sketch.
|
||||||
firstSketch = startSketchOn('XY')
|
firstSketch = startSketchOn('XY')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %)
|
|> line(end = [-24, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|> hollow(0.25, %)
|
|> hollow(0.25, %)
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -45,11 +45,11 @@ firstSketch = startSketchOn('XY')
|
|||||||
// Hollow a basic sketch.
|
// Hollow a basic sketch.
|
||||||
firstSketch = startSketchOn('-XZ')
|
firstSketch = startSketchOn('-XZ')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %)
|
|> line(end = [-24, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|> hollow(0.5, %)
|
|> hollow(0.5, %)
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -60,25 +60,25 @@ firstSketch = startSketchOn('-XZ')
|
|||||||
size = 100
|
size = 100
|
||||||
case = startSketchOn('-XZ')
|
case = startSketchOn('-XZ')
|
||||||
|> startProfileAt([-size, -size], %)
|
|> startProfileAt([-size, -size], %)
|
||||||
|> line([2 * size, 0], %)
|
|> line(end = [2 * size, 0])
|
||||||
|> line([0, 2 * size], %)
|
|> line(end = [0, 2 * size])
|
||||||
|> tangentialArcTo([-size, size], %)
|
|> tangentialArcTo([-size, size], %)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(65, %)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [-size / 2, -size / 2],
|
center = [-size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [size / 2, -size / 2],
|
center = [size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
hollow(0.5, case)
|
hollow(0.5, case)
|
||||||
```
|
```
|
||||||
|
@ -4,14 +4,16 @@ excerpt: "Import a CAD file."
|
|||||||
layout: manual
|
layout: manual
|
||||||
---
|
---
|
||||||
|
|
||||||
|
**WARNING:** This function is deprecated.
|
||||||
|
|
||||||
Import a CAD file.
|
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.
|
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.
|
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
|
```js
|
||||||
import(file_path: String, options?: ImportFormat) -> ImportedGeometry
|
import(file_path: String, options?: ImportFormat) -> ImportedGeometry
|
||||||
```
|
```
|
||||||
|
@ -35,6 +35,7 @@ layout: manual
|
|||||||
* [`ceil`](kcl/ceil)
|
* [`ceil`](kcl/ceil)
|
||||||
* [`chamfer`](kcl/chamfer)
|
* [`chamfer`](kcl/chamfer)
|
||||||
* [`circle`](kcl/circle)
|
* [`circle`](kcl/circle)
|
||||||
|
* [`circleThreePoint`](kcl/circleThreePoint)
|
||||||
* [`close`](kcl/close)
|
* [`close`](kcl/close)
|
||||||
* [`cm`](kcl/cm)
|
* [`cm`](kcl/cm)
|
||||||
* [`cos`](kcl/cos)
|
* [`cos`](kcl/cos)
|
||||||
@ -47,18 +48,16 @@ layout: manual
|
|||||||
* [`getOppositeEdge`](kcl/getOppositeEdge)
|
* [`getOppositeEdge`](kcl/getOppositeEdge)
|
||||||
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
|
* [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge)
|
||||||
* [`helix`](kcl/helix)
|
* [`helix`](kcl/helix)
|
||||||
|
* [`helixRevolutions`](kcl/helixRevolutions)
|
||||||
* [`hole`](kcl/hole)
|
* [`hole`](kcl/hole)
|
||||||
* [`hollow`](kcl/hollow)
|
* [`hollow`](kcl/hollow)
|
||||||
* [`import`](kcl/import)
|
|
||||||
* [`inch`](kcl/inch)
|
* [`inch`](kcl/inch)
|
||||||
* [`int`](kcl/int)
|
|
||||||
* [`lastSegX`](kcl/lastSegX)
|
* [`lastSegX`](kcl/lastSegX)
|
||||||
* [`lastSegY`](kcl/lastSegY)
|
* [`lastSegY`](kcl/lastSegY)
|
||||||
* [`legAngX`](kcl/legAngX)
|
* [`legAngX`](kcl/legAngX)
|
||||||
* [`legAngY`](kcl/legAngY)
|
* [`legAngY`](kcl/legAngY)
|
||||||
* [`legLen`](kcl/legLen)
|
* [`legLen`](kcl/legLen)
|
||||||
* [`line`](kcl/line)
|
* [`line`](kcl/line)
|
||||||
* [`lineTo`](kcl/lineTo)
|
|
||||||
* [`ln`](kcl/ln)
|
* [`ln`](kcl/ln)
|
||||||
* [`loft`](kcl/loft)
|
* [`loft`](kcl/loft)
|
||||||
* [`log`](kcl/log)
|
* [`log`](kcl/log)
|
||||||
@ -80,6 +79,7 @@ layout: manual
|
|||||||
* [`pi`](kcl/pi)
|
* [`pi`](kcl/pi)
|
||||||
* [`polar`](kcl/polar)
|
* [`polar`](kcl/polar)
|
||||||
* [`polygon`](kcl/polygon)
|
* [`polygon`](kcl/polygon)
|
||||||
|
* [`pop`](kcl/pop)
|
||||||
* [`pow`](kcl/pow)
|
* [`pow`](kcl/pow)
|
||||||
* [`profileStart`](kcl/profileStart)
|
* [`profileStart`](kcl/profileStart)
|
||||||
* [`profileStartX`](kcl/profileStartX)
|
* [`profileStartX`](kcl/profileStartX)
|
||||||
|
@ -4,6 +4,8 @@ excerpt: "Convert a number to an integer."
|
|||||||
layout: manual
|
layout: manual
|
||||||
---
|
---
|
||||||
|
|
||||||
|
**WARNING:** This function is deprecated.
|
||||||
|
|
||||||
Convert a number to an integer.
|
Convert a number to an integer.
|
||||||
|
|
||||||
DEPRECATED use floor(), ceil(), or round().
|
DEPRECATED use floor(), ceil(), or round().
|
||||||
@ -36,7 +38,7 @@ assertEqual(n, 3, 0.0001, "5/2 = 2.5, rounded up makes 3")
|
|||||||
// Draw n cylinders.
|
// Draw n cylinders.
|
||||||
startSketchOn('XZ')
|
startSketchOn('XZ')
|
||||||
|> circle({ center = [0, 0], radius = 2 }, %)
|
|> circle({ center = [0, 0], radius = 2 }, %)
|
||||||
|> extrude(5, %)
|
|> extrude(length = 5)
|
||||||
|> patternTransform(n, fn(id) {
|
|> patternTransform(n, fn(id) {
|
||||||
return { translate = [4 * id, 0, 0] }
|
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')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> circle({ center = [0, 0], radius = 1 }, %)
|
|> circle({ center = [0, 0], radius = 1 }, %)
|
||||||
|
|
||||||
example = extrude(-5, exampleSketch)
|
example = extrude(exampleSketch, length = -5)
|
||||||
|> patternCircular3d({
|
|> patternCircular3d({
|
||||||
axis = [1, -1, 0],
|
axis = [1, -1, 0],
|
||||||
center = [10, -20, 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
|
```js
|
||||||
exampleSketch = startSketchOn('XZ')
|
exampleSketch = startSketchOn('XZ')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([0, 2], %)
|
|> line(end = [0, 2])
|
||||||
|> line([3, 1], %)
|
|> line(end = [3, 1])
|
||||||
|> line([0, -4], %)
|
|> line(end = [0, -4])
|
||||||
|> close(%)
|
|> close()
|
||||||
|
|
||||||
example = extrude(1, exampleSketch)
|
example = extrude(exampleSketch, length = 1)
|
||||||
|> patternLinear3d({
|
|> patternLinear3d({
|
||||||
axis = [1, 0, 1],
|
axis = [1, 0, 1],
|
||||||
instances = 7,
|
instances = 7,
|
||||||
|
@ -63,7 +63,7 @@ fn transform(id) {
|
|||||||
// Sketch 4 cylinders.
|
// Sketch 4 cylinders.
|
||||||
sketch001 = startSketchOn('XZ')
|
sketch001 = startSketchOn('XZ')
|
||||||
|> circle({ center = [0, 0], radius = 2 }, %)
|
|> circle({ center = [0, 0], radius = 2 }, %)
|
||||||
|> extrude(5, %)
|
|> extrude(length = 5)
|
||||||
|> patternTransform(4, transform, %)
|
|> patternTransform(4, transform, %)
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -79,7 +79,7 @@ fn transform(id) {
|
|||||||
|
|
||||||
sketch001 = startSketchOn('XZ')
|
sketch001 = startSketchOn('XZ')
|
||||||
|> circle({ center = [0, 0], radius = 2 }, %)
|
|> circle({ center = [0, 0], radius = 2 }, %)
|
||||||
|> extrude(5, %)
|
|> extrude(length = 5)
|
||||||
|> patternTransform(4, transform, %)
|
|> patternTransform(4, transform, %)
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -97,12 +97,12 @@ fn cube(length, center) {
|
|||||||
|
|
||||||
return startSketchOn('XY')
|
return startSketchOn('XY')
|
||||||
|> startProfileAt(p0, %)
|
|> startProfileAt(p0, %)
|
||||||
|> lineTo(p1, %)
|
|> line(endAbsolute = p1)
|
||||||
|> lineTo(p2, %)
|
|> line(endAbsolute = p2)
|
||||||
|> lineTo(p3, %)
|
|> line(endAbsolute = p3)
|
||||||
|> lineTo(p0, %)
|
|> line(endAbsolute = p0)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(length, %)
|
|> extrude(length = length)
|
||||||
}
|
}
|
||||||
|
|
||||||
width = 20
|
width = 20
|
||||||
@ -135,12 +135,12 @@ fn cube(length, center) {
|
|||||||
|
|
||||||
return startSketchOn('XY')
|
return startSketchOn('XY')
|
||||||
|> startProfileAt(p0, %)
|
|> startProfileAt(p0, %)
|
||||||
|> lineTo(p1, %)
|
|> line(endAbsolute = p1)
|
||||||
|> lineTo(p2, %)
|
|> line(endAbsolute = p2)
|
||||||
|> lineTo(p3, %)
|
|> line(endAbsolute = p3)
|
||||||
|> lineTo(p0, %)
|
|> line(endAbsolute = p0)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(length, %)
|
|> extrude(length = length)
|
||||||
}
|
}
|
||||||
|
|
||||||
width = 20
|
width = 20
|
||||||
@ -179,7 +179,7 @@ fn layer() {
|
|||||||
return startSketchOn("XY")
|
return startSketchOn("XY")
|
||||||
// or some other plane idk
|
// or some other plane idk
|
||||||
|> circle({ center = [0, 0], radius = 1 }, %, $tag1)
|
|> circle({ center = [0, 0], radius = 1 }, %, $tag1)
|
||||||
|> extrude(h, %)
|
|> extrude(length = h)
|
||||||
}
|
}
|
||||||
// The vase is 100 layers tall.
|
// The vase is 100 layers tall.
|
||||||
// The 100 layers are replica of each other, with a slight transformation applied to each.
|
// The 100 layers are replica of each other, with a slight transformation applied to each.
|
||||||
@ -205,7 +205,7 @@ startSketchOn('XY')
|
|||||||
center = [0, 0],
|
center = [0, 0],
|
||||||
inscribed = false
|
inscribed = false
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(4, %)
|
|> extrude(length = 4)
|
||||||
|> patternTransform(3, transform, %)
|
|> 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
39
docs/kcl/pop.md
Normal file
39
docs/kcl/pop.md
Normal file
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
|
w = 15
|
||||||
cube = startSketchOn('XY')
|
cube = startSketchOn('XY')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([w, 0], %, $line1)
|
|> line(end = [w, 0], tag = $line1)
|
||||||
|> line([0, w], %, $line2)
|
|> line(end = [0, w], tag = $line2)
|
||||||
|> line([-w, 0], %, $line3)
|
|> line(end = [-w, 0], tag = $line3)
|
||||||
|> line([0, -w], %, $line4)
|
|> line(end = [0, -w], tag = $line4)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(5, %)
|
|> extrude(length = 5)
|
||||||
|
|
||||||
fn cylinder(radius, tag) {
|
fn cylinder(radius, tag) {
|
||||||
return startSketchOn('XY')
|
return startSketchOn('XY')
|
||||||
@ -44,7 +44,7 @@ fn cylinder(radius, tag) {
|
|||||||
radius = radius,
|
radius = radius,
|
||||||
center = segEnd(tag)
|
center = segEnd(tag)
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(radius, %)
|
|> extrude(length = radius)
|
||||||
}
|
}
|
||||||
|
|
||||||
cylinder(1, line1)
|
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
|
w = 15
|
||||||
cube = startSketchOn('XY')
|
cube = startSketchOn('XY')
|
||||||
|> startProfileAt([0, 0], %)
|
|> startProfileAt([0, 0], %)
|
||||||
|> line([w, 0], %, $line1)
|
|> line(end = [w, 0], tag = $line1)
|
||||||
|> line([0, w], %, $line2)
|
|> line(end = [0, w], tag = $line2)
|
||||||
|> line([-w, 0], %, $line3)
|
|> line(end = [-w, 0], tag = $line3)
|
||||||
|> line([0, -w], %, $line4)
|
|> line(end = [0, -w], tag = $line4)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(5, %)
|
|> extrude(length = 5)
|
||||||
|
|
||||||
fn cylinder(radius, tag) {
|
fn cylinder(radius, tag) {
|
||||||
return startSketchOn('XY')
|
return startSketchOn('XY')
|
||||||
@ -44,7 +44,7 @@ fn cylinder(radius, tag) {
|
|||||||
radius = radius,
|
radius = radius,
|
||||||
center = segStart(tag)
|
center = segStart(tag)
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(radius, %)
|
|> extrude(length = radius)
|
||||||
}
|
}
|
||||||
|
|
||||||
cylinder(1, line1)
|
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.
|
// Remove the end face for the extrusion.
|
||||||
firstSketch = startSketchOn('XY')
|
firstSketch = startSketchOn('XY')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %)
|
|> line(end = [-24, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|
|
||||||
// Remove the end face for the extrusion.
|
// Remove the end face for the extrusion.
|
||||||
shell({ faces = ['end'], thickness = 0.25 }, firstSketch)
|
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.
|
// Remove the start face for the extrusion.
|
||||||
firstSketch = startSketchOn('-XZ')
|
firstSketch = startSketchOn('-XZ')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %)
|
|> line(end = [-24, 0])
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|
|
||||||
// Remove the start face for the extrusion.
|
// Remove the start face for the extrusion.
|
||||||
shell({ faces = ['start'], thickness = 0.25 }, firstSketch)
|
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.
|
// Remove a tagged face and the end face for the extrusion.
|
||||||
firstSketch = startSketchOn('XY')
|
firstSketch = startSketchOn('XY')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %, $myTag)
|
|> line(end = [-24, 0], tag = $myTag)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|
|
||||||
// Remove a tagged face for the extrusion.
|
// Remove a tagged face for the extrusion.
|
||||||
shell({ faces = [myTag], thickness = 0.25 }, firstSketch)
|
shell({ faces = [myTag], thickness = 0.25 }, firstSketch)
|
||||||
@ -79,11 +79,11 @@ shell({ faces = [myTag], thickness = 0.25 }, firstSketch)
|
|||||||
// Remove multiple faces at once.
|
// Remove multiple faces at once.
|
||||||
firstSketch = startSketchOn('XY')
|
firstSketch = startSketchOn('XY')
|
||||||
|> startProfileAt([-12, 12], %)
|
|> startProfileAt([-12, 12], %)
|
||||||
|> line([24, 0], %)
|
|> line(end = [24, 0])
|
||||||
|> line([0, -24], %)
|
|> line(end = [0, -24])
|
||||||
|> line([-24, 0], %, $myTag)
|
|> line(end = [-24, 0], tag = $myTag)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(6, %)
|
|> extrude(length = 6)
|
||||||
|
|
||||||
// Remove a tagged face and the end face for the extrusion.
|
// Remove a tagged face and the end face for the extrusion.
|
||||||
shell({
|
shell({
|
||||||
@ -99,25 +99,25 @@ shell({
|
|||||||
size = 100
|
size = 100
|
||||||
case = startSketchOn('-XZ')
|
case = startSketchOn('-XZ')
|
||||||
|> startProfileAt([-size, -size], %)
|
|> startProfileAt([-size, -size], %)
|
||||||
|> line([2 * size, 0], %)
|
|> line(end = [2 * size, 0])
|
||||||
|> line([0, 2 * size], %)
|
|> line(end = [0, 2 * size])
|
||||||
|> tangentialArcTo([-size, size], %)
|
|> tangentialArcTo([-size, size], %)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(65, %)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [-size / 2, -size / 2],
|
center = [-size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [size / 2, -size / 2],
|
center = [size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
// We put "case" in the shell function to shell the entire object.
|
// We put "case" in the shell function to shell the entire object.
|
||||||
shell({ faces = ['start'], thickness = 5 }, case)
|
shell({ faces = ['start'], thickness = 5 }, case)
|
||||||
@ -130,25 +130,25 @@ shell({ faces = ['start'], thickness = 5 }, case)
|
|||||||
size = 100
|
size = 100
|
||||||
case = startSketchOn('XY')
|
case = startSketchOn('XY')
|
||||||
|> startProfileAt([-size, -size], %)
|
|> startProfileAt([-size, -size], %)
|
||||||
|> line([2 * size, 0], %)
|
|> line(end = [2 * size, 0])
|
||||||
|> line([0, 2 * size], %)
|
|> line(end = [0, 2 * size])
|
||||||
|> tangentialArcTo([-size, size], %)
|
|> tangentialArcTo([-size, size], %)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(65, %)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [-size / 2, -size / 2],
|
center = [-size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [size / 2, -size / 2],
|
center = [size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
// We put "thing1" in the shell function to shell the end face of the object.
|
// We put "thing1" in the shell function to shell the end face of the object.
|
||||||
shell({ faces = ['end'], thickness = 5 }, thing1)
|
shell({ faces = ['end'], thickness = 5 }, thing1)
|
||||||
@ -164,25 +164,25 @@ shell({ faces = ['end'], thickness = 5 }, thing1)
|
|||||||
size = 100
|
size = 100
|
||||||
case = startSketchOn('XY')
|
case = startSketchOn('XY')
|
||||||
|> startProfileAt([-size, -size], %)
|
|> startProfileAt([-size, -size], %)
|
||||||
|> line([2 * size, 0], %)
|
|> line(end = [2 * size, 0])
|
||||||
|> line([0, 2 * size], %)
|
|> line(end = [0, 2 * size])
|
||||||
|> tangentialArcTo([-size, size], %)
|
|> tangentialArcTo([-size, size], %)
|
||||||
|> close(%)
|
|> close()
|
||||||
|> extrude(65, %)
|
|> extrude(length = 65)
|
||||||
|
|
||||||
thing1 = startSketchOn(case, 'end')
|
thing1 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [-size / 2, -size / 2],
|
center = [-size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
thing2 = startSketchOn(case, 'end')
|
thing2 = startSketchOn(case, 'end')
|
||||||
|> circle({
|
|> circle({
|
||||||
center = [size / 2, -size / 2],
|
center = [size / 2, -size / 2],
|
||||||
radius = 25
|
radius = 25
|
||||||
}, %)
|
}, %)
|
||||||
|> extrude(50, %)
|
|> extrude(length = 50)
|
||||||
|
|
||||||
// We put "thing1" and "thing2" in the shell function to shell the end face of the object.
|
// We put "thing1" and "thing2" in the shell function to shell the end face of the object.
|
||||||
shell({ faces = ['end'], thickness = 5 }, [thing1, thing2])
|
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
38229
docs/kcl/std.json
38229
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
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