Compare commits
	
		
			113 Commits
		
	
	
		
			pierremtb/
			...
			franknoiro
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| e1da72a0ae | |||
| ec2d1999a7 | |||
| 95683f1cc1 | |||
| f48f1c21c1 | |||
| 5cdf2de89a | |||
| 543e809739 | |||
| 61b669cf4e | |||
| 75f1aaa824 | |||
| f4848d7dea | |||
| a0167f6ba6 | |||
| e5a26c42e6 | |||
| 9c87b124d9 | |||
| 21389c089d | |||
| 29f57be8c1 | |||
| cd55f07619 | |||
| baf7d3dd9d | |||
| 54a9a50969 | |||
| 2830c750fa | |||
| d3160cd85a | |||
| fd1b4c3a32 | |||
| b0a41c31ac | |||
| 5825ba575c | |||
| e5bec2140e | |||
| 7bf6bc3048 | |||
| 22f9df73ed | |||
| 834472e0a6 | |||
| bcdf6e314f | |||
| 55e9845ade | |||
| d61cf882c1 | |||
| 874d19cbfd | |||
| 9dcc955760 | |||
| 9b594efe53 | |||
| 7b9f40c4cb | |||
| 81b79da90f | |||
| 2ad5a880fa | |||
| b57a9ba54c | |||
| b32f5c1d4e | |||
| b6d4cc7a4e | |||
| 43a34b191e | |||
| 19a93e8deb | |||
| b8c623e1ec | |||
| 4006c28479 | |||
| 8c932fdb8d | |||
| a74c715c01 | |||
| 1ac39d95f2 | |||
| 41b1ec94fa | |||
| 525c803888 | |||
| 2ee1c78aad | |||
| dc21034b86 | |||
| 1684786659 | |||
| 12505b4398 | |||
| 115f2fdea2 | |||
| 0df28abc4b | |||
| 1e07ea4986 | |||
| f34c23d203 | |||
| 5295f0ae7d | |||
| 07a90b3171 | |||
| 54936f6932 | |||
| 6e296af507 | |||
| 60c152bf14 | |||
| 59de494125 | |||
| 1c44b01d16 | |||
| 789fb83a5d | |||
| 63fc287742 | |||
| 5e1b91b0e7 | |||
| a1c2e817a4 | |||
| 6ed4e72e1d | |||
| 6477011c0f | |||
| cd9dc3e6a5 | |||
| 4b424de5a6 | |||
| 0f1b94f8b9 | |||
| 8879f488bb | |||
| 67d0fb76f6 | |||
| fff3c58560 | |||
| 8880df4fbb | |||
| d94017c5e3 | |||
| 8fe91259fa | |||
| 57d4204f47 | |||
| ee601f93bf | |||
| b0b48a2e9f | |||
| 46f940ead5 | |||
| 014cedb2cc | |||
| 2375f900b9 | |||
| 9fd4fd0dd8 | |||
| ee5037bf35 | |||
| 881745e131 | |||
| 49fce9ed57 | |||
| fb7b2be427 | |||
| 2ec68e3c73 | |||
| 6e2dd53ee0 | |||
| f5c262206e | |||
| 9c9b448705 | |||
| 615b03aea5 | |||
| c3c435348d | |||
| d13f7fd508 | |||
| af842aeded | |||
| 0d4b7adf99 | |||
| e708b6ee6b | |||
| 4dd8a25fdd | |||
| 029799215b | |||
| e3b8807d6f | |||
| 0e5d88df0b | |||
| 95781143eb | |||
| c184a7d4d8 | |||
| c38e52fbb7 | |||
| ea0a3ac3ba | |||
| 385589ddf9 | |||
| 22df47fa96 | |||
| a68748abcf | |||
| 1b8688f274 | |||
| 397839da84 | |||
| ac120838e5 | |||
| e6a2ac9c4a | 
| @ -1,3 +1,3 @@ | ||||
| [codespell] | ||||
| ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,absolutey,atleast,ue | ||||
| ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,absolutey,atleast,ue,afterall | ||||
| skip: **/target,node_modules,build,**/Cargo.lock,./docs/kcl/*.md,./src-tauri/gen/schemas | ||||
|  | ||||
							
								
								
									
										38
									
								
								.github/workflows/ci.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -20,6 +20,11 @@ concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: true | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|   pull-requests: write | ||||
|   actions: read | ||||
|  | ||||
| jobs: | ||||
|   check-format: | ||||
|     runs-on: 'ubuntu-latest' | ||||
| @ -85,7 +90,38 @@ jobs: | ||||
|  | ||||
|       - run: yarn simpleserver:ci | ||||
|  | ||||
|       - run: yarn test:nowatch | ||||
|       - name: Install Chromium Browser | ||||
|         run: yarn playwright install chromium --with-deps | ||||
|  | ||||
|       - name: run unit tests | ||||
|         run: yarn test:nowatch | ||||
|         env: | ||||
|           VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|  | ||||
|       - name: check for changes | ||||
|         id: git-check | ||||
|         run: | | ||||
|             git add src/lang/std/artifactMapGraphs | ||||
|             if git status src/lang/std/artifactMapGraphs | grep -q "Changes to be committed" | ||||
|             then echo "modified=true" >> $GITHUB_OUTPUT | ||||
|             else echo "modified=false" >> $GITHUB_OUTPUT | ||||
|             fi | ||||
|       - name: Commit changes, if any | ||||
|         if: steps.git-check.outputs.modified == 'true' | ||||
|         run: | | ||||
|           git config --local user.email "github-actions[bot]@users.noreply.github.com" | ||||
|           git config --local user.name "github-actions[bot]" | ||||
|           git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git | ||||
|           git fetch origin | ||||
|           echo ${{ github.head_ref }} | ||||
|           git checkout ${{ github.head_ref }} | ||||
|           # TODO when webkit works on ubuntu remove the os part of the commit message | ||||
|           git commit -am "Look at this (photo)Graph *in the voice of Nickelback*" || true | ||||
|           git push | ||||
|           git push origin ${{ github.head_ref }} | ||||
|          | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|   prepare-json-files: | ||||
|  | ||||
							
								
								
									
										49
									
								
								.github/workflows/generate-machine-api-types.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,49 @@ | ||||
| name: generate machine-api types | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     paths: | ||||
|       - 'openapi/machine-api.json' | ||||
|       - '.github/workflows/generate-machine-api-types.yml' | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: true | ||||
|  | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
| jobs: | ||||
|   generate: | ||||
|     runs-on: 'ubuntu-latest' | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: actions/setup-node@v4 | ||||
|         with: | ||||
|           node-version-file: '.nvmrc' | ||||
|           cache: 'yarn' | ||||
|       - run: yarn install | ||||
|       - run: yarn generate:machine-api | ||||
|       - run: yarn fmt | ||||
|       - name: check for changes | ||||
|         id: git-check | ||||
|         run: | | ||||
|             git add . | ||||
|             if git status | grep -q "Changes to be committed" | ||||
|             then echo "modified=true" >> $GITHUB_OUTPUT | ||||
|             else echo "modified=false" >> $GITHUB_OUTPUT | ||||
|             fi | ||||
|       - name: Commit changes, if any | ||||
|         if: steps.git-check.outputs.modified == 'true' | ||||
|         run: | | ||||
|           git add . | ||||
|           git config --local user.email "github-actions[bot]@users.noreply.github.com" | ||||
|           git config --local user.name "github-actions[bot]" | ||||
|           git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git | ||||
|           git fetch origin | ||||
|           echo ${{ github.head_ref }} | ||||
|           git checkout ${{ github.head_ref }} | ||||
|           git commit -am "New machine-api types" || true | ||||
|           git push | ||||
|           git push origin ${{ github.head_ref }} | ||||
|  | ||||
							
								
								
									
										49
									
								
								.github/workflows/playwright.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -34,8 +34,13 @@ jobs: | ||||
|               - 'src/wasm-lib/**' | ||||
|  | ||||
|   playwright-ubuntu: | ||||
|     timeout-minutes: 60 | ||||
|     timeout-minutes: 30 | ||||
|     runs-on: ubuntu-latest-8-cores | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         shardIndex: [1, 2, 3, 4] | ||||
|         shardTotal: [4] | ||||
|     needs: check-rust-changes | ||||
|     steps: | ||||
|     - name: Tune GitHub-hosted runner network | ||||
| @ -106,13 +111,19 @@ jobs: | ||||
|     - name: build web | ||||
|       run: yarn build:local | ||||
|     - name: Run ubuntu/chrome snapshots | ||||
|       continue-on-error: true | ||||
|       run: | | ||||
|         yarn playwright test --project="Google Chrome" --update-snapshots e2e/playwright/snapshot-tests.spec.ts | ||||
|         yarn playwright test --project="Google Chrome" --retries="3" --update-snapshots --grep=@snapshot  --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} | ||||
|       env: | ||||
|         CI: true | ||||
|         token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|         snapshottoken: ${{ secrets.KITTYCAD_API_TOKEN }} | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: always() | ||||
|       with: | ||||
|         name: playwright-report-ubuntu-snapshot-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
|     - name: Clean up test-results | ||||
|       if: always() | ||||
|       continue-on-error: true | ||||
| @ -143,7 +154,7 @@ jobs: | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: steps.git-check.outputs.modified == 'true' | ||||
|       with: | ||||
|         name: playwright-report-ubuntu-${{ github.sha }} | ||||
|         name: playwright-report-ubuntu-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         retention-days: 30 | ||||
|     # if have previous run results, use them | ||||
| @ -151,7 +162,7 @@ jobs: | ||||
|       if: always() | ||||
|       continue-on-error: true | ||||
|       with: | ||||
|         name: test-results-ubuntu-${{ github.sha }} | ||||
|         name: test-results-ubuntu-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: test-results/ | ||||
|     - name: Run ubuntu/chrome flow (with retries) | ||||
|       id: retry | ||||
| @ -160,7 +171,7 @@ jobs: | ||||
|         if [[ ! -f "test-results/.last-run.json" ]]; then | ||||
|             # if no last run artifact, than run plawright normally | ||||
|             echo "run playwright normally" | ||||
|             yarn playwright test --project="Google Chrome" e2e/playwright/flow-tests.spec.ts || true | ||||
|             yarn playwright test --project="Google Chrome" --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --grep-invert=@snapshot || true | ||||
|             # # send to axiom | ||||
|             node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1 | ||||
|         fi | ||||
| @ -175,7 +186,7 @@ jobs: | ||||
|                 if [[ $failed_tests -gt 0 ]]; then | ||||
|                     echo "retried=true" >>$GITHUB_OUTPUT | ||||
|                     echo "run playwright with last failed tests and retry $retry" | ||||
|                     yarn playwright test --project="Google Chrome" --last-failed e2e/playwright/flow-tests.spec.ts || true | ||||
|                     yarn playwright test --project="Google Chrome" --last-failed --grep-invert=@snapshot || true | ||||
|                     # send to axiom | ||||
|                     node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1 | ||||
|                     retry=$((retry + 1)) | ||||
| @ -210,21 +221,26 @@ jobs: | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: always() | ||||
|       with: | ||||
|         name: test-results-ubuntu-${{ github.sha }} | ||||
|         name: test-results-ubuntu-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: test-results/ | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: always() | ||||
|       with: | ||||
|         name: playwright-report-ubuntu-${{ github.sha }} | ||||
|         name: playwright-report-ubuntu-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
|  | ||||
|   playwright-macos: | ||||
|     timeout-minutes: 60 | ||||
|     runs-on: macos-14-large | ||||
|     timeout-minutes: 30 | ||||
|     runs-on: macos-14 | ||||
|     strategy: | ||||
|       fail-fast: false | ||||
|       matrix: | ||||
|         shardIndex: [1, 2, 3, 4] | ||||
|         shardTotal: [4] | ||||
|     needs: check-rust-changes | ||||
|     steps: | ||||
|     - name: Tune GitHub-hosted runner network | ||||
| @ -300,7 +316,7 @@ jobs: | ||||
|       if: ${{ always() }} | ||||
|       continue-on-error: true | ||||
|       with: | ||||
|         name: test-results-macos-${{ github.sha }} | ||||
|         name: test-results-macos-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: test-results/ | ||||
|     - name: Run macos/safari flow (with retries) | ||||
|       id: retry | ||||
| @ -309,7 +325,7 @@ jobs: | ||||
|         if [[ ! -f "test-results/.last-run.json" ]]; then | ||||
|             # if no last run artifact, than run plawright normally | ||||
|             echo "run playwright normally" | ||||
|             yarn playwright test --project="webkit" e2e/playwright/flow-tests.spec.ts || true | ||||
|             yarn playwright test --project="webkit" --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --grep-invert=@snapshot || true | ||||
|             # # send to axiom | ||||
|             node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1 | ||||
|         fi | ||||
| @ -324,7 +340,7 @@ jobs: | ||||
|                 if [[ $failed_tests -gt 0 ]]; then | ||||
|                     echo "retried=true" >>$GITHUB_OUTPUT | ||||
|                     echo "run playwright with last failed tests and retry $retry" | ||||
|                     yarn playwright test --project="webkit" --last-failed e2e/playwright/flow-tests.spec.ts || true | ||||
|                     yarn playwright test --project="webkit" --last-failed --grep-invert=@snapshot || true | ||||
|                     # send to axiom | ||||
|                     node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1 | ||||
|                     retry=$((retry + 1)) | ||||
| @ -354,15 +370,14 @@ jobs: | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: ${{ always() }} | ||||
|       with: | ||||
|         name: test-results-macos-${{ github.sha }} | ||||
|         name: test-results-macos-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: test-results/ | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: ${{ always() }} | ||||
|       with: | ||||
|         name: playwright-report-macos-${{ github.sha }} | ||||
|         name: playwright-report-macos-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
|  | ||||
|  | ||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -39,6 +39,7 @@ src/wasm-lib/grackle/test_json_output | ||||
| e2e/playwright/playwright-secrets.env | ||||
| e2e/playwright/temp1.png | ||||
| e2e/playwright/temp2.png | ||||
| e2e/playwright/temp3.png | ||||
| # exports from snapshot-tests.spec.ts "exports of each format should work" | ||||
| e2e/playwright/export-snapshots/* | ||||
| !e2e/playwright/export-snapshots/*.png | ||||
| @ -48,6 +49,7 @@ e2e/playwright/export-snapshots/* | ||||
| /playwright-report/ | ||||
| /blob-report/ | ||||
| /playwright/.cache/ | ||||
| /src/lang/std/artifactMapCache | ||||
|  | ||||
|  | ||||
| ## generated files | ||||
|  | ||||
| @ -9,7 +9,7 @@ Returns the angle to match the given length for x. | ||||
|  | ||||
|  | ||||
| ```js | ||||
| angleToMatchLengthX(segment_name: TagIdentifier, to: number, sketch_group: SketchGroup) -> number | ||||
| angleToMatchLengthX(tag: TagIdentifier, to: number, sketch_group: SketchGroup) -> number | ||||
| ``` | ||||
|  | ||||
| ### Examples | ||||
| @ -28,9 +28,95 @@ const extrusion = extrude(5, sketch001) | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
| * `segment_name`: `TagIdentifier` (REQUIRED) | ||||
| * `tag`: `TagIdentifier` (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| @ -38,7 +124,7 @@ const extrusion = extrude(5, sketch001) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -80,15 +166,21 @@ const extrusion = extrude(5, sketch001) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -106,7 +198,7 @@ const extrusion = extrude(5, sketch001) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -257,6 +349,38 @@ const extrusion = extrude(5, sketch001) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -9,7 +9,7 @@ Returns the angle to match the given length for y. | ||||
|  | ||||
|  | ||||
| ```js | ||||
| angleToMatchLengthY(segment_name: TagIdentifier, to: number, sketch_group: SketchGroup) -> number | ||||
| angleToMatchLengthY(tag: TagIdentifier, to: number, sketch_group: SketchGroup) -> number | ||||
| ``` | ||||
|  | ||||
| ### Examples | ||||
| @ -32,9 +32,95 @@ const extrusion = extrude(5, sketch001) | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
| * `segment_name`: `TagIdentifier` (REQUIRED) | ||||
| * `tag`: `TagIdentifier` (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| @ -42,7 +128,7 @@ const extrusion = extrude(5, sketch001) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -84,15 +170,21 @@ const extrusion = extrude(5, sketch001) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -110,7 +202,7 @@ const extrusion = extrude(5, sketch001) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -261,6 +353,38 @@ const extrusion = extrude(5, sketch001) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -33,7 +33,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `data`: `AngledLineData` - Data to draw an angled line. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The angle of the line. | ||||
| 	// The angle of the line (in degrees). | ||||
| 	angle: number, | ||||
| 	// The length of the line. | ||||
| 	length: number, | ||||
| @ -43,7 +43,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -85,15 +85,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -111,7 +117,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -262,6 +268,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -417,7 +455,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -459,15 +497,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -485,7 +529,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -636,6 +680,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -32,7 +32,7 @@ const extrusion = extrude(10, sketch001) | ||||
| * `data`: `AngledLineData` - Data to draw an angled line. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The angle of the line. | ||||
| 	// The angle of the line (in degrees). | ||||
| 	angle: number, | ||||
| 	// The length of the line. | ||||
| 	length: number, | ||||
| @ -42,7 +42,7 @@ const extrusion = extrude(10, sketch001) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -84,15 +84,21 @@ const extrusion = extrude(10, sketch001) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -110,7 +116,7 @@ const extrusion = extrude(10, sketch001) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -261,6 +267,38 @@ const extrusion = extrude(10, sketch001) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -416,7 +454,7 @@ const extrusion = extrude(10, sketch001) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -458,15 +496,21 @@ const extrusion = extrude(10, sketch001) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -484,7 +528,7 @@ const extrusion = extrude(10, sketch001) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -635,6 +679,38 @@ const extrusion = extrude(10, sketch001) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -34,7 +34,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `data`: `AngledLineData` - Data to draw an angled line. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The angle of the line. | ||||
| 	// The angle of the line (in degrees). | ||||
| 	angle: number, | ||||
| 	// The length of the line. | ||||
| 	length: number, | ||||
| @ -44,7 +44,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -86,15 +86,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -112,7 +118,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -263,6 +269,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -418,7 +456,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -460,15 +498,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -486,7 +530,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -637,6 +681,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -22,7 +22,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
|   |> lineTo([0, 20], %) | ||||
|   |> angledLineThatIntersects({ | ||||
|        angle: 80, | ||||
|        intersectTag: 'lineToIntersect', | ||||
|        intersectTag: lineToIntersect, | ||||
|        offset: 10 | ||||
|      }, %) | ||||
|   |> close(%) | ||||
| @ -41,6 +41,92 @@ const example = extrude(10, exampleSketch) | ||||
| 	angle: number, | ||||
| 	// The tag of the line to intersect with. | ||||
| 	intersectTag: { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The offset from the intersecting line. | ||||
| @ -50,7 +136,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -92,15 +178,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -118,7 +210,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -269,6 +361,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -424,7 +548,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -466,15 +590,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -492,7 +622,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -643,6 +773,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -41,7 +41,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -83,15 +83,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -109,7 +115,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -260,6 +266,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -415,7 +453,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -457,15 +495,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -483,7 +527,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -634,6 +678,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -41,7 +41,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -83,15 +83,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -109,7 +115,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -260,6 +266,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -415,7 +453,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -457,15 +495,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -483,7 +527,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -634,6 +678,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
							
								
								
									
										100
									
								
								docs/kcl/arc.md
									
									
									
									
									
								
							
							
						
						| @ -19,8 +19,8 @@ const exampleSketch = startSketchOn('XZ') | ||||
|   |> startProfileAt([0, 0], %) | ||||
|   |> line([10, 0], %) | ||||
|   |> arc({ | ||||
|        angle_start: 0, | ||||
|        angle_end: 280, | ||||
|        angleStart: 0, | ||||
|        angleEnd: 280, | ||||
|        radius: 16 | ||||
|      }, %) | ||||
|   |> close(%) | ||||
| @ -34,9 +34,9 @@ const exampleSketch = startSketchOn('XZ') | ||||
| ```js | ||||
| { | ||||
| 	// The end angle. | ||||
| 	angle_end: number, | ||||
| 	angleEnd: number, | ||||
| 	// The start angle. | ||||
| 	angle_start: number, | ||||
| 	angleStart: number, | ||||
| 	// The radius. | ||||
| 	radius: number, | ||||
| } | | ||||
| @ -52,7 +52,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -94,15 +94,21 @@ const exampleSketch = startSketchOn('XZ') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -120,7 +126,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -271,6 +277,38 @@ const exampleSketch = startSketchOn('XZ') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -426,7 +464,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -468,15 +506,21 @@ const exampleSketch = startSketchOn('XZ') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -494,7 +538,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -645,6 +689,38 @@ const exampleSketch = startSketchOn('XZ') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
							
								
								
									
										34
									
								
								docs/kcl/assert.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										34
									
								
								docs/kcl/assertGreaterThan.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										35
									
								
								docs/kcl/assertGreaterThanOrEq.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										34
									
								
								docs/kcl/assertLessThan.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										35
									
								
								docs/kcl/assertLessThanOrEq.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -47,7 +47,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -89,15 +89,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -115,7 +121,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -266,6 +272,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -421,7 +459,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -463,15 +501,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -489,7 +533,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -640,6 +684,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -31,10 +31,10 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
|   |> chamfer({ | ||||
|        length: chamferLength, | ||||
|        tags: [ | ||||
|          getNextAdjacentEdge(edge1, %), | ||||
|          getNextAdjacentEdge(edge2, %), | ||||
|          getNextAdjacentEdge(edge3, %), | ||||
|          getNextAdjacentEdge(edge4, %) | ||||
|          getNextAdjacentEdge(edge1), | ||||
|          getNextAdjacentEdge(edge2), | ||||
|          getNextAdjacentEdge(edge3), | ||||
|          getNextAdjacentEdge(edge4) | ||||
|        ] | ||||
|      }, %) | ||||
| ``` | ||||
| @ -51,6 +51,92 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	// The tags of the paths you want to chamfer. | ||||
| 	tags: [uuid | | ||||
| { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| }], | ||||
| } | ||||
| @ -63,15 +149,21 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -89,7 +181,7 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -131,15 +223,21 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -191,6 +289,38 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -364,6 +494,38 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
| @ -387,15 +549,21 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -413,7 +581,7 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -455,15 +623,21 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -515,6 +689,38 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -688,6 +894,38 @@ const mountingPlate = extrude(thickness, mountingPlateSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
| @ -82,15 +82,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -108,7 +114,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -259,6 +265,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -286,7 +324,7 @@ const example = extrude(5, exampleSketch) | ||||
| }, | ||||
| } | | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -328,15 +366,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -388,6 +432,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -543,7 +619,7 @@ const example = extrude(5, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -585,15 +661,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -611,7 +693,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -762,6 +844,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -42,7 +42,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -84,15 +84,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -110,7 +116,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -261,6 +267,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -416,7 +454,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -458,15 +496,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -484,7 +528,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -635,6 +679,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -19,8 +19,8 @@ const example = startSketchOn('XZ') | ||||
|   |> startProfileAt([0, 0], %) | ||||
|   |> line([10, 0], %) | ||||
|   |> arc({ | ||||
|        angle_end: 0, | ||||
|        angle_start: 120, | ||||
|        angleStart: 120, | ||||
|        angleEnd: 0, | ||||
|        radius: 5 | ||||
|      }, %) | ||||
|   |> line([5, 0], %) | ||||
| @ -41,8 +41,8 @@ const example = startSketchOn('XZ') | ||||
| const exampleSketch = startSketchOn('XZ') | ||||
|   |> startProfileAt([-10, 0], %) | ||||
|   |> arc({ | ||||
|        angle_end: -60, | ||||
|        angle_start: 120, | ||||
|        angleStart: 120, | ||||
|        angleEnd: -60, | ||||
|        radius: 5 | ||||
|      }, %) | ||||
|   |> line([10, 0], %) | ||||
| @ -67,7 +67,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -109,15 +109,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -135,7 +141,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -286,6 +292,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -441,15 +479,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -467,7 +511,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -509,15 +553,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -569,6 +619,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -743,6 +825,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | | ||||
| { | ||||
|  | ||||
| @ -19,10 +19,9 @@ const part001 = startSketchOn('XY') | ||||
|   |> circle([5, 5], 10, %) | ||||
|   |> extrude(10, %) | ||||
|   |> helix({ | ||||
|        angle_start: 0, | ||||
|        angleStart: 0, | ||||
|        ccw: true, | ||||
|        revolutions: 16, | ||||
|        angle_start: 0 | ||||
|        revolutions: 16 | ||||
|      }, %) | ||||
| ``` | ||||
|  | ||||
| @ -34,7 +33,7 @@ const part001 = startSketchOn('XY') | ||||
| ```js | ||||
| { | ||||
| 	// Start angle (in degrees). | ||||
| 	angle_start: number, | ||||
| 	angleStart: number, | ||||
| 	// Is the helix rotation counter clockwise? The default is `false`. | ||||
| 	ccw: string, | ||||
| 	// Length of the helix. If this argument is not provided, the height of the extrude group is used. | ||||
| @ -51,15 +50,21 @@ const part001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -77,7 +82,7 @@ const part001 = startSketchOn('XY') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -119,15 +124,21 @@ const part001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -179,6 +190,38 @@ const part001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -352,6 +395,38 @@ const part001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
| @ -366,15 +441,21 @@ const part001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -392,7 +473,7 @@ const part001 = startSketchOn('XY') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -434,15 +515,21 @@ const part001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -494,6 +581,38 @@ const part001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -667,6 +786,38 @@ const part001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										138
									
								
								docs/kcl/hole.md
									
									
									
									
									
								
							
							
						
						| @ -53,7 +53,7 @@ const example = extrude(1, exampleSketch) | ||||
| * `hole_sketch_group`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -95,15 +95,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -121,7 +127,7 @@ const example = extrude(1, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -272,6 +278,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -419,7 +457,7 @@ const example = extrude(1, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -461,15 +499,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -487,7 +531,7 @@ const example = extrude(1, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -638,6 +682,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -784,7 +860,7 @@ const example = extrude(1, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -826,15 +902,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -852,7 +934,7 @@ const example = extrude(1, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -1003,6 +1085,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -20,6 +20,11 @@ layout: manual | ||||
| * [`angledLineToY`](kcl/angledLineToY) | ||||
| * [`arc`](kcl/arc) | ||||
| * [`asin`](kcl/asin) | ||||
| * [`assert`](kcl/assert) | ||||
| * [`assertGreaterThan`](kcl/assertGreaterThan) | ||||
| * [`assertGreaterThanOrEq`](kcl/assertGreaterThanOrEq) | ||||
| * [`assertLessThan`](kcl/assertLessThan) | ||||
| * [`assertLessThanOrEq`](kcl/assertLessThanOrEq) | ||||
| * [`atan`](kcl/atan) | ||||
| * [`bezierCurve`](kcl/bezierCurve) | ||||
| * [`ceil`](kcl/ceil) | ||||
| @ -31,13 +36,13 @@ layout: manual | ||||
| * [`extrude`](kcl/extrude) | ||||
| * [`fillet`](kcl/fillet) | ||||
| * [`floor`](kcl/floor) | ||||
| * [`getEdge`](kcl/getEdge) | ||||
| * [`getNextAdjacentEdge`](kcl/getNextAdjacentEdge) | ||||
| * [`getOppositeEdge`](kcl/getOppositeEdge) | ||||
| * [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge) | ||||
| * [`helix`](kcl/helix) | ||||
| * [`hole`](kcl/hole) | ||||
| * [`import`](kcl/import) | ||||
| * [`int`](kcl/int) | ||||
| * [`lastSegX`](kcl/lastSegX) | ||||
| * [`lastSegY`](kcl/lastSegY) | ||||
| * [`legAngX`](kcl/legAngX) | ||||
| @ -57,6 +62,7 @@ layout: manual | ||||
| * [`patternLinear3d`](kcl/patternLinear3d) | ||||
| * [`patternTransform`](kcl/patternTransform) | ||||
| * [`pi`](kcl/pi) | ||||
| * [`polar`](kcl/polar) | ||||
| * [`pow`](kcl/pow) | ||||
| * [`profileStart`](kcl/profileStart) | ||||
| * [`profileStartX`](kcl/profileStartX) | ||||
|  | ||||
							
								
								
									
										43
									
								
								docs/kcl/int.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -33,7 +33,7 @@ const example = extrude(5, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -75,15 +75,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -101,7 +107,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -252,6 +258,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -33,7 +33,7 @@ const example = extrude(5, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -75,15 +75,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -101,7 +107,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -252,6 +258,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -46,7 +46,7 @@ const example = extrude(5, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -88,15 +88,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -114,7 +120,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -265,6 +271,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -420,7 +458,7 @@ const example = extrude(5, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -462,15 +500,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -488,7 +532,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -639,6 +683,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -33,7 +33,7 @@ const example = extrude(5, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -75,15 +75,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -101,7 +107,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -252,6 +258,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -407,7 +445,7 @@ const example = extrude(5, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -449,15 +487,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -475,7 +519,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -626,6 +670,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -51,7 +51,7 @@ const example = extrude(1, exampleSketch) | ||||
| * `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -93,15 +93,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -119,7 +125,7 @@ const example = extrude(1, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -270,6 +276,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -55,15 +55,21 @@ const example = extrude(-5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -81,7 +87,7 @@ const example = extrude(-5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -123,15 +129,21 @@ const example = extrude(-5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -183,6 +195,38 @@ const example = extrude(-5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -357,6 +401,38 @@ const example = extrude(-5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | | ||||
| { | ||||
|  | ||||
| @ -44,7 +44,7 @@ const example = extrude(1, exampleSketch) | ||||
| * `sketch_group_set`: `SketchGroupSet` - A sketch group or a group of sketch groups. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -86,15 +86,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -112,7 +118,7 @@ const example = extrude(1, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -263,6 +269,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -53,15 +53,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -79,7 +85,7 @@ const example = extrude(1, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -121,15 +127,21 @@ const example = extrude(1, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -181,6 +193,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -355,6 +399,38 @@ const example = extrude(1, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | | ||||
| { | ||||
|  | ||||
| @ -55,15 +55,21 @@ let vase = layer() | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -81,7 +87,7 @@ let vase = layer() | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -123,15 +129,21 @@ let vase = layer() | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -183,6 +195,38 @@ let vase = layer() | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -357,6 +401,38 @@ let vase = layer() | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | | ||||
| { | ||||
|  | ||||
							
								
								
									
										48
									
								
								docs/kcl/polar.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -19,7 +19,7 @@ const sketch001 = startSketchOn('XY') | ||||
|   |> startProfileAt([5, 2], %) | ||||
|   |> angledLine({ angle: 120, length: 50 }, %, $seg01) | ||||
|   |> angledLine({ | ||||
|        angle: segAng(seg01, %) + 120, | ||||
|        angle: segAng(seg01) + 120, | ||||
|        length: 50 | ||||
|      }, %) | ||||
|   |> lineTo(profileStart(%), %) | ||||
| @ -34,7 +34,7 @@ const sketch001 = startSketchOn('XY') | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -76,15 +76,21 @@ const sketch001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -102,7 +108,7 @@ const sketch001 = startSketchOn('XY') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -253,6 +259,38 @@ const sketch001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -29,7 +29,7 @@ const sketch001 = startSketchOn('XY') | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -71,15 +71,21 @@ const sketch001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -97,7 +103,7 @@ const sketch001 = startSketchOn('XY') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -248,6 +254,38 @@ const sketch001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -28,7 +28,7 @@ const sketch001 = startSketchOn('XY') | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -70,15 +70,21 @@ const sketch001 = startSketchOn('XY') | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -96,7 +102,7 @@ const sketch001 = startSketchOn('XY') | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -247,6 +253,38 @@ const sketch001 = startSketchOn('XY') | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -107,7 +107,7 @@ const sketch001 = startSketchOn(box, "END") | ||||
|   |> circle([10, 10], 4, %) | ||||
|   |> revolve({ | ||||
|        angle: 90, | ||||
|        axis: getOppositeEdge(revolveAxis, box) | ||||
|        axis: getOppositeEdge(revolveAxis) | ||||
|      }, %) | ||||
| ``` | ||||
| 
 | ||||
| @ -157,6 +157,92 @@ const part001 = revolve({ | ||||
| } | | ||||
| uuid | | ||||
| { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| }, | ||||
| } | ||||
| @ -164,7 +250,7 @@ uuid | | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -206,15 +292,21 @@ uuid | | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -232,7 +324,7 @@ uuid | | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -383,6 +475,38 @@ uuid | | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -534,15 +658,21 @@ uuid | | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -560,7 +690,7 @@ uuid | | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -602,15 +732,21 @@ uuid | | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -662,6 +798,38 @@ uuid | | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -835,6 +1003,38 @@ uuid | | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
| @ -9,7 +9,7 @@ Returns the angle of the segment. | ||||
|  | ||||
|  | ||||
| ```js | ||||
| segAng(segment_name: TagIdentifier, sketch_group: SketchGroup) -> number | ||||
| segAng(tag: TagIdentifier) -> number | ||||
| ``` | ||||
|  | ||||
| ### Examples | ||||
| @ -20,9 +20,9 @@ const exampleSketch = startSketchOn('XZ') | ||||
|   |> line([10, 0], %) | ||||
|   |> line([5, 10], %, $seg01) | ||||
|   |> line([-10, 0], %) | ||||
|   |> angledLine([segAng(seg01, %), 10], %) | ||||
|   |> angledLine([segAng(seg01), 10], %) | ||||
|   |> line([-10, 0], %) | ||||
|   |> angledLine([segAng(seg01, %), -15], %) | ||||
|   |> angledLine([segAng(seg01), -15], %) | ||||
|   |> close(%) | ||||
|  | ||||
| const example = extrude(4, exampleSketch) | ||||
| @ -32,89 +32,15 @@ const example = extrude(4, exampleSketch) | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
| * `segment_name`: `TagIdentifier` (REQUIRED) | ||||
| * `tag`: `TagIdentifier` (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| 	// The id of the plane. | ||||
| 	id: uuid, | ||||
| 	// Origin of the plane. | ||||
| 	origin: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	type: "plane", | ||||
| 	// Type for a plane. | ||||
| 	value: "XY" | "XZ" | "YZ" | "Custom", | ||||
| 	// What should the plane’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the plane’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| } | | ||||
| { | ||||
| 	// The extrude group the face is on. | ||||
| 	extrudeGroup: { | ||||
| 	// The id of the extrusion end cap | ||||
| 	endCapId: uuid, | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| }], | ||||
| 	// The height of the extrude group. | ||||
| 	height: number, | ||||
| 	// The id of the extrude group. | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| @ -127,109 +53,10 @@ const example = extrude(4, exampleSketch) | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the extrusion start cap | ||||
| 	startCapId: uuid, | ||||
| 	// The extrude surfaces. | ||||
| 	value: [{ | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| @ -260,144 +87,41 @@ const example = extrude(4, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	type: "face", | ||||
| 	// The tag of the face. | ||||
| 	value: string, | ||||
| 	// What should the face’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the face’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| }, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
| @ -9,7 +9,7 @@ Returns the segment end of x. | ||||
|  | ||||
|  | ||||
| ```js | ||||
| segEndX(segment_name: TagIdentifier, sketch_group: SketchGroup) -> number | ||||
| segEndX(tag: TagIdentifier) -> number | ||||
| ``` | ||||
|  | ||||
| ### Examples | ||||
| @ -19,7 +19,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
|   |> startProfileAt([0, 0], %) | ||||
|   |> line([20, 0], %, $thing) | ||||
|   |> line([0, 5], %) | ||||
|   |> line([segEndX(thing, %), 0], %) | ||||
|   |> line([segEndX(thing), 0], %) | ||||
|   |> line([-20, 10], %) | ||||
|   |> close(%) | ||||
|  | ||||
| @ -30,89 +30,15 @@ const example = extrude(5, exampleSketch) | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
| * `segment_name`: `TagIdentifier` (REQUIRED) | ||||
| * `tag`: `TagIdentifier` (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| 	// The id of the plane. | ||||
| 	id: uuid, | ||||
| 	// Origin of the plane. | ||||
| 	origin: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	type: "plane", | ||||
| 	// Type for a plane. | ||||
| 	value: "XY" | "XZ" | "YZ" | "Custom", | ||||
| 	// What should the plane’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the plane’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| } | | ||||
| { | ||||
| 	// The extrude group the face is on. | ||||
| 	extrudeGroup: { | ||||
| 	// The id of the extrusion end cap | ||||
| 	endCapId: uuid, | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| }], | ||||
| 	// The height of the extrude group. | ||||
| 	height: number, | ||||
| 	// The id of the extrude group. | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| @ -125,109 +51,10 @@ const example = extrude(5, exampleSketch) | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the extrusion start cap | ||||
| 	startCapId: uuid, | ||||
| 	// The extrude surfaces. | ||||
| 	value: [{ | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| @ -258,144 +85,41 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	type: "face", | ||||
| 	// The tag of the face. | ||||
| 	value: string, | ||||
| 	// What should the face’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the face’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| }, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
| @ -9,7 +9,7 @@ Returns the segment end of y. | ||||
|  | ||||
|  | ||||
| ```js | ||||
| segEndY(segment_name: TagIdentifier, sketch_group: SketchGroup) -> number | ||||
| segEndY(tag: TagIdentifier) -> number | ||||
| ``` | ||||
|  | ||||
| ### Examples | ||||
| @ -20,7 +20,7 @@ const exampleSketch = startSketchOn('XZ') | ||||
|   |> line([20, 0], %) | ||||
|   |> line([0, 3], %, $thing) | ||||
|   |> line([-10, 0], %) | ||||
|   |> line([0, segEndY(thing, %)], %) | ||||
|   |> line([0, segEndY(thing)], %) | ||||
|   |> line([-10, 0], %) | ||||
|   |> close(%) | ||||
|  | ||||
| @ -31,89 +31,15 @@ const example = extrude(5, exampleSketch) | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
| * `segment_name`: `TagIdentifier` (REQUIRED) | ||||
| * `tag`: `TagIdentifier` (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| 	// The id of the plane. | ||||
| 	id: uuid, | ||||
| 	// Origin of the plane. | ||||
| 	origin: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	type: "plane", | ||||
| 	// Type for a plane. | ||||
| 	value: "XY" | "XZ" | "YZ" | "Custom", | ||||
| 	// What should the plane’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the plane’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| } | | ||||
| { | ||||
| 	// The extrude group the face is on. | ||||
| 	extrudeGroup: { | ||||
| 	// The id of the extrusion end cap | ||||
| 	endCapId: uuid, | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| }], | ||||
| 	// The height of the extrude group. | ||||
| 	height: number, | ||||
| 	// The id of the extrude group. | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| @ -126,109 +52,10 @@ const example = extrude(5, exampleSketch) | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the extrusion start cap | ||||
| 	startCapId: uuid, | ||||
| 	// The extrude surfaces. | ||||
| 	value: [{ | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| @ -259,144 +86,41 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	type: "face", | ||||
| 	// The tag of the face. | ||||
| 	value: string, | ||||
| 	// What should the face’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the face’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| }, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
| @ -9,7 +9,7 @@ Returns the length of the segment. | ||||
|  | ||||
|  | ||||
| ```js | ||||
| segLen(segment_name: TagIdentifier, sketch_group: SketchGroup) -> number | ||||
| segLen(tag: TagIdentifier) -> number | ||||
| ``` | ||||
|  | ||||
| ### Examples | ||||
| @ -19,7 +19,7 @@ const exampleSketch = startSketchOn("XZ") | ||||
|   |> startProfileAt([0, 0], %) | ||||
|   |> angledLine({ angle: 60, length: 10 }, %, $thing) | ||||
|   |> tangentialArc({ offset: -120, radius: 5 }, %) | ||||
|   |> angledLine({ angle: -60, length: segLen(thing, %) }, %) | ||||
|   |> angledLine({ angle: -60, length: segLen(thing) }, %) | ||||
|   |> close(%) | ||||
|  | ||||
| const example = extrude(5, exampleSketch) | ||||
| @ -29,89 +29,15 @@ const example = extrude(5, exampleSketch) | ||||
|  | ||||
| ### Arguments | ||||
|  | ||||
| * `segment_name`: `TagIdentifier` (REQUIRED) | ||||
| * `tag`: `TagIdentifier` (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| 	// The id of the plane. | ||||
| 	id: uuid, | ||||
| 	// Origin of the plane. | ||||
| 	origin: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	type: "plane", | ||||
| 	// Type for a plane. | ||||
| 	value: "XY" | "XZ" | "YZ" | "Custom", | ||||
| 	// What should the plane’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the plane’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| } | | ||||
| { | ||||
| 	// The extrude group the face is on. | ||||
| 	extrudeGroup: { | ||||
| 	// The id of the extrusion end cap | ||||
| 	endCapId: uuid, | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| }], | ||||
| 	// The height of the extrude group. | ||||
| 	height: number, | ||||
| 	// The id of the extrude group. | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| @ -124,109 +50,10 @@ const example = extrude(5, exampleSketch) | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the extrusion start cap | ||||
| 	startCapId: uuid, | ||||
| 	// The extrude surfaces. | ||||
| 	value: [{ | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| @ -257,144 +84,41 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	type: "face", | ||||
| 	// The tag of the face. | ||||
| 	value: string, | ||||
| 	// What should the face’s X axis be? | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the face’s Y axis be? | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| }, | ||||
| 	// The starting path. | ||||
| 	start: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// Tag identifiers that have been declared in this sketch group. | ||||
| 	tags: { | ||||
| }, | ||||
| 	// The paths in the sketch group. | ||||
| 	value: [{ | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "ToPoint", | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// arc's direction | ||||
| 	ccw: string, | ||||
| 	// the arc's center | ||||
| 	center: [number, number], | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArcTo", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "TangentialArc", | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Horizontal", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "AngledLineTo", | ||||
| 	// The x coordinate. | ||||
| 	x: number, | ||||
| 	// The y coordinate. | ||||
| 	y: number, | ||||
| } | | ||||
| { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| 	type: "Base", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
|  | ||||
| @ -37,6 +37,92 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	// The faces you want removed. | ||||
| 	faces: ["start" | "end" | | ||||
| { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| }], | ||||
| 	// The thickness of the shell. | ||||
| @ -51,15 +137,21 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -77,7 +169,7 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -119,15 +211,21 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -179,6 +277,38 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -352,6 +482,38 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
| @ -366,15 +528,21 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -392,7 +560,7 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -434,15 +602,21 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -494,6 +668,38 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -667,6 +873,38 @@ shell({ faces: ['end'], thickness: 0.25 }, firstSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
|  | ||||
| @ -97,15 +97,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -123,7 +129,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -331,6 +337,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -373,7 +411,7 @@ const example = extrude(5, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -415,15 +453,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -441,7 +485,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -592,6 +636,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -59,7 +59,7 @@ const example = extrude(5, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -101,15 +101,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -127,7 +133,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -278,6 +284,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -55,7 +55,7 @@ const exampleSketch = startSketchOn("XY") | ||||
|  | ||||
| const example = extrude(10, exampleSketch) | ||||
|  | ||||
| const exampleSketch002 = startSketchOn(example, 'sketchingFace') | ||||
| const exampleSketch002 = startSketchOn(example, sketchingFace) | ||||
|   |> startProfileAt([1, 1], %) | ||||
|   |> line([8, 0], %) | ||||
|   |> line([0, 8], %) | ||||
| @ -64,7 +64,7 @@ const exampleSketch002 = startSketchOn(example, 'sketchingFace') | ||||
|  | ||||
| const example002 = extrude(10, exampleSketch002) | ||||
|  | ||||
| const exampleSketch003 = startSketchOn(example002, 'sketchingFace002') | ||||
| const exampleSketch003 = startSketchOn(example002, sketchingFace002) | ||||
|   |> startProfileAt([-8, 12], %) | ||||
|   |> line([0, 6], %) | ||||
|   |> line([6, 0], %) | ||||
| @ -106,9 +106,9 @@ const example002 = extrude(5, exampleSketch002) | ||||
| const a1 = startSketchOn({ | ||||
|        plane: { | ||||
|          origin: { x: 0, y: 0, z: 0 }, | ||||
|          x_axis: { x: 1, y: 0, z: 0 }, | ||||
|          y_axis: { x: 0, y: 1, z: 0 }, | ||||
|          z_axis: { x: 0, y: 0, z: 1 } | ||||
|          xAxis: { x: 1, y: 0, z: 0 }, | ||||
|          yAxis: { x: 0, y: 1, z: 0 }, | ||||
|          zAxis: { x: 0, y: 0, z: 1 } | ||||
|        } | ||||
|      }) | ||||
|   |> startProfileAt([0, 0], %) | ||||
| @ -141,19 +141,19 @@ const a1 = startSketchOn({ | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the plane’s X axis be? | ||||
| 	x_axis: { | ||||
| 	xAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// What should the plane’s Y axis be? | ||||
| 	y_axis: { | ||||
| 	yAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| }, | ||||
| 	// The z-axis (normal). | ||||
| 	z_axis: { | ||||
| 	zAxis: { | ||||
| 	x: number, | ||||
| 	y: number, | ||||
| 	z: number, | ||||
| @ -166,15 +166,21 @@ const a1 = startSketchOn({ | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -192,7 +198,7 @@ const a1 = startSketchOn({ | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -400,6 +406,38 @@ const a1 = startSketchOn({ | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| } | ||||
| ``` | ||||
| @ -407,6 +445,92 @@ const a1 = startSketchOn({ | ||||
| ```js | ||||
| "start" | "end" | | ||||
| { | ||||
| 	// Engine information for a tag. | ||||
| 	info: { | ||||
| 	// The id of the tagged object. | ||||
| 	id: uuid, | ||||
| 	// The path the tag is on. | ||||
| 	path: { | ||||
| 	// The from point. | ||||
| 	from: [number, number], | ||||
| 	// The tag of the path. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	// The to point. | ||||
| 	to: [number, number], | ||||
| }, | ||||
| 	// The sketch group the tag is on. | ||||
| 	sketchGroup: uuid, | ||||
| 	// The surface information for the tag. | ||||
| 	surface: { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudePlane", | ||||
| } | | ||||
| { | ||||
| 	// The face id for the extrude plane. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }, | ||||
| }, | ||||
| 	value: string, | ||||
| } | ||||
| ``` | ||||
| @ -454,15 +578,21 @@ const a1 = startSketchOn({ | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -480,7 +610,7 @@ const a1 = startSketchOn({ | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -688,6 +818,38 @@ const a1 = startSketchOn({ | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
							
								
								
									
										96353
									
								
								docs/kcl/std.json
									
									
									
									
									
								
							
							
						
						| @ -42,7 +42,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -84,15 +84,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -110,7 +116,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -261,6 +267,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -416,7 +454,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -458,15 +496,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -484,7 +528,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -635,6 +679,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -33,7 +33,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -75,15 +75,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -101,7 +107,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -252,6 +258,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -407,7 +445,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -449,15 +487,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -475,7 +519,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -626,6 +670,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -36,7 +36,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -78,15 +78,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -104,7 +110,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -255,6 +261,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -410,7 +448,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -452,15 +490,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -478,7 +522,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -629,6 +673,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -36,7 +36,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -78,15 +78,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -104,7 +110,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -255,6 +261,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -410,7 +448,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -452,15 +490,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -478,7 +522,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -629,6 +673,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -34,7 +34,7 @@ const example = extrude(10, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -76,15 +76,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -102,7 +108,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -253,6 +259,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -408,7 +446,7 @@ const example = extrude(10, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -450,15 +488,21 @@ const example = extrude(10, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -476,7 +520,7 @@ const example = extrude(10, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -627,6 +671,38 @@ const example = extrude(10, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| @ -32,7 +32,7 @@ const example = extrude(5, exampleSketch) | ||||
| * `sketch_group`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED) | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -74,15 +74,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -100,7 +106,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -251,6 +257,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
| @ -406,7 +444,7 @@ const example = extrude(5, exampleSketch) | ||||
| `SketchGroup` - A sketch group is a collection of paths. | ||||
| ```js | ||||
| { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: { | ||||
| @ -448,15 +486,21 @@ const example = extrude(5, exampleSketch) | ||||
| 	// Chamfers or fillets on this extrude group. | ||||
| 	filletOrChamfers: [{ | ||||
| 	// The engine id of the edge to fillet. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this fillet. | ||||
| 	id: uuid, | ||||
| 	radius: number, | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| } | | ||||
| { | ||||
| 	// The engine id of the edge to chamfer. | ||||
| 	edge_id: uuid, | ||||
| 	edgeId: uuid, | ||||
| 	// The id of the engine command that called this chamfer. | ||||
| 	id: uuid, | ||||
| 	length: number, | ||||
| @ -474,7 +518,7 @@ const example = extrude(5, exampleSketch) | ||||
| 	id: uuid, | ||||
| 	// The sketch group. | ||||
| 	sketchGroup: { | ||||
| 	// The id of the sketch group. | ||||
| 	// The id of the sketch group (this will change when the engine's reference to it changes. | ||||
| 	id: uuid, | ||||
| 	// What the sketch is on (can be a plane or a face). | ||||
| 	on: SketchSurface, | ||||
| @ -625,6 +669,38 @@ const example = extrude(5, exampleSketch) | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "extrudeArc", | ||||
| } | | ||||
| { | ||||
| 	// The id for the chamfer surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "chamfer", | ||||
| } | | ||||
| { | ||||
| 	// The id for the fillet surface. | ||||
| 	faceId: uuid, | ||||
| 	// The id of the geometry. | ||||
| 	id: uuid, | ||||
| 	// The source range. | ||||
| 	sourceRange: [number, number], | ||||
| 	// The tag. | ||||
| 	tag: { | ||||
| 	digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number], | ||||
| 	end: number, | ||||
| 	start: number, | ||||
| 	value: string, | ||||
| }, | ||||
| 	type: "fillet", | ||||
| }], | ||||
| }, | ||||
| 	// The id of the face. | ||||
|  | ||||
| Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 48 KiB | 
| Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB | 
| Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 54 KiB | 
| Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 39 KiB | 
| Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB | 
| Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 45 KiB | 
| Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 29 KiB | 
| Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 47 KiB | 
| Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 70 KiB | 
| Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 44 KiB | 
| Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB | 
| Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 32 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB | 
| Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 34 KiB | 
| Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 35 KiB | 
| Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 29 KiB | 
| Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 29 KiB | 
| @ -71,7 +71,7 @@ export const TEST_CODE_GIZMO = `const part001 = startSketchOn('XZ') | ||||
| |> angledLine({ angle: 3 + 0, length: 3.14 + 0 }, %) | ||||
| |> lineTo([20.14 + 0, -0.14 + 0], %) | ||||
| |> xLineTo(29 + 0, %) | ||||
| |> yLine(-3.14 + 0, %, 'a') | ||||
| |> yLine(-3.14 + 0, %, $a) | ||||
| |> xLine(1.63, %) | ||||
| |> angledLineOfXLength({ angle: 3 + 0, length: 3.14 }, %) | ||||
| |> angledLineOfYLength({ angle: 30, length: 3 + 0 }, %) | ||||
| @ -79,10 +79,292 @@ export const TEST_CODE_GIZMO = `const part001 = startSketchOn('XZ') | ||||
| |> angledLineToY({ angle: 30, to: 11.14 }, %) | ||||
| |> angledLineThatIntersects({ | ||||
|   angle: 3.14, | ||||
|   intersectTag: 'a', | ||||
|   intersectTag: a, | ||||
|   offset: 0 | ||||
| }, %) | ||||
| |> tangentialArcTo([13.14 + 0, 13.14], %) | ||||
| |> close(%) | ||||
| |> extrude(5 + 7, %) | ||||
| ` | ||||
|  | ||||
| export const TEST_CODE_LONG_WITH_ERROR_OUT_OF_VIEW = `const width = 50.8 | ||||
| const height = 30 | ||||
| const thickness = 2 | ||||
| const keychainHoleSize = 3 | ||||
|  | ||||
| const keychain = startSketchOn("XY") | ||||
|   |> startProfileAt([0, 0], %) | ||||
|   |> lineTo([width, 0], %) | ||||
|   |> lineTo([width, height], %) | ||||
|   |> lineTo([0, height], %) | ||||
|   |> close(%) | ||||
|   |> extrude(thickness, %) | ||||
|  | ||||
| // generated from  /home/paultag/Downloads/zma-logomark.svg | ||||
| fn svg = (surface, origin, depth) => { | ||||
|   let a0 = surface |> startProfileAt([origin[0] + 45.430427, origin[1] + -14.627736], %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0, 0.764157 ], | ||||
|     control2: [ 0, 1.528314 ], | ||||
|     to: [ 0, 2.292469 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -3.03202, 0 ], | ||||
|     control2: [ -6.064039, 0 ], | ||||
|     to: [ -9.09606, 0 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0, -1.077657 ], | ||||
|     control2: [ 0, -2.155312 ], | ||||
|     to: [ 0, -3.232969 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.741805, 0 ], | ||||
|     control2: [ 5.483613, 0 ], | ||||
|     to: [ 8.225417, 0 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.740682, -2.961815 ], | ||||
|     control2: [ -5.490342, -5.925794 ], | ||||
|     to: [ -8.225417, -8.886255 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0, -0.723995 ], | ||||
|     control2: [ 0, -1.447988 ], | ||||
|     to: [ 0, -2.171981 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.712124, 0.05061 ], | ||||
|     control2: [ 1.511636, -0.09877 ], | ||||
|     to: [ 2.172096, 0.07005 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.68573, 0.740811 ], | ||||
|     control2: [ 1.371459, 1.481622 ], | ||||
|     to: [ 2.057187, 2.222436 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0, -0.76416 ], | ||||
|     control2: [ 0, -1.52832 ], | ||||
|     to: [ 0, -2.29248 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 3.032013, 0 ], | ||||
|     control2: [ 6.064026, 0 ], | ||||
|     to: [ 9.096038, 0 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0, 1.077657 ], | ||||
|     control2: [ 0, 2.155314 ], | ||||
|     to: [ 0, 3.232973 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.741312, 0 ], | ||||
|     control2: [ -5.482623, 0 ], | ||||
|     to: [ -8.223936, 0 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.741313, 2.961108 ], | ||||
|     control2: [ 5.482624, 5.922216 ], | ||||
|     to: [ 8.223936, 8.883325 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0, 0.724968 ], | ||||
|     control2: [ 0, 1.449938 ], | ||||
|     to: [ 0, 2.174907 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.712656, -0.05145 ], | ||||
|     control2: [ -1.512554, 0.09643 ], | ||||
|     to: [ -2.173592, -0.07298 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.685222, -0.739834 ], | ||||
|     control2: [ -1.370445, -1.479669 ], | ||||
|     to: [ -2.055669, -2.219505 ] | ||||
|    }, %) | ||||
|     |> close(%) | ||||
|     |> extrude(depth, %) | ||||
|  | ||||
|   let a1 = surface |> startProfileAt([origin[0] + 57.920488, origin[1] + -15.244943], %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.78904, 0.106635 ], | ||||
|     control2: [ -5.052548, -2.969529 ], | ||||
|     to: [ -4.055141, -5.598369 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.841523, -0.918736 ], | ||||
|     control2: [ 0.439412, -1.541892 ], | ||||
|     to: [ -0.368488, -2.214378 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.418245, -0.448461 ], | ||||
|     control2: [ -0.836489, -0.896922 ], | ||||
|     to: [ -1.254732, -1.345384 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.76806, 2.995359 ], | ||||
|     control2: [ -2.32667, 8.18409 ], | ||||
|     to: [ 0.897655, 10.678932 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.562822, 2.186098 ], | ||||
|     control2: [ 6.605111, 2.28043 ], | ||||
|     to: [ 9.271202, 0.226476 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.743744, -0.797465 ], | ||||
|     control2: [ -1.487487, -1.594932 ], | ||||
|     to: [ -2.231232, -2.392397 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.672938, 0.421422 ], | ||||
|     control2: [ -1.465362, 0.646946 ], | ||||
|     to: [ -2.259264, 0.64512 ] | ||||
|    }, %) | ||||
|     |> close(%) | ||||
|     |> extrude(depth, %) | ||||
|  | ||||
|   let a2 = surface |> startProfileAt([origin[0] + 62.19406300000001, origin[1] + -19.500698999999997], %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.302938, 1.281141 ], | ||||
|     control2: [ -1.53575, 2.434288 ], | ||||
|     to: [ -0.10908, 3.279477 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.504637, 0.54145 ], | ||||
|     control2: [ 1.009273, 1.082899 ], | ||||
|     to: [ 1.513909, 1.624348 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.767778, -2.995425 ], | ||||
|     control2: [ 2.327135, -8.184384 ], | ||||
|     to: [ -0.897661, -10.679047 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.562947, -2.186022 ], | ||||
|     control2: [ -6.604089, -2.279606 ], | ||||
|     to: [ -9.271196, -0.227813 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.744231, 0.797952 ], | ||||
|     control2: [ 1.488461, 1.595904 ], | ||||
|     to: [ 2.232692, 2.393856 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.302377, -1.564629 ], | ||||
|     control2: [ 5.793126, -0.15358 ], | ||||
|     to: [ 6.396577, 2.547372 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.08981, 0.346302 ], | ||||
|     control2: [ 0.134865, 0.704078 ], | ||||
|     to: [ 0.13476, 1.061807 ] | ||||
|    }, %) | ||||
|     |> close(%) | ||||
|     |> extrude(depth, %) | ||||
|  | ||||
|   let a3 = surface |> startProfileAt([origin[0] + 74.124866, origin[1] + -15.244943], %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.78904, 0.106635 ], | ||||
|     control2: [ -5.052549, -2.969529 ], | ||||
|     to: [ -4.055142, -5.598369 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.841527, -0.918738 ], | ||||
|     control2: [ 0.43941, -1.541892 ], | ||||
|     to: [ -0.368497, -2.214367 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.418254, -0.448466 ], | ||||
|     control2: [ -0.836507, -0.896931 ], | ||||
|     to: [ -1.254761, -1.345395 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.768019, 2.995371 ], | ||||
|     control2: [ -2.326624, 8.184088 ], | ||||
|     to: [ 0.897678, 10.678932 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.56289, 2.186191 ], | ||||
|     control2: [ 6.60516, 2.280307 ], | ||||
|     to: [ 9.271371, 0.226476 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.743808, -0.797465 ], | ||||
|     control2: [ -1.487616, -1.594932 ], | ||||
|     to: [ -2.231424, -2.392397 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -0.672916, 0.421433 ], | ||||
|     control2: [ -1.465344, 0.646926 ], | ||||
|     to: [ -2.259225, 0.64512 ] | ||||
|    }, %) | ||||
|     |> close(%) | ||||
|     |> extrude(depth, %) | ||||
|  | ||||
|   let a4 = surface |> startProfileAt([origin[0] + 77.57333899999998, origin[1] + -16.989262999999998], %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.743298, 0.797463 ], | ||||
|     control2: [ 1.486592, 1.594926 ], | ||||
|     to: [ 2.229888, 2.392389 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.767827, -2.995393 ], | ||||
|     control2: [ 2.327103, -8.184396 ], | ||||
|     to: [ -0.897672, -10.679047 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ -2.562939, -2.186037 ], | ||||
|     control2: [ -6.604077, -2.279589 ], | ||||
|     to: [ -9.271185, -0.227813 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.744243, 0.797952 ], | ||||
|     control2: [ 1.488486, 1.595904 ], | ||||
|     to: [ 2.232729, 2.393856 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 2.302394, -1.564623 ], | ||||
|     control2: [ 5.793201, -0.153598 ], | ||||
|     to: [ 6.396692, 2.547372 ] | ||||
|    }, %) | ||||
|     |> bezierCurve({ | ||||
|     control1: [ 0.32074, 1.215468 ], | ||||
|     control2: [ 0.06159, 2.564765 ], | ||||
|     to: [ -0.690452, 3.573243 ] | ||||
|    }, %) | ||||
|     |> close(%) | ||||
|     |> extrude(depth, %) | ||||
|  | ||||
| const box = startSketchOn('XY') | ||||
|   |> startProfileAt([0, 0], %) | ||||
|   |> line([0, 10], %) | ||||
|   |> line([10, 0], %) | ||||
|   |> line([0, -10], %, $revolveAxis) | ||||
|   |> close(%) | ||||
|   |> extrude(10, %) | ||||
|  | ||||
|   const sketch001 = startSketchOn(box, revolveAxis) | ||||
|   |> startProfileAt([5, 10], %) | ||||
|   |> line([0, -10], %) | ||||
|   |> line([2, 0], %) | ||||
|   |> line([0, -10], %) | ||||
|   |> close(%) | ||||
|   |> revolve({ | ||||
|   axis: revolveAxis, | ||||
|   angle: 90 | ||||
|   }, %) | ||||
|   return 0 | ||||
| } | ||||
|  | ||||
|  | ||||
|  | ||||
| svg(startSketchOn(keychain, 'end'), [-33, 32], -thickness) | ||||
|  | ||||
| startSketchOn(keychain, 'end') | ||||
|   |> circle([ | ||||
|        width / 2, | ||||
|        height - (keychainHoleSize + 1.5) | ||||
|      ], keychainHoleSize, %) | ||||
|   |> extrude(-thickness, %)` | ||||
|  | ||||
| @ -1,5 +1,5 @@ | ||||
| import { test, expect, Page, Download } from '@playwright/test' | ||||
| import { EngineCommand } from '../../src/lang/std/engineConnection' | ||||
| import { expect, Page, Download } from '@playwright/test' | ||||
| import { EngineCommand } from 'lang/std/artifactGraph' | ||||
| import os from 'os' | ||||
| import fsp from 'fs/promises' | ||||
| import pixelMatch from 'pixelmatch' | ||||
| @ -15,13 +15,30 @@ export const TEST_COLORS = { | ||||
|   BLUE: [0, 0, 255] as TestColor, | ||||
| } as const | ||||
|  | ||||
| async function waitForPageLoadWithRetry(page: Page) { | ||||
|   await expect(async () => { | ||||
|     await page.goto('/') | ||||
|     const errorMessage = 'App failed to load - 🔃 Retrying ...' | ||||
|     await expect(page.getByTestId('loading'), errorMessage).not.toBeAttached({ | ||||
|       timeout: 20_000, | ||||
|     }) | ||||
|  | ||||
|     await expect( | ||||
|       page.getByRole('button', { name: 'Start Sketch' }), | ||||
|       errorMessage | ||||
|     ).toBeEnabled({ | ||||
|       timeout: 20_000, | ||||
|     }) | ||||
|   }).toPass({ timeout: 70_000, intervals: [1_000] }) | ||||
| } | ||||
|  | ||||
| async function waitForPageLoad(page: Page) { | ||||
|   // wait for all spinners to be gone | ||||
|   await expect(page.getByTestId('loading')).not.toBeAttached({ | ||||
|     timeout: 20_000, | ||||
|   }) | ||||
|  | ||||
|   await expect(page.getByTestId('start-sketch')).toBeEnabled({ | ||||
|   await expect(page.getByRole('button', { name: 'Start Sketch' })).toBeEnabled({ | ||||
|     timeout: 20_000, | ||||
|   }) | ||||
| } | ||||
| @ -58,44 +75,45 @@ async function waitForDefaultPlanesToBeVisible(page: Page) { | ||||
| } | ||||
|  | ||||
| async function openKclCodePanel(page: Page) { | ||||
|   const paneLocator = page.getByRole('tab', { name: 'KCL Code', exact: false }) | ||||
|   const isOpen = (await paneLocator?.getAttribute('aria-selected')) === 'true' | ||||
|   const paneLocator = page.getByTestId('code-pane-button') | ||||
|   const ariaSelected = await paneLocator?.getAttribute('aria-pressed') | ||||
|   const isOpen = ariaSelected === 'true' | ||||
|  | ||||
|   if (!isOpen) { | ||||
|     await paneLocator.click() | ||||
|     await paneLocator.and(page.locator('[aria-selected="true"]')).waitFor() | ||||
|     await expect(paneLocator).toHaveAttribute('aria-pressed', 'true') | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function closeKclCodePanel(page: Page) { | ||||
|   const paneLocator = page.getByRole('tab', { name: 'KCL Code', exact: false }) | ||||
|   const isOpen = (await paneLocator?.getAttribute('aria-selected')) === 'true' | ||||
|   const paneLocator = page.getByTestId('code-pane-button') | ||||
|   const ariaSelected = await paneLocator?.getAttribute('aria-pressed') | ||||
|   const isOpen = ariaSelected === 'true' | ||||
|  | ||||
|   if (isOpen) { | ||||
|     await paneLocator.click() | ||||
|     await paneLocator | ||||
|       .and(page.locator(':not([aria-selected="true"])')) | ||||
|       .waitFor() | ||||
|     await expect(paneLocator).not.toHaveAttribute('aria-pressed', 'true') | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function openDebugPanel(page: Page) { | ||||
|   const debugLocator = page.getByRole('tab', { name: 'Debug', exact: false }) | ||||
|   const isOpen = (await debugLocator?.getAttribute('aria-selected')) === 'true' | ||||
|   const debugLocator = page.getByTestId('debug-pane-button') | ||||
|   await expect(debugLocator).toBeVisible() | ||||
|   const isOpen = (await debugLocator?.getAttribute('aria-pressed')) === 'true' | ||||
|  | ||||
|   if (!isOpen) { | ||||
|     await debugLocator.click() | ||||
|     await debugLocator.and(page.locator('[aria-selected="true"]')).waitFor() | ||||
|     await expect(debugLocator).toHaveAttribute('aria-pressed', 'true') | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function closeDebugPanel(page: Page) { | ||||
|   const debugLocator = page.getByRole('tab', { name: 'Debug', exact: false }) | ||||
|   const isOpen = (await debugLocator?.getAttribute('aria-selected')) === 'true' | ||||
|   const debugLocator = page.getByTestId('debug-pane-button') | ||||
|   await expect(debugLocator).toBeVisible() | ||||
|   const isOpen = (await debugLocator?.getAttribute('aria-pressed')) === 'true' | ||||
|   if (isOpen) { | ||||
|     await debugLocator.click() | ||||
|     await debugLocator | ||||
|       .and(page.locator(':not([aria-selected="true"])')) | ||||
|       .waitFor() | ||||
|     await expect(debugLocator).not.toHaveAttribute('aria-pressed', 'true') | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -217,9 +235,12 @@ async function waitForAuthAndLsp(page: Page) { | ||||
|     } | ||||
|     return false | ||||
|   }) | ||||
|  | ||||
|   await page.goto('/') | ||||
|   await waitForPageLoad(page) | ||||
|   if (process.env.CI) { | ||||
|     await waitForPageLoadWithRetry(page) | ||||
|   } else { | ||||
|     await page.goto('/') | ||||
|     await waitForPageLoad(page) | ||||
|   } | ||||
|  | ||||
|   return waitForLspPromise | ||||
| } | ||||
| @ -233,6 +254,7 @@ export async function getUtils(page: Page) { | ||||
|   return { | ||||
|     waitForAuthSkipAppStart: () => waitForAuthAndLsp(page), | ||||
|     waitForPageLoad: () => waitForPageLoad(page), | ||||
|     waitForPageLoadWithRetry: () => waitForPageLoadWithRetry(page), | ||||
|     removeCurrentCode: () => removeCurrentCode(page), | ||||
|     sendCustomCmd: (cmd: EngineCommand) => sendCustomCmd(page, cmd), | ||||
|     updateCamPosition: async (xyz: [number, number, number]) => { | ||||
| @ -265,7 +287,7 @@ export async function getUtils(page: Page) { | ||||
|     getSegmentBodyCoords: async (locator: string, px = 30) => { | ||||
|       const overlay = page.locator(locator) | ||||
|       const bbox = await overlay | ||||
|         .boundingBox() | ||||
|         .boundingBox({ timeout: 5000 }) | ||||
|         .then((box) => ({ ...box, x: box?.x || 0, y: box?.y || 0 })) | ||||
|       const angle = Number(await overlay.getAttribute('data-overlay-angle')) | ||||
|       const angleXOffset = Math.cos(((angle - 180) * Math.PI) / 180) * px | ||||
| @ -471,10 +493,11 @@ export const doExport = async ( | ||||
|   page: Page | ||||
| ): Promise<Paths> => { | ||||
|   await page.getByRole('button', { name: APP_NAME }).click() | ||||
|   await expect( | ||||
|     page.getByRole('button', { name: 'Export', exact: false }) | ||||
|   ).toBeVisible() | ||||
|   await page.getByRole('button', { name: 'Export', exact: false }).click() | ||||
|   const exportMenuButton = page.getByRole('button', { | ||||
|     name: 'Export current part', | ||||
|   }) | ||||
|   await expect(exportMenuButton).toBeVisible() | ||||
|   await exportMenuButton.click() | ||||
|   await expect(page.getByTestId('command-bar')).toBeVisible() | ||||
|  | ||||
|   // Go through export via command bar | ||||
|  | ||||
							
								
								
									
										12
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						| @ -2,11 +2,11 @@ | ||||
|   "nodes": { | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1718470082, | ||||
|         "narHash": "sha256-u2F0MMYE+Efc+ocruTbtU/wWHuYHWcJafp5zJ++n/YE=", | ||||
|         "lastModified": 1721933792, | ||||
|         "narHash": "sha256-zYVwABlQnxpbaHMfX6Wt9jhyQstFYwN2XjleOJV3VVg=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "3027ba73dfef68eb555fc2fa97aed4e999e74f97", | ||||
|         "rev": "2122a9b35b35719ad9a395fe783eabb092df01b1", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
| @ -43,11 +43,11 @@ | ||||
|         "nixpkgs": "nixpkgs_2" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1718681902, | ||||
|         "narHash": "sha256-E/T7Ge6ayEQe7FVKMJqDBoHyLhRhjc6u9CmU8MyYfy0=", | ||||
|         "lastModified": 1721960387, | ||||
|         "narHash": "sha256-o21ax+745ETGXrcgc/yUuLw1SI77ymp3xEpJt+w/kks=", | ||||
|         "owner": "oxalica", | ||||
|         "repo": "rust-overlay", | ||||
|         "rev": "16c8ad83297c278eebe740dea5491c1708960dd1", | ||||
|         "rev": "9cbf831c5b20a53354fc12758abd05966f9f1699", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | ||||
| @ -57,6 +57,7 @@ | ||||
|             pkg-config | ||||
|  | ||||
|             nodejs_22 | ||||
|             yarn | ||||
|           ]) ++ pkgs.lib.optionals pkgs.stdenv.isDarwin (with pkgs; [ | ||||
|             libiconv  | ||||
|             darwin.apple_sdk.frameworks.Security | ||||
|  | ||||
							
								
								
									
										1983
									
								
								openapi/machine-api.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "untitled-app", | ||||
|   "version": "0.24.3", | ||||
|   "version": "0.24.8", | ||||
|   "private": true, | ||||
|   "dependencies": { | ||||
|     "@codemirror/autocomplete": "^6.17.0", | ||||
| @ -87,7 +87,8 @@ | ||||
|     "bump-jsons": "echo \"$(jq --arg v \"$VERSION\" '.version=$v' package.json --indent 2)\" > package.json && echo \"$(jq --arg v \"$VERSION\" '.version=$v' src-tauri/tauri.conf.json --indent 2)\" > src-tauri/tauri.conf.json", | ||||
|     "postinstall": "yarn xstate:typegen", | ||||
|     "xstate:typegen": "yarn xstate typegen \"src/**/*.ts?(x)\"", | ||||
|     "make:dev": "make dev" | ||||
|     "make:dev": "make dev", | ||||
|     "generate:machine-api": "npx openapi-typescript ./openapi/machine-api.json -o src/lib/machine-api.d.ts" | ||||
|   }, | ||||
|   "prettier": { | ||||
|     "trailingComma": "es5", | ||||
| @ -109,13 +110,14 @@ | ||||
|   }, | ||||
|   "devDependencies": { | ||||
|     "@babel/plugin-proposal-private-property-in-object": "^7.21.11", | ||||
|     "@babel/preset-env": "^7.24.3", | ||||
|     "@babel/preset-env": "^7.25.0", | ||||
|     "@iarna/toml": "^2.2.5", | ||||
|     "@lezer/generator": "^1.7.1", | ||||
|     "@playwright/test": "^1.45.1", | ||||
|     "@tauri-apps/cli": "==2.0.0-beta.13", | ||||
|     "@testing-library/jest-dom": "^5.14.1", | ||||
|     "@testing-library/react": "^15.0.2", | ||||
|     "@types/d3-force": "^3.0.10", | ||||
|     "@types/mocha": "^10.0.6", | ||||
|     "@types/node": "^18.19.31", | ||||
|     "@types/pixelmatch": "^5.2.6", | ||||
| @ -138,6 +140,7 @@ | ||||
|     "@wdio/spec-reporter": "^8.36.0", | ||||
|     "@xstate/cli": "^0.5.17", | ||||
|     "autoprefixer": "^10.4.19", | ||||
|     "d3-force": "^3.0.0", | ||||
|     "eslint": "^8.57.0", | ||||
|     "eslint-config-react-app": "^7.0.1", | ||||
|     "eslint-plugin-css-modules": "^2.12.0", | ||||
|  | ||||
| @ -42,8 +42,8 @@ function registerServerCapability( | ||||
|   serverCapabilities: ServerCapabilities, | ||||
|   registration: Registration | ||||
| ): ServerCapabilities | Error { | ||||
|   const serverCapabilitiesCopy = JSON.parse( | ||||
|     JSON.stringify(serverCapabilities) | ||||
|   const serverCapabilitiesCopy = structuredClone( | ||||
|     serverCapabilities | ||||
|   ) as IFlexibleServerCapabilities | ||||
|   const { method, registerOptions } = registration | ||||
|   const providerName = ServerCapabilitiesProviders[method] | ||||
| @ -54,7 +54,7 @@ function registerServerCapability( | ||||
|     } else { | ||||
|       serverCapabilitiesCopy[providerName] = Object.assign( | ||||
|         {}, | ||||
|         JSON.parse(JSON.stringify(registerOptions)) | ||||
|         structuredClone(registerOptions) | ||||
|       ) | ||||
|     } | ||||
|   } else { | ||||
| @ -68,8 +68,8 @@ function unregisterServerCapability( | ||||
|   serverCapabilities: ServerCapabilities, | ||||
|   unregistration: Unregistration | ||||
| ): ServerCapabilities { | ||||
|   const serverCapabilitiesCopy = JSON.parse( | ||||
|     JSON.stringify(serverCapabilities) | ||||
|   const serverCapabilitiesCopy = structuredClone( | ||||
|     serverCapabilities | ||||
|   ) as IFlexibleServerCapabilities | ||||
|   const { method } = unregistration | ||||
|   const providerName = ServerCapabilitiesProviders[method] | ||||
|  | ||||
| @ -1,5 +1,10 @@ | ||||
| import { Extension } from '@codemirror/state' | ||||
| import { hoverTooltip, tooltips, ViewPlugin } from '@codemirror/view' | ||||
| import { | ||||
|   hoverTooltip, | ||||
|   tooltips, | ||||
|   ViewPlugin, | ||||
|   EditorView, | ||||
| } from '@codemirror/view' | ||||
|  | ||||
| import { LanguageServerPlugin } from './lsp' | ||||
| import { offsetToPos } from './util' | ||||
| @ -17,6 +22,13 @@ export default function lspHoverExt( | ||||
|     }), | ||||
|     tooltips({ | ||||
|       position: 'absolute', | ||||
|       parent: document.body, | ||||
|     }), | ||||
|     EditorView.baseTheme({ | ||||
|       '.cm-tooltip': { | ||||
|         fontSize: '12px', | ||||
|         maxWidth: '400px', | ||||
|       }, | ||||
|     }), | ||||
|   ] | ||||
| } | ||||
|  | ||||
| @ -1,12 +0,0 @@ | ||||
| import { Extension } from '@codemirror/state' | ||||
| import { linter, forEachDiagnostic, Diagnostic } from '@codemirror/lint' | ||||
|  | ||||
| export default function lspLintExt(): Extension { | ||||
|   return linter((view) => { | ||||
|     let diagnostics: Diagnostic[] = [] | ||||
|     forEachDiagnostic(view.state, (d: Diagnostic, from: number, to: number) => { | ||||
|       diagnostics.push(d) | ||||
|     }) | ||||
|     return diagnostics | ||||
|   }) | ||||
| } | ||||
| @ -18,6 +18,7 @@ import type { | ||||
|   ViewPlugin, | ||||
| } from '@codemirror/view' | ||||
| import { EditorView, Tooltip } from '@codemirror/view' | ||||
| import { linter } from '@codemirror/lint' | ||||
|  | ||||
| import type { PublishDiagnosticsParams } from 'vscode-languageserver-protocol' | ||||
| import type * as LSP from 'vscode-languageserver-protocol' | ||||
| @ -35,7 +36,6 @@ import lspAutocompleteExt from './autocomplete' | ||||
| import lspHoverExt from './hover' | ||||
| import lspFormatExt from './format' | ||||
| import lspIndentExt from './indent' | ||||
| import lspLintExt from './lint' | ||||
| import lspSemanticTokensExt from './semantic-tokens' | ||||
|  | ||||
| const useLast = (values: readonly any[]) => values.reduce((_, v) => v, '') | ||||
| @ -214,6 +214,7 @@ export class LanguageServerPlugin implements PluginValue { | ||||
|     } | ||||
|  | ||||
|     if (!this.client.ready) return | ||||
|  | ||||
|     try { | ||||
|       // Update the state (not the editor) with the new code. | ||||
|       this.client.textDocumentDidChange({ | ||||
| @ -571,8 +572,8 @@ export class LanguageServerPluginSpec | ||||
|       lspFormatExt(plugin), | ||||
|       lspHoverExt(plugin), | ||||
|       lspIndentExt(), | ||||
|       lspLintExt(), | ||||
|       lspSemanticTokensExt(), | ||||
|       linter(null), | ||||
|     ] | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -18,11 +18,12 @@ export default defineConfig({ | ||||
|   /* Do not retry */ | ||||
|   retries: process.env.CI ? 0 : 0, | ||||
|   /* Different amount of parallelism on CI and local. */ | ||||
|   workers: process.env.CI ? 4 : 4, | ||||
|   workers: process.env.CI ? 1 : 4, | ||||
|   /* Reporter to use. See https://playwright.dev/docs/test-reporters */ | ||||
|   reporter: [ | ||||
|     [process.env.CI ? 'dot' : 'list'], | ||||
|     ['json', { outputFile: './test-results/report.json' }], | ||||
|     ['html'], | ||||
|   ], | ||||
|   /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ | ||||
|   use: { | ||||
|  | ||||
							
								
								
									
										289
									
								
								src-tauri/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						| @ -172,7 +172,9 @@ dependencies = [ | ||||
|  "kcl-lib", | ||||
|  "kittycad", | ||||
|  "log", | ||||
|  "mdns-sd", | ||||
|  "oauth2", | ||||
|  "reqwest 0.12.4", | ||||
|  "serde_json", | ||||
|  "tauri", | ||||
|  "tauri-build", | ||||
| @ -188,7 +190,7 @@ dependencies = [ | ||||
|  "tauri-plugin-shell", | ||||
|  "tauri-plugin-updater", | ||||
|  "tokio", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "url", | ||||
| ] | ||||
|  | ||||
| @ -286,7 +288,7 @@ dependencies = [ | ||||
|  "futures-io", | ||||
|  "futures-lite", | ||||
|  "parking", | ||||
|  "polling", | ||||
|  "polling 3.7.0", | ||||
|  "rustix", | ||||
|  "slab", | ||||
|  "tracing", | ||||
| @ -332,7 +334,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -367,7 +369,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -407,7 +409,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -550,7 +552,7 @@ dependencies = [ | ||||
|  "proc-macro-crate 3.1.0", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "syn_derive", | ||||
| ] | ||||
|  | ||||
| @ -648,6 +650,12 @@ version = "1.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" | ||||
|  | ||||
| [[package]] | ||||
| name = "byteorder-lite" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" | ||||
|  | ||||
| [[package]] | ||||
| name = "bytes" | ||||
| version = "1.6.0" | ||||
| @ -721,7 +729,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -792,9 +800,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "clap" | ||||
| version = "4.5.9" | ||||
| version = "4.5.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" | ||||
| checksum = "0fbb260a053428790f3de475e304ff84cdbc4face759ea7a3e64c1edd938a7fc" | ||||
| dependencies = [ | ||||
|  "clap_builder", | ||||
|  "clap_derive", | ||||
| @ -802,9 +810,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "clap_builder" | ||||
| version = "4.5.9" | ||||
| version = "4.5.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" | ||||
| checksum = "64b17d7ea74e9f833c7dbf2cbe4fb12ff26783eda4782a8975b72f895c9b4d99" | ||||
| dependencies = [ | ||||
|  "anstream", | ||||
|  "anstyle", | ||||
| @ -816,14 +824,14 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "clap_derive" | ||||
| version = "4.5.8" | ||||
| version = "4.5.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" | ||||
| checksum = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0" | ||||
| dependencies = [ | ||||
|  "heck 0.5.0", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1073,7 +1081,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" | ||||
| dependencies = [ | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1083,7 +1091,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" | ||||
| dependencies = [ | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1107,7 +1115,7 @@ dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "strsim 0.10.0", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1118,7 +1126,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" | ||||
| dependencies = [ | ||||
|  "darling_core", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1179,7 +1187,7 @@ checksum = "4078275de501a61ceb9e759d37bdd3d7210e654dbc167ac1a3678ef4435ed57b" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "synstructure", | ||||
| ] | ||||
|  | ||||
| @ -1206,7 +1214,7 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "derive-docs" | ||||
| version = "0.1.20" | ||||
| version = "0.1.21" | ||||
| dependencies = [ | ||||
|  "Inflector", | ||||
|  "convert_case 0.6.0", | ||||
| @ -1216,7 +1224,7 @@ dependencies = [ | ||||
|  "regex", | ||||
|  "serde", | ||||
|  "serde_tokenstream", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1227,7 +1235,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1288,7 +1296,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1320,7 +1328,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1383,7 +1391,7 @@ dependencies = [ | ||||
|  "cc", | ||||
|  "memchr", | ||||
|  "rustc_version", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "vswhom", | ||||
|  "winreg 0.52.0", | ||||
| ] | ||||
| @ -1427,7 +1435,7 @@ checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1564,6 +1572,17 @@ dependencies = [ | ||||
|  "miniz_oxide", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "flume" | ||||
| version = "0.11.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" | ||||
| dependencies = [ | ||||
|  "futures-core", | ||||
|  "futures-sink", | ||||
|  "spin", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "fnv" | ||||
| version = "1.0.7" | ||||
| @ -1588,7 +1607,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1704,7 +1723,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -1980,7 +1999,7 @@ dependencies = [ | ||||
|  "proc-macro-error", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -2008,7 +2027,7 @@ dependencies = [ | ||||
|  "inflections", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -2083,7 +2102,7 @@ dependencies = [ | ||||
|  "proc-macro-error", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -2399,6 +2418,28 @@ dependencies = [ | ||||
|  "unicode-normalization", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "if-addrs" | ||||
| version = "0.10.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "cabb0019d51a643781ff15c9c8a3e5dedc365c47211270f4e8f82812fedd8f0a" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
|  "windows-sys 0.48.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "image" | ||||
| version = "0.25.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "99314c8a2152b8ddb211f924cdae532d8c5e4c8bb54728e12fff1b0cd5963a10" | ||||
| dependencies = [ | ||||
|  "bytemuck", | ||||
|  "byteorder-lite", | ||||
|  "num-traits", | ||||
|  "png", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "indexmap" | ||||
| version = "1.9.3" | ||||
| @ -2571,7 +2612,7 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "kcl-lib" | ||||
| version = "0.1.72" | ||||
| version = "0.2.3" | ||||
| dependencies = [ | ||||
|  "anyhow", | ||||
|  "approx", | ||||
| @ -2581,6 +2622,7 @@ dependencies = [ | ||||
|  "bson", | ||||
|  "chrono", | ||||
|  "clap", | ||||
|  "convert_case 0.6.0", | ||||
|  "dashmap 6.0.1", | ||||
|  "databake", | ||||
|  "derive-docs", | ||||
| @ -2588,6 +2630,7 @@ dependencies = [ | ||||
|  "futures", | ||||
|  "git_rev", | ||||
|  "gltf-json", | ||||
|  "image", | ||||
|  "js-sys", | ||||
|  "kittycad", | ||||
|  "lazy_static", | ||||
| @ -2602,10 +2645,11 @@ dependencies = [ | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
|  "tokio-tungstenite", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "tower-lsp", | ||||
|  "ts-rs", | ||||
|  "url", | ||||
|  "urlencoding", | ||||
|  "uuid", | ||||
|  "validator", | ||||
|  "wasm-bindgen", | ||||
| @ -2628,9 +2672,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "kittycad" | ||||
| version = "0.3.7" | ||||
| version = "0.3.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e1777b503442fa4666564cc3ab237d456df853a09648a4b2bb09622d25d021a5" | ||||
| checksum = "36b87a9cca545825ba18005c1944b8525fac28867d99984178bf22c79fb5ec25" | ||||
| dependencies = [ | ||||
|  "anyhow", | ||||
|  "async-trait", | ||||
| @ -2875,6 +2919,19 @@ version = "0.7.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" | ||||
|  | ||||
| [[package]] | ||||
| name = "mdns-sd" | ||||
| version = "0.11.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "807457e493076539ff8f202806f9dc2eaa9f13f69701da7ed38eec7a9afd1616" | ||||
| dependencies = [ | ||||
|  "flume", | ||||
|  "if-addrs", | ||||
|  "log", | ||||
|  "polling 2.8.0", | ||||
|  "socket2", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "memchr" | ||||
| version = "2.7.2" | ||||
| @ -2930,13 +2987,14 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "mio" | ||||
| version = "0.8.11" | ||||
| version = "1.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" | ||||
| checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" | ||||
| dependencies = [ | ||||
|  "hermit-abi", | ||||
|  "libc", | ||||
|  "wasi 0.11.0+wasi-snapshot-preview1", | ||||
|  "windows-sys 0.48.0", | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -3067,16 +3125,6 @@ dependencies = [ | ||||
|  "autocfg", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "num_cpus" | ||||
| version = "1.16.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" | ||||
| dependencies = [ | ||||
|  "hermit-abi", | ||||
|  "libc", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "num_enum" | ||||
| version = "0.5.11" | ||||
| @ -3377,7 +3425,7 @@ dependencies = [ | ||||
|  "regex", | ||||
|  "regex-syntax 0.8.3", | ||||
|  "structmeta", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -3496,7 +3544,7 @@ dependencies = [ | ||||
|  "phf_shared 0.11.2", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -3528,9 +3576,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "phonenumber" | ||||
| version = "0.3.5+8.13.36" | ||||
| version = "0.3.6+8.13.36" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f174c8db59b620032bd52b655fc97000458850fec0db35fcd4e802b668517ec0" | ||||
| checksum = "11756237b57b8cc5e97dc8b1e70ea436324d30e7075de63b14fd15073a8f692a" | ||||
| dependencies = [ | ||||
|  "bincode", | ||||
|  "either", | ||||
| @ -3564,7 +3612,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -3623,6 +3671,22 @@ dependencies = [ | ||||
|  "miniz_oxide", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "polling" | ||||
| version = "2.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" | ||||
| dependencies = [ | ||||
|  "autocfg", | ||||
|  "bitflags 1.3.2", | ||||
|  "cfg-if", | ||||
|  "concurrent-queue", | ||||
|  "libc", | ||||
|  "log", | ||||
|  "pin-project-lite", | ||||
|  "windows-sys 0.48.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "polling" | ||||
| version = "3.7.0" | ||||
| @ -4438,7 +4502,7 @@ dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "serde_derive_internals", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4558,7 +4622,7 @@ checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4569,17 +4633,18 @@ checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "serde_json" | ||||
| version = "1.0.120" | ||||
| version = "1.0.122" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5" | ||||
| checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" | ||||
| dependencies = [ | ||||
|  "indexmap 2.2.6", | ||||
|  "itoa 1.0.11", | ||||
|  "memchr", | ||||
|  "ryu", | ||||
|  "serde", | ||||
| ] | ||||
| @ -4602,14 +4667,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "serde_spanned" | ||||
| version = "0.6.6" | ||||
| version = "0.6.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" | ||||
| checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
| @ -4623,7 +4688,7 @@ dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "serde", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4665,7 +4730,7 @@ dependencies = [ | ||||
|  "darling", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4858,6 +4923,9 @@ name = "spin" | ||||
| version = "0.9.8" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" | ||||
| dependencies = [ | ||||
|  "lock_api", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "stable_deref_trait" | ||||
| @ -4933,7 +5001,7 @@ dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "structmeta-derive", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4944,7 +5012,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4966,7 +5034,7 @@ dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "rustversion", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -4999,9 +5067,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "syn" | ||||
| version = "2.0.71" | ||||
| version = "2.0.72" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" | ||||
| checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
| @ -5017,7 +5085,7 @@ dependencies = [ | ||||
|  "proc-macro-error", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -5034,7 +5102,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -5076,7 +5144,7 @@ dependencies = [ | ||||
|  "cfg-expr", | ||||
|  "heck 0.5.0", | ||||
|  "pkg-config", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "version-compare", | ||||
| ] | ||||
|  | ||||
| @ -5229,7 +5297,7 @@ dependencies = [ | ||||
|  "serde_json", | ||||
|  "tauri-utils", | ||||
|  "tauri-winres", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "walkdir", | ||||
| ] | ||||
|  | ||||
| @ -5251,7 +5319,7 @@ dependencies = [ | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "sha2", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "tauri-utils", | ||||
|  "thiserror", | ||||
|  "time", | ||||
| @ -5269,7 +5337,7 @@ dependencies = [ | ||||
|  "heck 0.5.0", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "tauri-codegen", | ||||
|  "tauri-utils", | ||||
| ] | ||||
| @ -5287,7 +5355,7 @@ dependencies = [ | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "tauri-utils", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "walkdir", | ||||
| ] | ||||
|  | ||||
| @ -5571,7 +5639,7 @@ dependencies = [ | ||||
|  "serde_with", | ||||
|  "swift-rs", | ||||
|  "thiserror", | ||||
|  "toml 0.8.14", | ||||
|  "toml 0.8.19", | ||||
|  "url", | ||||
|  "urlpattern", | ||||
|  "walkdir", | ||||
| @ -5627,22 +5695,22 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" | ||||
|  | ||||
| [[package]] | ||||
| name = "thiserror" | ||||
| version = "1.0.62" | ||||
| version = "1.0.63" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb" | ||||
| checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" | ||||
| dependencies = [ | ||||
|  "thiserror-impl", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "thiserror-impl" | ||||
| version = "1.0.62" | ||||
| version = "1.0.63" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c" | ||||
| checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -5714,33 +5782,32 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" | ||||
|  | ||||
| [[package]] | ||||
| name = "tokio" | ||||
| version = "1.38.0" | ||||
| version = "1.39.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" | ||||
| checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" | ||||
| dependencies = [ | ||||
|  "backtrace", | ||||
|  "bytes", | ||||
|  "libc", | ||||
|  "mio", | ||||
|  "num_cpus", | ||||
|  "parking_lot 0.12.1", | ||||
|  "pin-project-lite", | ||||
|  "signal-hook-registry", | ||||
|  "socket2", | ||||
|  "tokio-macros", | ||||
|  "tracing", | ||||
|  "windows-sys 0.48.0", | ||||
|  "windows-sys 0.52.0", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "tokio-macros" | ||||
| version = "2.3.0" | ||||
| version = "2.4.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" | ||||
| checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -5819,21 +5886,21 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "toml" | ||||
| version = "0.8.14" | ||||
| version = "0.8.19" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6f49eb2ab21d2f26bd6db7bf383edc527a7ebaee412d17af4d40fdccd442f335" | ||||
| checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
|  "serde_spanned", | ||||
|  "toml_datetime", | ||||
|  "toml_edit 0.22.14", | ||||
|  "toml_edit 0.22.20", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "toml_datetime" | ||||
| version = "0.6.6" | ||||
| version = "0.6.8" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4badfd56924ae69bcc9039335b2e017639ce3f9b001c393c1b2d1ef846ce2cbf" | ||||
| checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
| @ -5875,15 +5942,15 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "toml_edit" | ||||
| version = "0.22.14" | ||||
| version = "0.22.20" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f21c7aaf97f1bd9ca9d4f9e73b0a6c74bd5afef56f2bc931943a6e1c37e04e38" | ||||
| checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d" | ||||
| dependencies = [ | ||||
|  "indexmap 2.2.6", | ||||
|  "serde", | ||||
|  "serde_spanned", | ||||
|  "toml_datetime", | ||||
|  "winnow 0.6.6", | ||||
|  "winnow 0.6.18", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -5940,7 +6007,7 @@ checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -5969,7 +6036,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -6099,7 +6166,7 @@ checksum = "c88cc88fd23b5a04528f3a8436024f20010a16ec18eb23c164b1242f65860130" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "termcolor", | ||||
| ] | ||||
|  | ||||
| @ -6247,6 +6314,12 @@ dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "urlencoding" | ||||
| version = "2.1.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" | ||||
|  | ||||
| [[package]] | ||||
| name = "urlpattern" | ||||
| version = "0.2.0" | ||||
| @ -6316,7 +6389,7 @@ dependencies = [ | ||||
|  "proc-macro-error", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -6415,7 +6488,7 @@ dependencies = [ | ||||
|  "once_cell", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "wasm-bindgen-shared", | ||||
| ] | ||||
|  | ||||
| @ -6449,7 +6522,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
|  "wasm-bindgen-backend", | ||||
|  "wasm-bindgen-shared", | ||||
| ] | ||||
| @ -6590,7 +6663,7 @@ checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -6696,7 +6769,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -6707,7 +6780,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| @ -6954,9 +7027,9 @@ dependencies = [ | ||||
|  | ||||
| [[package]] | ||||
| name = "winnow" | ||||
| version = "0.6.6" | ||||
| version = "0.6.18" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f0c976aaaa0e1f90dbb21e9587cdaf1d9679a1cde8875c0d6bd83ab96a208352" | ||||
| checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f" | ||||
| dependencies = [ | ||||
|  "memchr", | ||||
| ] | ||||
| @ -7159,7 +7232,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn 2.0.71", | ||||
|  "syn 2.0.72", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
|  | ||||
| @ -15,10 +15,12 @@ tauri-build = { version = "2.0.0-beta.18", features = [] } | ||||
|  | ||||
| [dependencies] | ||||
| anyhow = "1" | ||||
| kcl-lib = { version = "0.1.53", path = "../src/wasm-lib/kcl" } | ||||
| kcl-lib = { version = "0.2", path = "../src/wasm-lib/kcl" } | ||||
| kittycad = "0.3.7" | ||||
| log = "0.4.21" | ||||
| mdns-sd = "0.11.1" | ||||
| oauth2 = "4.4.2" | ||||
| reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] } | ||||
| serde_json = "1.0" | ||||
| tauri = { version = "2.0.0-beta.23", features = [ "devtools", "unstable"] } | ||||
| tauri-plugin-cli = { version = "2.0.0-beta.7" } | ||||
|  | ||||
| @ -218,7 +218,7 @@ async fn parse_project_route(configuration: Configuration, route: &str) -> Resul | ||||
|  | ||||
| #[tauri::command] | ||||
| async fn read_dir_recursive(path: &str) -> Result<FileEntry, InvokeError> { | ||||
|     kcl_lib::settings::utils::walk_dir(&Path::new(path).to_path_buf()) | ||||
|     kcl_lib::settings::utils::walk_dir(Path::new(path).to_path_buf()) | ||||
|         .await | ||||
|         .map_err(InvokeError::from_anyhow) | ||||
| } | ||||
| @ -370,6 +370,70 @@ fn show_in_folder(app: tauri::AppHandle, path: &str) -> Result<(), InvokeError> | ||||
|     Ok(()) | ||||
| } | ||||
|  | ||||
| const SERVICE_NAME: &str = "_machine-api._tcp.local."; | ||||
|  | ||||
| async fn find_machine_api() -> Result<Option<String>> { | ||||
|     println!("Looking for machine API..."); | ||||
|     // Timeout if no response is received after 5 seconds. | ||||
|     let timeout_duration = std::time::Duration::from_secs(5); | ||||
|  | ||||
|     let mdns = mdns_sd::ServiceDaemon::new()?; | ||||
|  | ||||
|     // Browse for a service type. | ||||
|     let receiver = mdns.browse(SERVICE_NAME)?; | ||||
|     let resp = tokio::time::timeout( | ||||
|         timeout_duration, | ||||
|         tokio::spawn(async move { | ||||
|             while let Ok(event) = receiver.recv() { | ||||
|                 if let mdns_sd::ServiceEvent::ServiceResolved(info) = event { | ||||
|                     if let Some(addr) = info.get_addresses().iter().next() { | ||||
|                         return Some(format!("{}:{}", addr, info.get_port())); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|             None | ||||
|         }), | ||||
|     ) | ||||
|     .await; | ||||
|  | ||||
|     // Shut down. | ||||
|     mdns.shutdown()?; | ||||
|  | ||||
|     let Ok(Ok(Some(addr))) = resp else { | ||||
|         return Ok(None); | ||||
|     }; | ||||
|  | ||||
|     Ok(Some(addr)) | ||||
| } | ||||
|  | ||||
| #[tauri::command] | ||||
| async fn get_machine_api_ip() -> Result<Option<String>, InvokeError> { | ||||
|     let machine_api = find_machine_api().await.map_err(InvokeError::from_anyhow)?; | ||||
|  | ||||
|     Ok(machine_api) | ||||
| } | ||||
|  | ||||
| #[tauri::command] | ||||
| async fn list_machines() -> Result<String, InvokeError> { | ||||
|     let machine_api = find_machine_api().await.map_err(InvokeError::from_anyhow)?; | ||||
|  | ||||
|     let Some(machine_api) = machine_api else { | ||||
|         // Empty array. | ||||
|         return Ok("[]".to_string()); | ||||
|     }; | ||||
|  | ||||
|     let client = reqwest::Client::new(); | ||||
|     let response = client | ||||
|         .get(format!("http://{}/machines", machine_api)) | ||||
|         .send() | ||||
|         .await | ||||
|         .map_err(|e| InvokeError::from_anyhow(e.into()))?; | ||||
|  | ||||
|     let text = response.text().await.map_err(|e| InvokeError::from_anyhow(e.into()))?; | ||||
|     Ok(text) | ||||
| } | ||||
|  | ||||
| #[allow(dead_code)] | ||||
| fn open_url_sync(app: &tauri::AppHandle, url: &url::Url) { | ||||
|     log::debug!("Opening URL: {:?}", url); | ||||
| @ -417,6 +481,8 @@ fn main() -> Result<()> { | ||||
|             read_project_settings_file, | ||||
|             write_project_settings_file, | ||||
|             rename_project_directory, | ||||
|             get_machine_api_ip, | ||||
|             list_machines | ||||
|         ]) | ||||
|         .plugin(tauri_plugin_cli::init()) | ||||
|         .plugin(tauri_plugin_deep_link::init()) | ||||
|  | ||||
| @ -80,5 +80,5 @@ | ||||
|     } | ||||
|   }, | ||||
|   "productName": "Zoo Modeling App", | ||||
|   "version": "0.24.3" | ||||
|   "version": "0.24.8" | ||||
| } | ||||
|  | ||||
							
								
								
									
										22
									
								
								src/App.tsx
									
									
									
									
									
								
							
							
						
						| @ -2,7 +2,7 @@ import { MouseEventHandler, useEffect, useMemo, useRef } from 'react' | ||||
| import { uuidv4 } from 'lib/utils' | ||||
| import { useHotKeyListener } from './hooks/useHotKeyListener' | ||||
| import { Stream } from './components/Stream' | ||||
| import { EngineCommand } from './lang/std/engineConnection' | ||||
| import { EngineCommand } from 'lang/std/artifactGraph' | ||||
| import { throttle } from './lib/utils' | ||||
| import { AppHeader } from './components/AppHeader' | ||||
| import { useHotkeys } from 'react-hotkeys-hook' | ||||
| @ -95,16 +95,16 @@ export function App() { | ||||
|     }) | ||||
|  | ||||
|     const newCmdId = uuidv4() | ||||
|     if (context.store?.buttonDownInStream === undefined) { | ||||
|       debounceSocketSend({ | ||||
|         type: 'modeling_cmd_req', | ||||
|         cmd: { | ||||
|           type: 'highlight_set_entity', | ||||
|           selected_at_window: { x, y }, | ||||
|         }, | ||||
|         cmd_id: newCmdId, | ||||
|       }) | ||||
|     } | ||||
|     if (state.matches('idle.showPlanes')) return | ||||
|     if (context.store?.buttonDownInStream !== undefined) return | ||||
|     debounceSocketSend({ | ||||
|       type: 'modeling_cmd_req', | ||||
|       cmd: { | ||||
|         type: 'highlight_set_entity', | ||||
|         selected_at_window: { x, y }, | ||||
|       }, | ||||
|       cmd_id: newCmdId, | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   return ( | ||||
|  | ||||
							
								
								
									
										671
									
								
								src/Toolbar.tsx
									
									
									
									
									
								
							
							
						
						| @ -1,4 +1,4 @@ | ||||
| import { WheelEvent, useRef, useMemo } from 'react' | ||||
| import { useRef, useMemo, memo } from 'react' | ||||
| import { isCursorInSketchCommandRange } from 'lang/util' | ||||
| import { engineCommandManager, kclManager } from 'lib/singletons' | ||||
| import { useModelingContext } from 'hooks/useModelingContext' | ||||
| @ -12,11 +12,14 @@ import { ActionButtonDropdown } from 'components/ActionButtonDropdown' | ||||
| import { useHotkeys } from 'react-hotkeys-hook' | ||||
| import Tooltip from 'components/Tooltip' | ||||
| import { useAppState } from 'AppState' | ||||
| import { CustomIcon } from 'components/CustomIcon' | ||||
| import { | ||||
|   canRectangleTool, | ||||
|   isEditingExistingSketch, | ||||
| } from 'machines/modelingMachine' | ||||
| import { DEV } from 'env' | ||||
|   toolbarConfig, | ||||
|   ToolbarItem, | ||||
|   ToolbarItemCallbackProps, | ||||
|   ToolbarItemResolved, | ||||
|   ToolbarModeName, | ||||
| } from 'lib/toolbar' | ||||
|  | ||||
| export function Toolbar({ | ||||
|   className = '', | ||||
| @ -25,20 +28,22 @@ export function Toolbar({ | ||||
|   const { state, send, context } = useModelingContext() | ||||
|   const { commandBarSend } = useCommandsContext() | ||||
|   const iconClassName = | ||||
|     'group-disabled:text-chalkboard-50 group-enabled:group-hover:!text-primary dark:group-enabled:group-hover:!text-inherit group-pressed:!text-chalkboard-10 group-ui-open:!text-chalkboard-10 dark:group-ui-open:!text-chalkboard-10' | ||||
|   const bgClassName = | ||||
|     'group-disabled:!bg-transparent group-enabled:group-hover:bg-primary/10 dark:group-enabled:group-hover:bg-primary group-pressed:bg-primary group-ui-open:bg-primary' | ||||
|   const buttonClassName = | ||||
|     'bg-chalkboard-10 dark:bg-chalkboard-100 enabled:hover:bg-chalkboard-10 dark:enabled:hover:bg-chalkboard-100 pressed:!border-primary ui-open:!border-primary' | ||||
|   const pathId = useMemo(() => { | ||||
|     'group-disabled:text-chalkboard-50 !text-inherit dark:group-enabled:group-hover:!text-inherit' | ||||
|   const bgClassName = '!bg-transparent' | ||||
|   const buttonBgClassName = | ||||
|     'bg-chalkboard-transparent dark:bg-transparent disabled:bg-transparent dark:disabled:bg-transparent enabled:hover:bg-chalkboard-10 dark:enabled:hover:bg-chalkboard-100 pressed:!bg-primary pressed:enabled:hover:!text-chalkboard-10' | ||||
|   const buttonBorderClassName = | ||||
|     '!border-transparent hover:!border-chalkboard-20 dark:enabled:hover:!border-primary pressed:!border-primary ui-open:!border-primary' | ||||
|  | ||||
|   const sketchPathId = useMemo(() => { | ||||
|     if (!isSingleCursorInPipe(context.selectionRanges, kclManager.ast)) { | ||||
|       return false | ||||
|     } | ||||
|     return isCursorInSketchCommandRange( | ||||
|       engineCommandManager.artifactMap, | ||||
|       engineCommandManager.artifactGraph, | ||||
|       context.selectionRanges | ||||
|     ) | ||||
|   }, [engineCommandManager.artifactMap, context.selectionRanges]) | ||||
|   }, [engineCommandManager.artifactGraph, context.selectionRanges]) | ||||
|  | ||||
|   const toolbarButtonsRef = useRef<HTMLUListElement>(null) | ||||
|   const { overallState } = useNetworkContext() | ||||
| @ -51,401 +56,295 @@ export function Toolbar({ | ||||
|     isExecuting || | ||||
|     !isStreamReady | ||||
|  | ||||
|   const disableLineButton = | ||||
|     state.matches('Sketch.Rectangle tool.Awaiting second corner') || | ||||
|     disableAllButtons | ||||
|   useHotkeys( | ||||
|     'l', | ||||
|     () => | ||||
|       state.matches('Sketch.Line tool') | ||||
|         ? send('CancelSketch') | ||||
|         : send({ | ||||
|             type: 'change tool', | ||||
|             data: { tool: 'line' }, | ||||
|           }), | ||||
|     { enabled: !disableLineButton, scopes: ['sketch'] } | ||||
|   ) | ||||
|   const disableTangentialArc = | ||||
|     (!isEditingExistingSketch(context) && | ||||
|       !state.matches('Sketch.Tangential arc to')) || | ||||
|     disableAllButtons | ||||
|   useHotkeys( | ||||
|     'a', | ||||
|     () => | ||||
|       state.matches('Sketch.Tangential arc to') | ||||
|         ? send('CancelSketch') | ||||
|         : send({ | ||||
|             type: 'change tool', | ||||
|             data: { tool: 'tangentialArc' }, | ||||
|           }), | ||||
|     { enabled: !disableTangentialArc, scopes: ['sketch'] } | ||||
|   ) | ||||
|   const disableRectangle = | ||||
|     (!canRectangleTool(context) && !state.matches('Sketch.Rectangle tool')) || | ||||
|     disableAllButtons | ||||
|   useHotkeys( | ||||
|     'r', | ||||
|     () => | ||||
|       state.matches('Sketch.Rectangle tool') | ||||
|         ? send('CancelSketch') | ||||
|         : send({ | ||||
|             type: 'change tool', | ||||
|             data: { tool: 'rectangle' }, | ||||
|           }), | ||||
|     { enabled: !disableRectangle, scopes: ['sketch'] } | ||||
|   ) | ||||
|   useHotkeys( | ||||
|     's', | ||||
|     () => | ||||
|       state.nextEvents.includes('Enter sketch') && pathId | ||||
|         ? send({ type: 'Enter sketch' }) | ||||
|         : send({ type: 'Enter sketch', data: { forceNewSketch: true } }), | ||||
|     { enabled: !disableAllButtons, scopes: ['modeling'] } | ||||
|   ) | ||||
|   useHotkeys( | ||||
|     'esc', | ||||
|     () => | ||||
|       ['Sketch no face', 'Sketch.SketchIdle'].some(state.matches) | ||||
|         ? send('Cancel') | ||||
|         : send('CancelSketch'), | ||||
|     { enabled: !disableAllButtons, scopes: ['sketch'] } | ||||
|   ) | ||||
|   useHotkeys( | ||||
|     'e', | ||||
|     () => | ||||
|       commandBarSend({ | ||||
|         type: 'Find and select command', | ||||
|         data: { name: 'Extrude', groupId: 'modeling' }, | ||||
|       }), | ||||
|     { enabled: !disableAllButtons, scopes: ['modeling'] } | ||||
|   ) | ||||
|   const disableFillet = !state.can('Fillet') || disableAllButtons | ||||
|   useHotkeys( | ||||
|     'f', | ||||
|     () => | ||||
|       commandBarSend({ | ||||
|         type: 'Find and select command', | ||||
|         data: { name: 'Fillet', groupId: 'modeling' }, | ||||
|       }), | ||||
|     { enabled: !disableFillet, scopes: ['modeling'] } | ||||
|   const currentMode = | ||||
|     (Object.entries(toolbarConfig).find(([_, mode]) => | ||||
|       mode.check(state) | ||||
|     )?.[0] as ToolbarModeName) || 'modeling' | ||||
|  | ||||
|   /** These are the props that will be passed to the callbacks in the toolbar config | ||||
|    * They are memoized to prevent unnecessary re-renders, | ||||
|    * but they still get a lot of churn from the state machine | ||||
|    * so I think there's a lot of room for improvement here | ||||
|    */ | ||||
|   const configCallbackProps: ToolbarItemCallbackProps = useMemo( | ||||
|     () => ({ | ||||
|       modelingStateMatches: state.matches, | ||||
|       modelingSend: send, | ||||
|       commandBarSend, | ||||
|       sketchPathId, | ||||
|     }), | ||||
|     [state.matches, send, commandBarSend, sketchPathId] | ||||
|   ) | ||||
|  | ||||
|   function handleToolbarButtonsWheelEvent(ev: WheelEvent<HTMLSpanElement>) { | ||||
|     const span = toolbarButtonsRef.current | ||||
|     if (!span) { | ||||
|       return | ||||
|   /** | ||||
|    * Resolve all the callbacks and values for the current mode, | ||||
|    * so we don't need to worry about the other modes | ||||
|    */ | ||||
|   const currentModeItems: ( | ||||
|     | ToolbarItemResolved | ||||
|     | ToolbarItemResolved[] | ||||
|     | 'break' | ||||
|   )[] = useMemo(() => { | ||||
|     return toolbarConfig[currentMode].items.map((maybeIconConfig) => { | ||||
|       if (maybeIconConfig === 'break') { | ||||
|         return 'break' | ||||
|       } else if (Array.isArray(maybeIconConfig)) { | ||||
|         return maybeIconConfig.map(resolveItemConfig) | ||||
|       } else { | ||||
|         return resolveItemConfig(maybeIconConfig) | ||||
|       } | ||||
|     }) | ||||
|  | ||||
|     function resolveItemConfig( | ||||
|       maybeIconConfig: ToolbarItem | ||||
|     ): ToolbarItemResolved { | ||||
|       return { | ||||
|         ...maybeIconConfig, | ||||
|         title: | ||||
|           typeof maybeIconConfig.title === 'string' | ||||
|             ? maybeIconConfig.title | ||||
|             : maybeIconConfig.title(configCallbackProps), | ||||
|         description: maybeIconConfig.description, | ||||
|         links: maybeIconConfig.links || [], | ||||
|         isActive: maybeIconConfig.isActive?.(state), | ||||
|         hotkey: | ||||
|           typeof maybeIconConfig.hotkey === 'string' | ||||
|             ? maybeIconConfig.hotkey | ||||
|             : maybeIconConfig.hotkey?.(state), | ||||
|         disabled: | ||||
|           disableAllButtons || | ||||
|           maybeIconConfig.status !== 'available' || | ||||
|           maybeIconConfig.disabled?.(state) === true, | ||||
|         disableHotkey: maybeIconConfig.disableHotkey?.(state), | ||||
|         status: maybeIconConfig.status, | ||||
|       } | ||||
|     } | ||||
|   }, [currentMode, disableAllButtons, configCallbackProps]) | ||||
|  | ||||
|     span.scrollLeft = span.scrollLeft += ev.deltaY | ||||
|   } | ||||
|   const nextEvents = useMemo(() => state.nextEvents, [state.nextEvents]) | ||||
|   const splitMenuItems = useMemo( | ||||
|     () => | ||||
|       nextEvents | ||||
|         .filter( | ||||
|           (eventName) => | ||||
|             eventName.includes('Make segment') || | ||||
|             eventName.includes('Constrain') | ||||
|         ) | ||||
|         .sort((a, b) => { | ||||
|           const aisEnabled = nextEvents | ||||
|             .filter((event) => state.can(event as any)) | ||||
|             .includes(a) | ||||
|           const bIsEnabled = nextEvents | ||||
|             .filter((event) => state.can(event as any)) | ||||
|             .includes(b) | ||||
|           if (aisEnabled && !bIsEnabled) { | ||||
|             return -1 | ||||
|           } | ||||
|           if (!aisEnabled && bIsEnabled) { | ||||
|             return 1 | ||||
|           } | ||||
|           return 0 | ||||
|         }) | ||||
|         .map((eventName) => ({ | ||||
|           label: eventName | ||||
|             .replace('Make segment ', '') | ||||
|             .replace('Constrain ', ''), | ||||
|           onClick: () => send(eventName), | ||||
|           disabled: | ||||
|             !nextEvents | ||||
|               .filter((event) => state.can(event as any)) | ||||
|               .includes(eventName) || disableAllButtons, | ||||
|         })), | ||||
|  | ||||
|     [JSON.stringify(nextEvents), state] | ||||
|   ) | ||||
|   return ( | ||||
|     <menu className="max-w-full whitespace-nowrap rounded px-1.5 py-0.5 backdrop-blur-sm bg-chalkboard-10/80 dark:bg-chalkboard-110/70 relative"> | ||||
|     <menu className="max-w-full whitespace-nowrap rounded-b px-2 py-1 bg-chalkboard-10 dark:bg-chalkboard-90 relative border border-chalkboard-20 dark:border-chalkboard-80 border-t-0 shadow-sm"> | ||||
|       <ul | ||||
|         {...props} | ||||
|         ref={toolbarButtonsRef} | ||||
|         onWheel={handleToolbarButtonsWheelEvent} | ||||
|         className={'m-0 py-1 rounded-l-sm flex gap-2 items-center ' + className} | ||||
|         style={{ scrollbarWidth: 'thin' }} | ||||
|         className={ | ||||
|           'has-[[aria-expanded=true]]:!pointer-events-none m-0 py-1 rounded-l-sm flex gap-1.5 items-center ' + | ||||
|           className | ||||
|         } | ||||
|       > | ||||
|         {nextEvents.includes('Enter sketch') && ( | ||||
|           <li className="contents"> | ||||
|             <ActionButton | ||||
|               className={buttonClassName} | ||||
|               Element="button" | ||||
|               onClick={() => | ||||
|                 send({ type: 'Enter sketch', data: { forceNewSketch: true } }) | ||||
|               } | ||||
|               iconStart={{ | ||||
|                 icon: 'sketch', | ||||
|                 iconClassName, | ||||
|                 bgClassName, | ||||
|               }} | ||||
|               disabled={disableAllButtons} | ||||
|             > | ||||
|               <span data-testid="start-sketch">Start Sketch</span> | ||||
|               <Tooltip | ||||
|                 delay={1250} | ||||
|                 position="bottom" | ||||
|                 className="!px-2 !text-xs" | ||||
|               > | ||||
|                 Shortcut: S | ||||
|               </Tooltip> | ||||
|             </ActionButton> | ||||
|           </li> | ||||
|         )} | ||||
|         {nextEvents.includes('Enter sketch') && pathId && ( | ||||
|           <li className="contents"> | ||||
|             <ActionButton | ||||
|               className={buttonClassName} | ||||
|               Element="button" | ||||
|               onClick={() => send({ type: 'Enter sketch' })} | ||||
|               iconStart={{ | ||||
|                 icon: 'sketch', | ||||
|                 iconClassName, | ||||
|                 bgClassName, | ||||
|               }} | ||||
|               disabled={disableAllButtons} | ||||
|             > | ||||
|               Edit Sketch | ||||
|               <Tooltip | ||||
|                 delay={1250} | ||||
|                 position="bottom" | ||||
|                 className="!px-2 !text-xs" | ||||
|               > | ||||
|                 Shortcut: S | ||||
|               </Tooltip> | ||||
|             </ActionButton> | ||||
|           </li> | ||||
|         )} | ||||
|         {nextEvents.includes('Cancel') && !state.matches('idle') && ( | ||||
|           <li className="contents"> | ||||
|             <ActionButton | ||||
|               className={buttonClassName} | ||||
|               Element="button" | ||||
|               onClick={() => send({ type: 'Cancel' })} | ||||
|               iconStart={{ | ||||
|                 icon: 'arrowLeft', | ||||
|                 iconClassName, | ||||
|                 bgClassName, | ||||
|               }} | ||||
|               disabled={disableAllButtons} | ||||
|             > | ||||
|               Exit Sketch | ||||
|               <Tooltip | ||||
|                 delay={1250} | ||||
|                 position="bottom" | ||||
|                 className="!px-2 !text-xs" | ||||
|               > | ||||
|                 Shortcut: Esc | ||||
|               </Tooltip> | ||||
|             </ActionButton> | ||||
|           </li> | ||||
|         )} | ||||
|         {state.matches('Sketch no face') && ( | ||||
|           <li className="contents"> | ||||
|             <div className="mx-2 text-sm">click plane or face to sketch on</div> | ||||
|           </li> | ||||
|         )} | ||||
|         {state.matches('Sketch') && !state.matches('idle') && ( | ||||
|           <> | ||||
|             <li className="contents" key="line-button"> | ||||
|               <ActionButton | ||||
|                 className={buttonClassName} | ||||
|         {/* A menu item will either be a vertical line break, a button with a dropdown, or a single button */} | ||||
|         {currentModeItems.map((maybeIconConfig, i) => { | ||||
|           if (maybeIconConfig === 'break') { | ||||
|             return ( | ||||
|               <div | ||||
|                 key={'break-' + i} | ||||
|                 className="h-5 w-[1px] block bg-chalkboard-30 dark:bg-chalkboard-80" | ||||
|               /> | ||||
|             ) | ||||
|           } else if (Array.isArray(maybeIconConfig)) { | ||||
|             return ( | ||||
|               <ActionButtonDropdown | ||||
|                 Element="button" | ||||
|                 onClick={() => | ||||
|                   state?.matches('Sketch.Line tool') | ||||
|                     ? send('CancelSketch') | ||||
|                     : send({ | ||||
|                         type: 'change tool', | ||||
|                         data: { tool: 'line' }, | ||||
|                       }) | ||||
|                 key={maybeIconConfig[0].id} | ||||
|                 data-testid={maybeIconConfig[0].id + '-dropdown'} | ||||
|                 id={maybeIconConfig[0].id + '-dropdown'} | ||||
|                 name={maybeIconConfig[0].title} | ||||
|                 className={ | ||||
|                   'group/wrapper ' + | ||||
|                   buttonBorderClassName + | ||||
|                   ' !bg-transparent relative group !gap-0' | ||||
|                 } | ||||
|                 aria-pressed={state?.matches('Sketch.Line tool')} | ||||
|                 iconStart={{ | ||||
|                   icon: 'line', | ||||
|                   iconClassName, | ||||
|                   bgClassName, | ||||
|                 }} | ||||
|                 disabled={disableLineButton} | ||||
|                 splitMenuItems={maybeIconConfig.map((itemConfig) => ({ | ||||
|                   id: itemConfig.id, | ||||
|                   label: itemConfig.title, | ||||
|                   hotkey: itemConfig.hotkey, | ||||
|                   onClick: () => itemConfig.onClick(configCallbackProps), | ||||
|                   disabled: | ||||
|                     disableAllButtons || | ||||
|                     itemConfig.status !== 'available' || | ||||
|                     itemConfig.disabled === true, | ||||
|                   status: itemConfig.status, | ||||
|                 }))} | ||||
|               > | ||||
|                 Line | ||||
|                 <Tooltip | ||||
|                   delay={1250} | ||||
|                   position="bottom" | ||||
|                   className="!px-2 !text-xs" | ||||
|                 <ActionButton | ||||
|                   Element="button" | ||||
|                   id={maybeIconConfig[0].id} | ||||
|                   data-testid={maybeIconConfig[0].id} | ||||
|                   iconStart={{ | ||||
|                     icon: maybeIconConfig[0].icon, | ||||
|                     className: iconClassName, | ||||
|                     bgClassName: bgClassName, | ||||
|                   }} | ||||
|                   className={ | ||||
|                     '!border-transparent !px-0 pressed:!text-chalkboard-10 pressed:enabled:hovered:!text-chalkboard-10 ' + | ||||
|                     buttonBgClassName | ||||
|                   } | ||||
|                   aria-pressed={maybeIconConfig[0].isActive} | ||||
|                   disabled={ | ||||
|                     disableAllButtons || | ||||
|                     maybeIconConfig[0].status !== 'available' || | ||||
|                     maybeIconConfig[0].disabled | ||||
|                   } | ||||
|                   name={maybeIconConfig[0].title} | ||||
|                   aria-description={maybeIconConfig[0].description} | ||||
|                   onClick={() => | ||||
|                     maybeIconConfig[0].onClick(configCallbackProps) | ||||
|                   } | ||||
|                 > | ||||
|                   Shortcut: L | ||||
|                 </Tooltip> | ||||
|               </ActionButton> | ||||
|             </li> | ||||
|             <li className="contents" key="tangential-arc-button"> | ||||
|                   <span | ||||
|                     className={!maybeIconConfig[0].showTitle ? 'sr-only' : ''} | ||||
|                   > | ||||
|                     {maybeIconConfig[0].title} | ||||
|                   </span> | ||||
|                 </ActionButton> | ||||
|                 <ToolbarItemTooltip | ||||
|                   itemConfig={maybeIconConfig[0]} | ||||
|                   configCallbackProps={configCallbackProps} | ||||
|                 /> | ||||
|               </ActionButtonDropdown> | ||||
|             ) | ||||
|           } | ||||
|           const itemConfig = maybeIconConfig | ||||
|  | ||||
|           return ( | ||||
|             <div className="relative" key={itemConfig.id}> | ||||
|               <ActionButton | ||||
|                 className={buttonClassName} | ||||
|                 Element="button" | ||||
|                 onClick={() => | ||||
|                   state.matches('Sketch.Tangential arc to') | ||||
|                     ? send('CancelSketch') | ||||
|                     : send({ | ||||
|                         type: 'change tool', | ||||
|                         data: { tool: 'tangentialArc' }, | ||||
|                       }) | ||||
|                 } | ||||
|                 aria-pressed={state.matches('Sketch.Tangential arc to')} | ||||
|                 key={itemConfig.id} | ||||
|                 id={itemConfig.id} | ||||
|                 data-testid={itemConfig.id} | ||||
|                 iconStart={{ | ||||
|                   icon: 'arc', | ||||
|                   iconClassName, | ||||
|                   bgClassName, | ||||
|                   icon: itemConfig.icon, | ||||
|                   className: iconClassName, | ||||
|                   bgClassName: bgClassName, | ||||
|                 }} | ||||
|                 disabled={disableTangentialArc} | ||||
|               > | ||||
|                 Tangential Arc | ||||
|                 <Tooltip | ||||
|                   delay={1250} | ||||
|                   position="bottom" | ||||
|                   className="!px-2 !text-xs" | ||||
|                 > | ||||
|                   Shortcut: A | ||||
|                 </Tooltip> | ||||
|               </ActionButton> | ||||
|             </li> | ||||
|             <li className="contents" key="rectangle-button"> | ||||
|               <ActionButton | ||||
|                 className={buttonClassName} | ||||
|                 Element="button" | ||||
|                 onClick={() => | ||||
|                   state.matches('Sketch.Rectangle tool') | ||||
|                     ? send('CancelSketch') | ||||
|                     : send({ | ||||
|                         type: 'change tool', | ||||
|                         data: { tool: 'rectangle' }, | ||||
|                       }) | ||||
|                 className={ | ||||
|                   'pressed:!text-chalkboard-10 pressed:enabled:hovered:!text-chalkboard-10 ' + | ||||
|                   buttonBorderClassName + | ||||
|                   ' ' + | ||||
|                   buttonBgClassName + | ||||
|                   (!itemConfig.showTitle ? ' !px-0' : '') | ||||
|                 } | ||||
|                 aria-pressed={state.matches('Sketch.Rectangle tool')} | ||||
|                 iconStart={{ | ||||
|                   icon: 'rectangle', | ||||
|                   iconClassName, | ||||
|                   bgClassName, | ||||
|                 }} | ||||
|                 disabled={disableRectangle} | ||||
|                 title={ | ||||
|                   canRectangleTool(context) | ||||
|                     ? 'Rectangle' | ||||
|                     : 'Can only be used when a sketch is empty currently' | ||||
|                 name={itemConfig.title} | ||||
|                 aria-description={itemConfig.description} | ||||
|                 aria-pressed={itemConfig.isActive} | ||||
|                 disabled={ | ||||
|                   disableAllButtons || | ||||
|                   itemConfig.status !== 'available' || | ||||
|                   itemConfig.disabled | ||||
|                 } | ||||
|                 onClick={() => itemConfig.onClick(configCallbackProps)} | ||||
|               > | ||||
|                 Rectangle | ||||
|                 <Tooltip | ||||
|                   delay={1250} | ||||
|                   position="bottom" | ||||
|                   className="!px-2 !text-xs" | ||||
|                 > | ||||
|                   Shortcut: R | ||||
|                 </Tooltip> | ||||
|                 <span className={!itemConfig.showTitle ? 'sr-only' : ''}> | ||||
|                   {itemConfig.title} | ||||
|                 </span> | ||||
|               </ActionButton> | ||||
|             </li> | ||||
|           </> | ||||
|         )} | ||||
|         {state.matches('Sketch.SketchIdle') && | ||||
|           nextEvents.filter( | ||||
|             (eventName) => | ||||
|               eventName.includes('Make segment') || | ||||
|               eventName.includes('Constrain') | ||||
|           ).length > 0 && ( | ||||
|             <ActionButtonDropdown | ||||
|               splitMenuItems={splitMenuItems} | ||||
|               className={buttonClassName} | ||||
|               Element="button" | ||||
|               iconStart={{ | ||||
|                 icon: 'dimension', | ||||
|                 iconClassName, | ||||
|                 bgClassName, | ||||
|               }} | ||||
|             > | ||||
|               Constraints | ||||
|             </ActionButtonDropdown> | ||||
|           )} | ||||
|         {state.matches('idle') && ( | ||||
|           <li className="contents"> | ||||
|             <ActionButton | ||||
|               className={buttonClassName} | ||||
|               Element="button" | ||||
|               onClick={() => | ||||
|                 commandBarSend({ | ||||
|                   type: 'Find and select command', | ||||
|                   data: { name: 'Extrude', groupId: 'modeling' }, | ||||
|                 }) | ||||
|               } | ||||
|               disabled={!state.can('Extrude') || disableAllButtons} | ||||
|               title={ | ||||
|                 state.can('Extrude') | ||||
|                   ? 'extrude' | ||||
|                   : 'sketches need to be closed, or not already extruded' | ||||
|               } | ||||
|               iconStart={{ | ||||
|                 icon: 'extrude', | ||||
|                 iconClassName, | ||||
|                 bgClassName, | ||||
|               }} | ||||
|             > | ||||
|               Extrude | ||||
|               <Tooltip | ||||
|                 delay={1250} | ||||
|                 position="bottom" | ||||
|                 className="!px-2 !text-xs" | ||||
|               > | ||||
|                 Shortcut: E | ||||
|               </Tooltip> | ||||
|             </ActionButton> | ||||
|           </li> | ||||
|         )} | ||||
|         {state.matches('idle') && (DEV || (window as any)._enableFillet) && ( | ||||
|           <li className="contents"> | ||||
|             <ActionButton | ||||
|               className={buttonClassName} | ||||
|               Element="button" | ||||
|               onClick={() => | ||||
|                 commandBarSend({ | ||||
|                   type: 'Find and select command', | ||||
|                   data: { name: 'Fillet', groupId: 'modeling' }, | ||||
|                 }) | ||||
|               } | ||||
|               disabled={disableFillet} | ||||
|               title={disableFillet ? 'fillet' : "edge can't be filleted"} | ||||
|               iconStart={{ | ||||
|                 icon: 'fillet', // todo: add fillet icon | ||||
|                 iconClassName, | ||||
|                 bgClassName, | ||||
|               }} | ||||
|             > | ||||
|               Fillet | ||||
|               <Tooltip | ||||
|                 delay={1250} | ||||
|                 position="bottom" | ||||
|                 className="!px-2 !text-xs" | ||||
|               > | ||||
|                 Shortcut: F | ||||
|               </Tooltip> | ||||
|             </ActionButton> | ||||
|           </li> | ||||
|         )} | ||||
|               <ToolbarItemTooltip | ||||
|                 itemConfig={itemConfig} | ||||
|                 configCallbackProps={configCallbackProps} | ||||
|               /> | ||||
|             </div> | ||||
|           ) | ||||
|         })} | ||||
|       </ul> | ||||
|       {state.matches('Sketch no face') && ( | ||||
|         <div className="absolute top-full left-1/2 -translate-x-1/2 mt-2 py-1 px-2 bg-chalkboard-10 dark:bg-chalkboard-90 border border-chalkboard-20 dark:border-chalkboard-80 rounded shadow-lg"> | ||||
|           <p className="text-xs">Select a plane or face to start sketching</p> | ||||
|         </div> | ||||
|       )} | ||||
|     </menu> | ||||
|   ) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * The single button and dropdown button share content, so we extract it here | ||||
|  * It contains a tooltip with the title, description, and links | ||||
|  * and a hotkey listener | ||||
|  */ | ||||
| const ToolbarItemTooltip = memo(function ToolbarItemContents({ | ||||
|   itemConfig, | ||||
|   configCallbackProps, | ||||
| }: { | ||||
|   itemConfig: ToolbarItemResolved | ||||
|   configCallbackProps: ToolbarItemCallbackProps | ||||
| }) { | ||||
|   useHotkeys( | ||||
|     itemConfig.hotkey || '', | ||||
|     () => { | ||||
|       itemConfig.onClick(configCallbackProps) | ||||
|     }, | ||||
|     { | ||||
|       enabled: | ||||
|         itemConfig.status === 'available' && | ||||
|         !!itemConfig.hotkey && | ||||
|         !itemConfig.disabled && | ||||
|         !itemConfig.disableHotkey, | ||||
|     } | ||||
|   ) | ||||
|  | ||||
|   return ( | ||||
|     <Tooltip | ||||
|       inert={false} | ||||
|       position="bottom" | ||||
|       wrapperClassName="!p-4 !pointer-events-auto" | ||||
|       contentClassName="!text-left text-wrap !text-xs !p-0 !pb-2 flex gap-2 !max-w-none !w-72 flex-col items-stretch" | ||||
|     > | ||||
|       <div className="rounded-top flex items-center gap-2 pt-3 pb-2 px-2 bg-chalkboard-20/50 dark:bg-chalkboard-80/50"> | ||||
|         <span | ||||
|           className={`text-sm flex-1 ${ | ||||
|             itemConfig.status !== 'available' | ||||
|               ? 'text-chalkboard-70 dark:text-chalkboard-40' | ||||
|               : '' | ||||
|           }`} | ||||
|         > | ||||
|           {itemConfig.title} | ||||
|         </span> | ||||
|         {itemConfig.status === 'available' && itemConfig.hotkey ? ( | ||||
|           <kbd className="flex-none hotkey">{itemConfig.hotkey}</kbd> | ||||
|         ) : itemConfig.status === 'kcl-only' ? ( | ||||
|           <> | ||||
|             <span className="text-wrap font-sans flex-0 text-chalkboard-70 dark:text-chalkboard-40"> | ||||
|               KCL code only | ||||
|             </span> | ||||
|             <CustomIcon | ||||
|               name="code" | ||||
|               className="w-5 h-5 text-chalkboard-70 dark:text-chalkboard-40" | ||||
|             /> | ||||
|           </> | ||||
|         ) : ( | ||||
|           itemConfig.status === 'unavailable' && ( | ||||
|             <> | ||||
|               <span className="text-wrap font-sans flex-0 text-chalkboard-70 dark:text-chalkboard-40"> | ||||
|                 In development | ||||
|               </span> | ||||
|               <CustomIcon | ||||
|                 name="lockClosed" | ||||
|                 className="w-5 h-5 text-chalkboard-70 dark:text-chalkboard-40" | ||||
|               /> | ||||
|             </> | ||||
|           ) | ||||
|         )} | ||||
|       </div> | ||||
|       <p className="px-2 text-ch font-sans">{itemConfig.description}</p> | ||||
|       {itemConfig.links.length > 0 && ( | ||||
|         <> | ||||
|           <hr className="border-chalkboard-20 dark:border-chalkboard-80" /> | ||||
|           <ul className="p-0 px-1 m-0 flex flex-col"> | ||||
|             {itemConfig.links.map((link) => ( | ||||
|               <li key={link.label} className="contents"> | ||||
|                 <a | ||||
|                   href={link.url} | ||||
|                   target="_blank" | ||||
|                   rel="noreferrer" | ||||
|                   className="flex items-center rounded-sm p-1 no-underline text-inherit hover:bg-primary/10 hover:text-primary dark:hover:bg-chalkboard-70 dark:hover:text-inherit" | ||||
|                 > | ||||
|                   <span className="flex-1">Open {link.label}</span> | ||||
|                   <CustomIcon name="link" className="w-4 h-4" /> | ||||
|                 </a> | ||||
|               </li> | ||||
|             ))} | ||||
|           </ul> | ||||
|         </> | ||||
|       )} | ||||
|     </Tooltip> | ||||
|   ) | ||||
| }) | ||||
|  | ||||
| @ -17,11 +17,11 @@ import { | ||||
|   ZOOM_MAGIC_NUMBER, | ||||
| } from './sceneInfra' | ||||
| import { | ||||
|   EngineCommand, | ||||
|   Subscription, | ||||
|   EngineCommandManager, | ||||
|   UnreliableSubscription, | ||||
| } from 'lang/std/engineConnection' | ||||
| import { EngineCommand } from 'lang/std/artifactGraph' | ||||
| import { uuidv4 } from 'lib/utils' | ||||
| import { deg2Rad } from 'lib/utils2d' | ||||
| import { isReducedMotion, roundOff, throttle } from 'lib/utils' | ||||
| @ -585,10 +585,6 @@ export class CameraControls { | ||||
|       .add(direction.multiplyScalar(-distanceAfter)) | ||||
|     this.camera.position.copy(newPosition) | ||||
|  | ||||
|     const { z_near, z_far } = calculateNearFarFromFOV(this.lastPerspectiveFov) | ||||
|     this.camera.near = z_near | ||||
|     this.camera.far = z_far | ||||
|  | ||||
|     if (splitEngineCalls) { | ||||
|       await this.engineCommandManager.sendSceneCommand({ | ||||
|         type: 'modeling_cmd_req', | ||||
| @ -1144,9 +1140,6 @@ function convertThreeCamValuesToEngineCam({ | ||||
|   up: Vector3 | ||||
|   vantage: Vector3 | ||||
| } { | ||||
|   // Something to consider is that the orbit controls have a target, | ||||
|   // we're kind of deriving the target/lookAtVector here when it might not be needed | ||||
|   // leaving for now since it's working but maybe revisit later | ||||
|   const euler = new Euler().setFromQuaternion(quaternion, 'XYZ') | ||||
|  | ||||
|   const upVector = new Vector3(0, 1, 0).applyEuler(euler).normalize() | ||||
| @ -1157,18 +1150,50 @@ function convertThreeCamValuesToEngineCam({ | ||||
|       vantage: position, | ||||
|     } | ||||
|   } | ||||
|   const lookAtVector = new Vector3(0, 0, -1) | ||||
|     .applyEuler(euler) | ||||
|     .normalize() | ||||
|     .add(position) | ||||
|   const fudgeFactor2 = zoom * 0.9979224466814468 - 0.03473692325839295 | ||||
|   const zoomFactor = (-ZOOM_MAGIC_NUMBER + fudgeFactor2) / zoom | ||||
|   const direction = lookAtVector.clone().sub(position).normalize() | ||||
|   const newVantage = position.clone().add(direction.multiplyScalar(zoomFactor)) | ||||
|  | ||||
|   // re-implementing stuff here, though this is a bunch of Mike's code | ||||
|   // if we need to pull him in again, at least it will be familiar to him | ||||
|   // and it's all simple functions. | ||||
|   interface Coord3d { | ||||
|     x: number | ||||
|     y: number | ||||
|     z: number | ||||
|   } | ||||
|  | ||||
|   function buildLookAt(distance: number, center: Coord3d, eye: Coord3d) { | ||||
|     const eyeVector = normalized(sub(eye, center)) | ||||
|     return { center: center, eye: add(center, mult(eyeVector, distance)) } | ||||
|   } | ||||
|  | ||||
|   function mult(vecA: Coord3d, sc: number): Coord3d { | ||||
|     return { x: vecA.x * sc, y: vecA.y * sc, z: vecA.z * sc } | ||||
|   } | ||||
|  | ||||
|   function add(vecA: Coord3d, vecB: Coord3d): Coord3d { | ||||
|     return { x: vecA.x + vecB.x, y: vecA.y + vecB.y, z: vecA.z + vecB.z } | ||||
|   } | ||||
|  | ||||
|   function sub(vecA: Coord3d, vecB: Coord3d): Coord3d { | ||||
|     return { x: vecA.x - vecB.x, y: vecA.y - vecB.y, z: vecA.z - vecB.z } | ||||
|   } | ||||
|  | ||||
|   function dot(vecA: Coord3d, vecB: Coord3d) { | ||||
|     return vecA.x * vecB.x + vecA.y * vecB.y + vecA.z * vecB.z | ||||
|   } | ||||
|  | ||||
|   function length(vecA: Coord3d) { | ||||
|     return Math.sqrt(dot(vecA, vecA)) | ||||
|   } | ||||
|  | ||||
|   function normalized(vecA: Coord3d) { | ||||
|     return mult(vecA, 1.0 / length(vecA)) | ||||
|   } | ||||
|  | ||||
|   const lookAt = buildLookAt(64 / zoom, target, position) | ||||
|   return { | ||||
|     center: lookAtVector, | ||||
|     up: upVector, | ||||
|     vantage: newVantage, | ||||
|     center: new Vector3(lookAt.center.x, lookAt.center.y, lookAt.center.z), | ||||
|     up: new Vector3(0, 0, 1), | ||||
|     vantage: new Vector3(lookAt.eye.x, lookAt.eye.y, lookAt.eye.z), | ||||
|   } | ||||
| } | ||||
|  | ||||
| @ -1224,7 +1249,7 @@ export async function letEngineAnimateAndSyncCamAfter( | ||||
|       type: 'enable_sketch_mode', | ||||
|       adjust_camera: true, | ||||
|       animated: !isReducedMotion(), | ||||
|       ortho: false, | ||||
|       ortho: true, | ||||
|       entity_id: entityId, | ||||
|     }, | ||||
|   }) | ||||
| @ -1241,25 +1266,4 @@ export async function letEngineAnimateAndSyncCamAfter( | ||||
|       type: 'default_camera_get_settings', | ||||
|     }, | ||||
|   }) | ||||
|   await engineCommandManager.sendSceneCommand({ | ||||
|     type: 'modeling_cmd_req', | ||||
|     cmd_id: uuidv4(), | ||||
|     cmd: { | ||||
|       type: 'enable_sketch_mode', | ||||
|       adjust_camera: true, | ||||
|       animated: false, | ||||
|       ortho: true, | ||||
|       entity_id: entityId, | ||||
|     }, | ||||
|   }) | ||||
|   await new Promise((resolve) => setTimeout(resolve, 50)) | ||||
|   await engineCommandManager.sendSceneCommand({ | ||||
|     // CameraControls subscribes to default_camera_get_settings response events | ||||
|     // firing this at connection ensure the camera's are synced initially | ||||
|     type: 'modeling_cmd_req', | ||||
|     cmd_id: uuidv4(), | ||||
|     cmd: { | ||||
|       type: 'default_camera_get_settings', | ||||
|     }, | ||||
|   }) | ||||
| } | ||||
|  | ||||
